Я перемещаю свой ноутбук (ThinkPad T570, Ubuntu Xenial, Unity / Compiz) между различными рабочими средами, и я обнаружил, что использование апплета Unity Control Center «Display» не обеспечивает надежную (когда-либо ?!) структуру, указанную мной.
Чтобы обойти это, я написал скрипт bash / xrandr, который упорядочивает вещи так, как я хочу. (Доступно здесь как суть , но детали не очень важны для моего вопроса, поэтому не в полном объеме) Если экраны отображаются неправильно, я выполняю этот сценарий, чтобы расположить их.
Что я хотел бы сделать, так это запустить этот скрипт при подключении монитора. Unity / Compiz делают это для настроек, сохраненных в настройках Display, поэтому я хотел бы знать, как правильно использовать мои предпочтительные настройки, выраженные в bash / xrandr, и чтобы они были доставлены Ubuntu как часть «родного» опыта .
ОБНОВЛЕНИЕ: Я нашел ~/.config/monitors.xml
, где, похоже, Unity хранит настройки. Вот мой, с новыми ревизиями, когда я меняю местами.
Я думал о запуске перестановки через /etc/udev/rules.d
, но для этого потребовалось бы разрешить сценариям, запускаемым root, общаться с моим WM, что, вероятно, означает открытие разрешений xhost. Поскольку операционная система по умолчанию, по-видимому, организует дисплеи без этого (просто не с тем расположением, которое мне нужно), я бы предпочел найти как можно более «нативное» решение.
В итоге я обработал это в скрипте bash, который проверяет вывод xrandr
для подключенных устройств, а затем устанавливает соответствующие макеты для среды.
Ниже приведена упрощенная версия, которая демонстрирует, как это сделать.
#!/bin/bash
# Unity doesn't remember my screen layouts, so I made this to do it for me.
# GPLv3+, (c) Chris Burgess @xurizaemon
CONNECTED=$( xrandr | grep ' connected' )
LAYOUT=unknown
if [[ $CONNECTED = *"DP-1 connected"* ]] ; then
LAYOUT=thunderbolt
elif [[ $CONNECTED = *"HDMI-2 connected"* ]] ; then
LAYOUT=hdmi-2
fi
case "$LAYOUT" in
"thunderbolt")
# Thunderbolt, laptop
xrandr --output DP-1 --auto --left-of eDP-1 --primary
echo "Configured for $LAYOUT"
;;
"hdmi-2")
# Set to 57Hz for monitor support
xrandr --newmode "1920x1080_57.00" 163.00 1920 2040 2240 2560 1080 1083 1088 1119 -hsync +vsync
xrandr --addmode HDMI-2 "1920x1080_57.00"
# HDMI, laptop
xrandr --output HDMI-2 --mode "1920x1080_57.00" --left-of eDP-1 --primary
echo "Configured for $LAYOUT"
;;
*)
echo "Layout $LAYOUT not known."
esac
Мой действительный сценарий доступен по адресу https://gist.github.com/e1892192ea8dd03a210d2890f8f966e7