Как автоматически переключать мониторы с помощью моего ноутбука
У меня Dell Precision M4300 с Dell Dock PRO1X под управлением Ubuntu Natty.
Когда ноутбук установлен в док-станцию, ЖК-дисплей выключен, и я использую два внешних монитора, однако, когда я отсоединяю ноутбук, он не переключается на экран ноутбука. То же самое происходит, когда я подключаю ноутбук, он не переключается на внешние мониторы.
Если я перезагружу ноутбук, он выберет правильную настройку, но не будет автоматически менять мониторы при работающей Ubuntu.
Мой Xorg.conf
2 ответа
Dock/UnDock Scripts
Я наконец собрал полную настройку скрипта, которая будет определять мое состояние дока и автоматически переключать мониторы.
Первым делом я избавился от своего Xorg.conf, поскольку он вызвал больше проблем, которые он решил. Так как я использую карту nvdia, я в конечном итоге обнаружил, что лучше всего использовать disper. Раньше я обесценивал его, поскольку его стандартные команды не могли выполнить настройку двойного просмотра, но потом я обнаружил, что могу создать собственный метамод для использования с disper.
Чтобы создать собственный метамод, я использовал значения, хранящиеся в Xorg.conf, вместе с предыдущим тестированием с nv-control-dpy и xrandr в качестве руководства. Этот метамод и другие значения twinview были добавлены в файл, который можно передать для рассеивания через стандартный ввод.
Из-за наличия мониторов разных размеров с Twinview мне нужно использовать XCreateMouseVoid, как описано в этом вопросе.
Ниже приведена полная разбивка скриптов и файлов с их содержимым.
Сценарии
Создайте скрипт XCreateMouseVoid:
Имя сценария:
~/.mousevoid
#!/bin/bash echo "Mouse Void" /opt/XCreateMouseVoid/XCreateMouseVoid 0 1112 1280 88 & /opt/XCreateMouseVoid/XCreateMouseVoid 0 0 1280 88 &
chmod +x ~/.mousevoid
Создать файл настроек Disper:
Имя файла:
~/.disperDocked
backend: nvidia associated displays: CRT-0, DFP-0, DFP-1 metamode: CRT-0: 1280x1024_60 @1280x1024 +0+88, DFP-1: 1920x1200 @1920x1200 +1280+0 scaling: default, default, stretched xinerama info order: DFP-1, CRT-0, DFP-0
Создайте скрипт сеанса экспорта dbus:
Имя сценария:
~/.export_x_info
#!/bin/bash # Export the dbus session address on startup so it can be used by any other environment sleep 5 touch $HOME/.Xdbus chmod 600 $HOME/.Xdbus env | grep DBUS_SESSION_BUS_ADDRESS > $HOME/.Xdbus echo 'export DBUS_SESSION_BUS_ADDRESS' >> $HOME/.Xdbus # Export XAUTHORITY value on startup so it can be used by cron env | grep XAUTHORITY >> $HOME/.Xdbus echo 'export XAUTHORITY' >> $HOME/.Xdbus
Установите только для исполняемого пользователем файла:
chmod 700 ~/.export_x_info
Затем поместите его в Startup Applications:
Name: X Environment Variables Command: /home/your_user/.export_x_info
Если вы не перезапустите компьютер, вам нужно запустить ~/.export_x_info, чтобы создать файл .Xdbus.
Создайте правило udev, которое будет запускаться при событии дока:
Имя сценария:
/etc/udev/rules.d/81-dell-dock.rules
KERNEL=="dock.0", ACTION=="change", RUN+="/usr/local/sbin/dell-dock"
chmod +x /etc/udev/rules.d/81-dell-dock.rules
Создайте сценарий, связанный с правилом udev:
Имя сценария:
/usr/local/sbin/dell-dock
#!/bin/sh # wait for the dock state to change sleep 0.5 DOCKED=$(cat /sys/devices/platform/dock.0/docked) case "$DOCKED" in "0") echo "Run UnDocking Script..." /usr/local/sbin/undock ;; "1") echo "Run Docking Script..." /usr/local/sbin/dock ;; esac exit 0
chmod +x /usr/local/sbin/dell-dock
Создайте скрипт расстыковки (измените your_user в соответствии с вашим именем пользователя):
Имя сценария:
/usr/local/sbin/undock
#!/bin/bash USER=your_user export HOME=/home/$USER source $HOME/.Xdbus export DISPLAY=:0 echo "UnDocking Script" echo "Switch primary monitor" sudo -u $USER disper -s echo "Killall XCreateMouseVoid" pkill XCreate echo "Restart conky" pkill conky sudo -u $USER conky &
chmod +x /usr/local/sbin/undock
Создайте сценарий док-станции (измените your_user в соответствии с вашим именем пользователя):
Имя сценария:
/usr/local/sbin/dock
#!/bin/bash USER=your_user export HOME=/home/$USER source $HOME/.Xdbus export DISPLAY=:0 echo "Docking Script" echo "Switch to Dualview" sudo -u $USER disper -i < $HOME/.disperDocked echo "Start XCreateMouseVoid" pkill XCreate sudo -u $USER $HOME/.mousevoid echo "Restart conky" pkill conky sudo -u $USER conky &
chmod +x /usr/local/sbin/dock
отлаживать
Для отладки сценариев док-станции необходимо включить ведение журнала отладки udev:
udevadm control --log-priority=debug
Затем откройте системный журнал в программе просмотра файлов журнала.
Ресурсы
nVidia Readme: Config Twinview, X Config Options
Autorandr
Диспер ППА
NV-контроль-DPY
Ubuntu Forum - Сценарии Un/Dock
Thinkwiki
udevadm
Вы можете использовать autorandr.
Автоматическое определение подключенного оборудования дисплея и загрузка соответствующей установки X11 с помощью xrandr или disper
Автоматический выбор конфигурации дисплея на основе подключенных устройств
Смотрите также: