web-dev-qa-db-ja.com

ラップトップドックでモニターを自動的に切り替える方法

Ubuntu Nattyを実行しているDell Dock PRO1Xを搭載したDell Precision M4300があります。

ラップトップをドッキングすると、液晶ディスプレイがオフになり、2台の外部モニターを使用しますが、ラップトップをドッキング解除するとラップトップ画面に切り替わりません。ラップトップをドッキングしたときにも同じことが起こりますが、外部モニターに切り替わりません。

ラップトップを再起動すると、正しいセットアップが選択されますが、Ubuntuを実行しているモニターは自動的に変更されません。

私の Xorg.conf

10
Cas

Dock/UnDockスクリプト

最終的に、ドックの状態を検出し、モニターを自動的に切り替える完全なスクリプトセットアップを作成しました。

私が最初にしたことは、Xorg.confが解決した問題をさらに引き起こしたため、Xorg.confを取り除くことでした。私はnvdiaカードを使用しているので、最終的にdisper行くのに最適な方法でした。その標準コマンドがデュアルビュー設定を達成できなかったため、以前ディスカウントしていましたが、disperで使用するカスタムメタモードを作成できることがわかりました。

カスタムメタモードを作成するために、nv-control-dpyおよびxrandrこのメタモードと他のツインビューの値は、stdinを介してdisperに渡すことができるファイルに追加されました。

Twinviewにはさまざまなサイズのモニターがあるため、この question で説明されているように、 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. ドッキングスクリプトを作成する(変更 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

次に、sysloginLog File Viewer


資源

nVidia Readme: Config TwinviewX Configオプション
Autorandr
分散PPA
nv-control-dpy
buntu Forum-Un/Dock Scripts
Thinkwiki
devadm

10
Cas

autorandr を使用できます。

接続ディスプレイハードウェアを自動検出し、xrandrまたはdisperを使用して適切なX11セットアップを読み込みます。

接続されたデバイスに基づいてディスプレイ構成を自動的に選択する

こちらもご覧ください:

2
landroni