regra udev para conectar monitor externo não funciona

regra udev para conectar monitor externo não funciona

Eu criei minha primeira regra do udev para configurar automaticamente meu monitor externo quando conecto meu laptop à docking station. Acontece que não está funcionando (que surpresa). Primeiramente, verifiquei quais eventos estão sendo enviados quando desconecto e conecto meu monitor externo à docking station (os mesmos eventos acontecem quando eu conecto e desconecto a docking station do laptop com o monitor externo conectado a ele). Aqui está a saída de *monitor 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)

Aqui está minha regra do udev:

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

E aqui está o script que deve ser executado:

#!/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

O script em si funciona perfeitamente e faz o que eu quero. Eu até mudei para o usuário root para verificar sesu vllblvck -cparte está funcionando corretamente e sim, está. Executei o comando abaixo para verificar se a regra seria executada e supostamente seria, mas na realidade não funciona ou funciona de alguma forma e meu monitor externo nunca está configurado.

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

Eu apreciaria qualquer dica sobre como corrigir isso ou depurar ainda mais, já que o tópico de regras do udev é novo para mim e estou sem ideias e pesquisas no Google. E se isso importa aqui estou rodando o ArcoLinux com kernel 5.14.14-arch1-1.

Responder1

Consegui consertar minha regra do udev depois de muitas tentativas. Aqui está um que funciona:

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

Não me pergunte por que funciona e o anterior não, porque não tenho ideia. Talvez alguém mais experiente com as regras do udev possa nos contar.

informação relacionada