Как автоматически переключать мониторы с помощью моего ноутбука

11

У меня Dell Precision M4300 с Dell Dock PRO1X под управлением Ubuntu Natty.

Когда ноутбук установлен в док-станцию, ЖК-дисплей выключен, и я использую два внешних монитора, однако при отсоединении ноутбука он не переключается на экран ноутбука. То же самое происходит, когда я подключаю ноутбук, он не переключается на внешние мониторы.

Если я перезагружу ноутбук, он выберет правильную настройку, но не будет автоматически менять мониторы при работающей Ubuntu.

Мой Xorg.conf

Cas
источник

Ответы:

10

Сценарии Dock / UnDock

Я наконец собрал полную настройку скрипта, которая будет определять мое состояние дока и автоматически переключать мониторы.

Первым делом я избавился от своего Xorg.conf, поскольку он вызвал больше проблем, которые он решил. Так как я использую NVDIA карту я в конце концов обнаружил , что использование disper был лучшим способом пойти. Я раньше обесценивал его, так как его стандартные команды не могли выполнить мою настройку двойного просмотра, но потом я обнаружил, что могу создать собственный метамод для использования с disper.

Чтобы создать собственный метамод, я использовал значения, хранящиеся в Xorg.conf, вместе с предыдущим тестированием с nv-control-dpy и xrandr в качестве руководства. Этот метамод и другие значения twinview были добавлены в файл, который можно передать для рассеивания через стандартный ввод .

Из-за наличия мониторов разных размеров с Twinview мне нужно использовать XCreateMouseVoid , как описано в этом вопросе .

Ниже приведена полная разбивка скриптов и файлов с их содержимым.


Сценарии

  1. Создайте скрипт XCreateMouseVoid:

    Имя сценария: ~/.mousevoid

    #!/bin/bash
    echo "Mouse Void"
    /opt/XCreateMouseVoid/XCreateMouseVoid 0 1112 1280 88 &
    /opt/XCreateMouseVoid/XCreateMouseVoid 0 0 1280 88 &
    

    chmod +x ~/.mousevoid

  2. Создать файл настроек 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
    
  3. Создайте скрипт сеанса экспорта 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.

  4. Создайте правило 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

  5. Создайте сценарий, связанный с правилом 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

  6. Создайте скрипт расстыковки (измените 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

  7. Создайте сценарий док-станции (измените 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 Параметры конфигурации
Autorandr
Disper PPA
nv-control-dpy
Форум по Ubuntu - Сценарии Un / Dock
Thinkwiki
udevadm

Cas
источник
Cas, мне предложили прокомментировать ваш пост, чтобы спросить о проблеме, которая у меня возникла
Toby Joiner
У вас есть скрипт dell-dock.sh?
Cas
1
Да, похоже, что этот файл не существует: $ cat /sys/devices/platform/dock.0/docked cat: /sys/devices/platform/dock.0/docked: No such file or directory
Toby Joiner
3

Вы можете использовать autorandr .

Автоматическое определение подключенного оборудования дисплея и загрузка соответствующей установки X11 с помощью xrandr или disper

Автоматический выбор конфигурации дисплея на основе подключенных устройств

Смотрите также:

landroni
источник
Это решение безболезненно и прекрасно работает.
бакалейщик