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.