web-dev-qa-db-ja.com

システムがホットプラグされたディスプレイポートを検出しない(Thunderboltコネクタ経由)

起動前に接続すると、外部ディスプレイ(Thunderboltを介してラップトップに接続)は正常に機能します。ただし、何らかの方法でプラグを抜いたり切断したりすると、xrandrは再接続されたモニターを検出しなくなります。

グラフィックカードの処理にbumblebeeを使用して、Arch Linuxを実行しています。外部カードはThunderboltコネクタを介して接続されます。誰かがマシンの何が問題になっているのか、そしてどうすればホットプラグを機能させることができるのか教えてもらえますか?ありがとう。


[デバッグの詳細]

bumblebeeudevadmの複数のスレッドに続いて、いくつかのテストを行い、ホットプラグスクリプトを作成しました。しかし、問題はまだ解決されていません。結果は以下のように掲載されています。

マルハナバチの場合、2番目のモニターはホットプラグされていないときに正常に検出されるため、あまり調整しませんでした。

ホットプラグ関連の問題について。私は次のことをしました:

モニターが正常に動作している場合、xrandr --query

Screen 0: minimum 8 x 8, current 2944 x 1080, maximum 32767 x 32767
eDP1 connected primary 1920x1080+0+0 (normal left inverted right x axis y axis) 382mm x 215mm
   1920x1080     60.02*+

...

DP1 connected 1024x768+1920+0 (normal left inverted right x axis y axis) 0mm x 0mm
   1024x768      60.00* 

...

udevadm monitor --environment --udevを開いた状態でDP2からモニターを取り外すと、収集される情報は次のとおりです。

UDEV  [979.022342] change   /devices/pci0000:00/0000:00:02.0/drm/card0 (drm)
ACTION=change
DEVNAME=/dev/dri/card0
DEVPATH=/devices/pci0000:00/0000:00:02.0/drm/card0
DEVTYPE=drm_minor
HOTPLUG=1
ID_FOR_SEAT=drm-pci-0000_00_02_0
ID_PATH=pci-0000:00:02.0
ID_PATH_TAG=pci-0000_00_02_0
MAJOR=226
MINOR=0
SEQNUM=2650
SUBSYSTEM=drm
TAGS=:master-of-seat:uaccess:seat:
USEC_INITIALIZED=3775241

モニターを接続するとき:

UDEV  [1111.426386] change   /devices/pci0000:00/0000:00:02.0/drm/card0 (drm)
ACTION=change
DEVNAME=/dev/dri/card0
DEVPATH=/devices/pci0000:00/0000:00:02.0/drm/card0
DEVTYPE=drm_minor
HOTPLUG=1
ID_FOR_SEAT=drm-pci-0000_00_02_0
ID_PATH=pci-0000:00:02.0
ID_PATH_TAG=pci-0000_00_02_0
MAJOR=226
MINOR=0
SEQNUM=2651
SUBSYSTEM=drm
TAGS=:seat:uaccess:master-of-seat:
USEC_INITIALIZED=3775241

UDEV  [1111.522857] change   /devices/pci0000:00/0000:00:02.0/drm/card0 (drm)
ACTION=change
DEVNAME=/dev/dri/card0
DEVPATH=/devices/pci0000:00/0000:00:02.0/drm/card0
DEVTYPE=drm_minor
HOTPLUG=1
ID_FOR_SEAT=drm-pci-0000_00_02_0
ID_PATH=pci-0000:00:02.0
ID_PATH_TAG=pci-0000_00_02_0
MAJOR=226
MINOR=0
SEQNUM=2652
SUBSYSTEM=drm
TAGS=:seat:uaccess:master-of-seat:
USEC_INITIALIZED=3775241

モニターが接続されている場合、udevはハードウェアを検出できるようです。そこで、xrandrが新しいモニターを使用できるようにudevルールを設定しました。 /etc/udev/rules.d/95-monitor-hotplug.rulesのスクリプトは次のとおりです。

ACTION=="change", SUBSYSTEM=="drm", RUN+="/usr/local/bin/hotplug_monitor.sh"

そして/usr/local/bin/hotplug_monitor.sh

#!/bin/sh
export XAUTHORITY=/home/chong/.Xauthority

function connectDP1(){
    DISPLAY=:0 xrandr --output DP1 --auto --right-of eDP1
}

function disconnectDP1(){
    DISPLAY=:0 xrandr --output DP1 --off
}

function connectDP2(){
    DISPLAY=:0 xrandr --output DP2 --auto --right-of eDP1
}

function disconnectDP2(){
    DISPLAY=:0 xrandr --output DP2 --off
}

xrandr | grep "DP1 connected" &> /dev/null && connectDP1 || disconnectDP1
xrandr | grep "DP2 connected" &> /dev/null && connectDP2 || disconnectDP2

スクリプトは正常に実行されて終了しますが、その後もxrandr --queryDP1DP2が切断されていることを示します。

9
Chong

私はあなたのコードを見つけて、それを機能させようと頑張った。いかなる条件下でも、「ifthen」パラダイムで動作させることはできません。 「xrandr | grep」は、udevトリガーとして実行すると常にtrueになりませんでしたが、手動で実行すると機能しました。私はそれを2つのスクリプトに分割することを余儀なくされました。

私のデバイスは異なりますが(StarTech CDPVGDVHDMDP)、ここに私のバージョンを投稿します。

まず、トラブルシューティング時にudevルールをリロードすると便利だと思いました。

Sudo udevadm control --reload-rules

私のデバイスは少し異なっていて、サブシステム「hidraw」がトリガーできるものであることがわかりました。また、/ bin/bash/path/to/script "を実行することを余儀なくされましたが、それ以外の場合は実行されませんでした。これは私のudevルール(/etc/udev/rules.d/95-monitor-hotplug.rules)です。

ACTION=="remove", SUBSYSTEM=="hidraw", RUN+="/bin/bash /home/user/scripts/hotunplug-displayport.sh"
ACTION=="add", SUBSYSTEM=="hidraw", RUN+="/bin/bash /home/user/scripts/hotplug-displayport.sh"

これは私のホットプラグスクリプトです

#!/bin/bash
export XAUTHORITY=/home/user/.Xauthority
DISPLAY=:0 /usr/bin/xrandr --addmode DP-1 1680x1050
DISPLAY=:0 /usr/bin/xrandr --output DP-1 --right-of  eDP-1 --mode 1680x1050
echo "$(date) : Hotplug Connect DP-1" >> /var/log/hotplug.txt
DISPLAY=:0 /usr/bin/xrandr --addmode DP-2 1680x1050
DISPLAY=:0 /usr/bin/xrandr --output DP-2 --right-of  eDP-1 --mode 1680x1050
echo "$(date) : Hotplug Connect DP-2" >> /var/log/hotplug.txt

これは私のホットアンプラグスクリプトです

#!/bin/bash
export XAUTHORITY=/home/user/.Xauthority
DISPLAY=:0 /usr/bin/xrandr --output DP-1 --off
echo "$(date) : Hotplug Disconnect DP-1" >> /var/log/hotplug.txt
DISPLAY=:0 /usr/bin/xrandr --output DP-2 --off
echo "$(date) : Hotplug Disconnect DP-2" >> /var/log/hotplug.txt
1
nd34567s32e