Как я могу сохранить настройки отображения Unity

Я перемещаю свой ноутбук (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. Поскольку операционная система по умолчанию, по-видимому, организует дисплеи без этого (просто не с тем расположением, которое мне нужно), я бы предпочел найти как можно более «нативное» решение.

0
задан 18 December 2017 в 06:54

1 ответ

В итоге я обработал это в скрипте 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

0
ответ дан 18 December 2017 в 06:54

Другие вопросы по тегам:

Похожие вопросы: