La regla udev para conectar una pantalla externa no funciona

La regla udev para conectar una pantalla externa no funciona

Creé mi primera regla udev para configurar automáticamente mi pantalla externa cuando conecto mi computadora portátil a la estación de acoplamiento. Resulta que las cosas no funcionan (qué sorpresa). Primero, verifiqué qué eventos se envían cuando desconecto y conecto mi pantalla externa a la estación de acoplamiento (los mismos eventos suceden cuando conecto y desconecto la estación de acoplamiento de la computadora portátil con la pantalla externa conectada). Aquí está el resultado 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)

Aquí está mi regla udev:

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

Y aquí está el script que se supone que debe ejecutar:

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

El script en sí funciona bien y hace lo que quiero que haga. Incluso he cambiado al usuario root para comprobar sisu vllblvck -cLa pieza funciona correctamente y sí. Ejecuté el siguiente comando para verificar si la regla se ejecutaría y supuestamente lo haría, pero en realidad no funciona o funciona mal de alguna manera y mi pantalla externa nunca se configura.

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

Agradecería cualquier consejo sobre cómo solucionar este problema o depurarlo aún más, ya que el tema de las reglas de udev es nuevo para mí y me he quedado sin ideas y sin búsquedas en Google. Y si eso importa, estoy ejecutando ArcoLinux con el kernel 5.14.14-arch1-1.

Respuesta1

Logré arreglar mi regla udev después de muchos intentos. Aquí hay uno que funciona:

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

No me pregunten por qué funciona y el anterior no porque no tengo idea. Quizás alguien con más experiencia con las reglas de udev pueda decirnos.

información relacionada