Автоматическое масштабирование экрана в ОС Astra Linux
Автоматическое масштабирование экрана в ОС Astra Linux
В некоторых случаях при переходе в полноэкранный режим в пользовательской рабочей станции гостевая ОС Astra Linux не производит автоматическое масштабирование экрана.
Условием масштабирования является запущенный процесс spice-vdagent
в сессии пользователя.
Для настройки автоматического масштабирования экрана нужно:
- отредактировать файл
/etc/udev/rules.d/50-spice-vdagent.rules
, создав правило дляudev
:
ACTION=="change", KERNEL=="card0", SUBSYSTEM=="drm", RUN+="/usr/local/bin/x-resize"
- перезапустить сервис
udev
командой:
sudo systemctl restart udev
- создать один из вариантов исполняемого файла
/usr/local/bin/x-resize
:
В примерах исполняемого файла указана переменная окружения DISPLAY=:0
, актуальная только без активированного механизма единого входа (SSO).
Для того чтобы задать для нее правильное значение при активированном механизме SSO, нужно проверить, какой дисплей используется:
printenv | grep DISPLAY
И далее использовать полученное значение вместо DISPLAY=:0
.
- вариант 1 - простое масштабирование:
#!/bin/sh PATH=/usr/bin desktopuser=$(/bin/ps -o user:80= -C spice-vdagent | grep -v fly-dm) || exit 0 export DISPLAY=:0 export XAUTHORITY=$(eval echo "~$desktopuser")/.Xauthority xrandr --output $(xrandr | awk '/ connected/{print $1; exit; }') --auto
- вариант 2 - масштабирование конкретного монитора. В данном примере исполняемого файла второй монитор располагается слева от основного:
#!/bin/sh PATH=/usr/bin # Имя пользователя получается через вывод списка пользователей (заголовки отключены), от имени которых запущен spice-vdagent | из списка вырезается имя fly-dm (сессия отображения ввода логина-пароля) desktopuserlist=$(/bin/ps -o user:80= -C spice-vdagent | grep -v fly-dm) || exit 0 # Проверенное решение, но работает только для имён пользователей без дефисов, пробелов и т.д. #desktopuserlist=$(/bin/ps -ef | /bin/grep -oP '^\w+ (?=.*vdagent( |$))') || exit 0 for desktopuser in $desktopuserlist; do export DISPLAY=:0 export XAUTHORITY=$(eval echo "~$desktopuser")/.Xauthority #Get active monitors ACTMONS=$(xrandr --listactivemonitors | awk '/[[:alnum:]]+ +/ {print $4}' | sort) #Get primary monitor PRIMARYMON=$(xrandr --listactivemonitors | awk '/*/ {print $4}') #Get current and preferred display resolutions for MON in $ACTMONS do #Get preferred display resolution PREFRES=$(xrandr | awk -v monpref="$MON connected" '/connected/ {p = 0} $0 ~ monpref {p = 1} p' | awk '/+/ {print $1;}' | sed -n '2~2p') #Get current display resolution CURNRES=$(xrandr | awk -v moncurn="$MON connected" '/connected/ {p = 0} $0 ~ moncurn {p = 1} p' | awk '/*/ {print $1;}') if [[ $CURNRES != $PREFRES ]]; then if [[ $MON == $PRIMARYMON ]]; then xrandr --output $MON --auto logger -p local0.notice -t ${0##*/}[$$] "$MON primary display change resolution to preferred $PREFRES" else xrandr --output $MON --left-of $PRIMARYMON --auto logger -p local0.notice -t ${0##*/}[$$] "$MON display change resolution to preferred $PREFRES and left of $PRIMARYMON" fi else logger -p local0.notice -t ${0##*/}[$$] "$MON display is already using preferred resolution $PREFRES" fi done done
- сделать файл исполняемым:
sudo chmod +x /usr/local/bin/x-resize
Для масштабирования экрана приветствия выполнить:
- заблокировать автостарт
kscreen
, переименовав расширение или удалив данные файлы из указанных директорий:/usr/share/fly-dm/autostart/greeter/kscreend_autostart.desktop
,/usr/share/fly-dm/preload/greeter/kscreend_preload.desktop
; - сделать символьную ссылку на ярлык для автозапуска
spice-vdagen
t для экрана приветствия:
sudo ln -s /etc/xdg/autostart/spice-vdagent.desktop /usr/share/fly-dm/autostart/greeter/spice-vdagent.desktop
- перезапустить процесс
fly-dm
командой:
sudo systemctl restart fly-dm
Если файл /usr/bin/fly-monitor-hotplug.sh
не является исполняемым или удален, то на экране приветствия масштабирование не выполняется.