外部モニター接続用のudevルールが機能しません。

外部モニター接続用のudevルールが機能しません。

ラップトップがドックに接続されたときに外部モニタを自動的に設定するための最初のudevルールを作成しました。うまくいかないことがわかりました(すごいです)。まず、外部モニターを抜いてドックに差し込んだときに送信されるイベントを確認しました。 (外部モニターが取り付けられているノートブックにドック自体を接続して接続を切断したときにも同じイベントが発生します。)これは*の出力です。udevadmモニター:

### CONNECTING EXTERNAL DISPLAY ###
KERNEL[12586.516063] change   /devices/pci0000:00/0000:00:01.1/0000:01:00.0/drm/card1 (drm)
UDEV  [12586.520032] change   /devices/pci0000:00/0000:00:01.1/0000:01:00.0/drm/card1 (drm)
KERNEL[12588.090123] change   /devices/pci0000:00/0000:00:01.1/0000:01:00.0/drm/card1 (drm)
UDEV  [12588.094088] change   /devices/pci0000:00/0000:00:01.1/0000:01:00.0/drm/card1 (drm)
### DISCONNECTING EXTERNAL DISPLAY ###
KERNEL[12577.885860] change   /devices/pci0000:00/0000:00:01.1/0000:01:00.0/drm/card1 (drm)
KERNEL[12577.885951] change   /devices/pci0000:00/0000:00:01.1/0000:01:00.0/drm/card1 (drm)
UDEV  [12577.894562] change   /devices/pci0000:00/0000:00:01.1/0000:01:00.0/drm/card1 (drm)
UDEV  [12577.900236] change   /devices/pci0000:00/0000:00:01.1/0000:01:00.0/drm/card1 (drm)

私のudevルールは次のとおりです。

KERNEL=="card1", SUBSYSTEM=="drm", ACTION=="change", RUN+="su vllblvck -c /usr/bin/setup-ext-display.sh"

実行する必要があるスクリプトは次のとおりです。

#!/bin/sh                                                                                                                                                                                       
# PLACE THIS SCRIPT INSIDE /usr/bin
# Automatically setup external monitor

xrandr_command="/usr/bin/xrandr"
sed_command="/bin/sed"

is_hdmi_connected=`DISPLAY=:0 $xrandr_command | $sed_command -n '/DP-1-2.3 connected/p'`
echo is_hdmi_connected: $is_hdmi_connected

if [ -n "$is_hdmi_connected" ]; then
  DISPLAY=:0 xrandr --output DP-1-2.3 --auto --right-of eDP-1 
  echo connecting
else
  DISPLAY=:0 $xrandr_command --output DP-1-2.3 --off
  echo disconnecting
fi

スクリプト自体はうまく機能し、私が望むことをします。でもrootユーザーに切り替えて確認しました。su vllblvck -cはい、部分的に働いています。ルールが実行されているかどうかを確認するために、次のコマンドを実行しましたが、期待どおりに実行されますが、実際には実行されないかどうかにかかわらず、障害が発生し、外部モニタは設定されません。

udevadm test --action="change" /devices/pci0000:00/0000:00:01.1/0000:01:00.0/drm/card1

udevルールのトピックが初めてであり、アイデアやGoogle検索が不足しているので、この問題を解決または追加のデバッグする方法についてのヒントをお寄せいただきありがとうございます。これが重要な場合は、5.14.14-arch1-1カーネルでArcoLinuxを実行しています。

ベストアンサー1

多くの試みの最後に、udevルールを正常に修正しました。うまくいくのは次のとおりです。

KERNEL=="card1", SUBSYSTEM=="drm", ENV{DISPLAY}=":0", ENV{XAUTHORITY}="/home/vllblvck/.Xauthority", RUN+="/usr/bin/setup-ext-display.sh"

なぜそれが動作し、以前のものが動作しないのか尋ねないでください。なぜならわからないからです。おそらく、udevルールについてもっと経験豊富な人が私たちに教えてくれます。

おすすめ記事