Як автоматично перемикати монітори за допомогою док-станції для ноутбука


11

У мене Dell Precision M4300 з Dell Dock PRO1X під керуванням Ubuntu Natty.

Коли у мене ноутбук приєднано, дисплей з LCD-дисплеєм вимкнений, і я використовую два зовнішніх монітора, однак при відстебленні ноутбука він не переходить на екран ноутбука. Те саме відбувається, коли я стикую ноутбук, він не переходить на зовнішні монітори.

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

Мій Xorg.conf

Відповіді:


10

Сценарії док / скасування

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

Перше, що я зробив - це позбутися мого Xorg.conf, оскільки це викликало більше проблем, які він вирішив. Оскільки я використовую картку nvdia, я врешті-решт виявив, що найкраще використовувати дісперс . Я відкидав це раніше, оскільки його стандартні команди не могли досягти моєї настройки подвійного перегляду, але тоді я виявив, що можу створити власну метамоду для використання з дисперсом.

Для створення власної метамоди я використав значення, що зберігаються у Xorg.conf разом із попереднім тестуванням з nv-control-dpy та xrandr як керівництво. Цей метамод та інші значення Twinview були додані до файлу, який може бути переданий для розгону через stdin .

Через наявність моніторів різного розміру з 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

    Потім помістіть його в Запуск програм:

    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. Створіть сценарій розмикання ( змініть_користувач відповідно до вашого імені користувача):

    Назва сценарію: /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. Створіть сценарій док-станції ( змініть_користувач відповідно до вашого імені користувача):

    Назва сценарію: /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

Потім відкрийте syslog у засобі перегляду файлів журналу


Ресурси

nVidia Readme: Налаштування Twinview , X Налаштування параметрів
Autorandr
Disper PPA
nv-control-dpy
Ubuntu Forum - Un / Dock Scripts
Thinkwiki
udevadm


Кас, мені запропонували прокоментувати ваш пост, щоб запитати про проблему, яку я маю з цим: askubuntu.com/questions/68737/auto-switching-with-dock
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

Ви можете використовувати autorndr .

Автоматичне виявлення апаратного забезпечення дисплея підключення та завантаження відповідної установки X11 за допомогою xrandr або дисперсу

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

Дивись також:


Це рішення безболісне і чудово працює.
продуктовий магазин
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.