betcher писал(а): 10 янв 2023, 08:12Прикольно, интересно как сделано?
Следуя этому:
No Auto Resize with SPICE and virt-manager выяснилось, что масштабирование при изменении размеров окна VM устанавливается всего одной стройкой в терминале
от юзера:
Код: Выделить всё
xrandr --output $(xrandr | awk '/ connected/{print $1; exit; }') --auto
Чтобы менять масштаб автоматически, мудрые люди лепят этот скрипт на событие udev "change" отдельным рулесом:
/etc/udev/rules.d/50-x-resize.rules
Код: Выделить всё
ACTION=="change", KERNEL=="card0", SUBSYSTEM=="drm", RUN+="/bin/x-resize"
Поскольку udev будет дёргать скрипт от root-а, в скрипт заранее передаются XAUTHORITY и DISPLAY:
/bin/x-resize (+x, исполняемый)
Код: Выделить всё
export DISPLAY=:0 #Может отличаться
xauth merge /home/$(logname)/.Xauthority
xrandr --output $(xrandr | awk '/ connected/{print $1; exit; }') --auto
Однострочник, который делает всё это + перегружает правила udev выглядит так (запускать под su):
Код: Выделить всё
echo 'ACTION=="change", KERNEL=="card0", SUBSYSTEM=="drm", RUN+="/bin/x-resize"' > /etc/udev/rules.d/50-x-resize.rules; echo -e "#! /bin/bash\n\nexport DISPLAY=$DISPLAY\nxauth merge /home/\$(logname)/.Xauthority\nxrandr --output \$(xrandr | awk '/ connected/{print \$1; exit; }') --auto" > /bin/x-resize && chmod +x /bin/x-resize; udevadm control --reload-rules; udevadm trigger
Данный способ НЕ предназначен для GNOME/Budgie. GNOME и Budgie, а так же Linux Mint масштабируются сами, без костылей. Если этот скрипт применить в GNOME, то VM накроется медным тазом.
В LXQt резайц дисплея перехватывается чем-то другим и эффекта не будет.
В Plasma и XFCE (Live) в том числе и в Росе - работает.
В случае с масштабированием всё зависит от DE и от конторы, которая собирает дистрибутив. В Fedora MATE, например, udev вообще не понимает такого рулеса (см. выше). 32-х разрядные Mageia-7 тоже.
Вывод: В любом дистрибутиве и DE масштабирование окна VM работает во всех случаях только ручным запуском этого от юзера:
Код: Выделить всё
xrandr --output $(xrandr | awk '/ connected/{print $1; exit; }') --auto
Разумеется, в системе должен быть установлен
xrandr. В общем, всё как обычно, костыль на костыле.
UPD: универсальный скрипт включения масштабирования (установка/удаление при повторном запуске); требуется
xrandr
Код: Выделить всё
pkexec bash -c 'if [ -f /bin/xresize ]; then killall xresize; rm -f /bin/xresize /etc/xdg/autostart/xresize.desktop; exit; fi; echo -e "#! /bin/bash\n\nwhile true\ndo\nxrandr --output \$(xrandr | grep \" connected\" | cut -f1 -d\" \") --auto\nsleep 2\ndone" > /bin/xresize; chmod +x /bin/xresize; echo -e "[Desktop Entry]\nName=XResize\nExec=xresize &\nType=Application\nTerminal=false" > /etc/xdg/autostart/xresize.desktop' && [ -f /bin/xresize ] && nohup xresize &
Сначала создаётся файл /bin/xresize (работает в цикле) и /etc/xdg/autostart/xresize.desktop - ярлык автозапуска при рестарте системы. Каждые 2 сек. /bin/xresize устанавливает текущий размер экрана VM, тем самым сохраняя масштабирование при изменении размера.
...после тестов будет добавлен в GQemoo-v1.5 для вставки через Clipboard, как и предыдущий скрипт для монтирования ~/hostdir.