用於連接外部顯示器的 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用戶來檢查是否蘇 vllblvck -c部分工作正常,是的。我已經運行下面的命令來檢查規則是否會執行,據說會執行,但實際上它不會執行或以某種方式出現故障,而且我的外部顯示器從未設定過。

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

我將不勝感激有關如何解決此問題或進一步調試此問題的任何提示,因為 udev 規則主題對我來說是新的,並且我已經沒有想法和谷歌搜索了。如果這很重要,我正在運行帶有 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 規則更有經驗的人可以告訴我們。

相關內容