Пользовательский двойной экран конфигурации глючит
Использование системных настроек Ubuntu для настройки двух экранов (в моем случае, настольного монитора и телевизора через HDMI) не эргономично.
Поэтому я решил написать удобный скрипт переключения, который позволяет мне выбирать между зеркальным выводом ("зеркало") и включением левого экрана / выключения правого экрана или выключения левого экрана / включения правого экрана ("переключатель"). Основано на xrandr
,
Работает как положено и мне нравится гибкость при использовании xrandr
, НО:
- Настройка без разрывов, необходимая для вывода на ТВ, либо игнорируется, либо неэффективна после использования моего сценария (почему?)
- системные настройки нарушаются после использования моего скрипта: если впоследствии я изменю конфигурацию экрана через системные настройки, вывод будет зашифрован.
Мой сценарий должен делать что-то ужасно неправильно. Как я могу заставить его работать правильно?
Автор сценария:
#!/bin/bash
DESKTOP="DP1" # desktop monitor
DSIZE="1280x1024"
TVPORT="HDMI1" # connection to TV
TVSIZE="1920x1080"
SCALE="1.5" # e.g. 1920/1280
if xrandr | grep "$TVPORT" | egrep "\)$"
then # TV port is turned OFF => turn it on
selected_mode=`echo -e "mirror\nswitch" | zenity --list --text="Choose Mode:" --column="Mode"`
if test "$selected_mode" = "mirror"
then
xrandr --output "$TVPORT" --auto --left-of "$DESKTOP" --output "$DESKTOP" --panning "$TVSIZE"
xrandr --output "$DESKTOP" --scale "$SCALE"x"$SCALE" --mode "$DSIZE" --fb "$TVSIZE" --panning "$TVSIZE"
fi
if test "$selected_mode" = "switch"
then
xrandr --output "$TVPORT" --auto --output "$DESKTOP" --off
fi
else # TV port is turned ON => turn it off
xrandr --output "$TVPORT" --off --output "$DESKTOP" --mode "$DSIZE" --fb "$DSIZE" --scale 1x1 --panning "$DSIZE"
fi
exit 0
Tearfree, который работает при обычном использовании Ubuntu, но не после запуска моего скрипта:
$ cat /etc/X11/xorg.conf
Section "Device"
Identifier "Intel Graphics"
Driver "intel"
Option "AccelMethod" "sna"
Option "SwapbuffersWait" "true"
Option "TearFree" "true"
EndSection