외부 디스플레이 연결을 위한 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

스크립트 자체는 잘 작동하며 내가 원하는 작업을 수행합니다. 나는 심지어 루트 사용자로 전환하여 확인했습니다.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 규칙에 대해 좀 더 경험이 많은 사람이 우리에게 말해 줄 수도 있습니다.

관련 정보