udev monitor regra de hotplug não está em execução

1

Eu configurei uma regra básica do udev para detectar quando eu conecto ou desconecto um cabo mDP.

O arquivo é /etc/udev/rules.d/95-monitor-hotplug.rules

KERNEL=="card0", SUBSYSTEM=="drm", ENV{DISPLAY}=":0", ENV{XAUTHORITY}="/var/run/gdm/auth-for-vazquez-OlbTje/database", RUN+="/usr/bin/arandr"

Ele deve apenas iniciar o arandr quando o cabo for mDP conectado ou desconectado, mas nada acontece. Eu também recarreguei as regras com:

udevadm control --reload-rules 

+++++++++++++++++++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++ Foi assim que o problema foi resolvido. Com os links fornecidos pelo @Gilles. Eu adicionei o seguinte código ao meu .profile , em seguida, apontei o ENV{$XAUTHORITY}="/home/user/.Xauthority" e também adicionei ACTION=="change" ao arquivo de regras. Depois disso tudo estava funcionando como deveria. Obrigado Gilles.

case $DISPLAY:$XAUTHORITY in
  :*:?*)
    # DISPLAY is set and points to a local display, and XAUTHORITY is
    # set, so merge the contents of '$XAUTHORITY' into ~/.Xauthority.
    XAUTHORITY=~/.Xauthority xauth merge "$XAUTHORITY";;
esac
    
por user3577138 08.05.2016 / 20:27

1 resposta

2

Não tenho certeza absoluta, mas acho que uma regra do udev se aplica à ação add por padrão. A regra do udev está em uma placa gráfica, não em um monitor; então ele é executado quando uma placa gráfica é adicionada ao sistema, o que na prática significa no momento da inicialização.

Conectar um monitor resulta em uma ação change , não em uma ação add . Portanto, a regra do udev deve especificar uma ação change .

KERNEL=="card0", SUBSYSTEM=="drm", ACTION=="change", \
    ENV{DISPLAY}=":0", ENV{XAUTHORITY}="/var/run/gdm/auth-for-vazquez-OlbTje/database", RUN+="/usr/bin/arandr"

Exemplos encontrados na web corroboram meu entendimento, por exemplo codingtony cujo monitor-hotplug.sh script pode ser do seu interesse .

O nome do arquivo em /var/run muda a cada vez que você reinicia, então você deve determiná-lo automaticamente dentro do seu script. Esta resposta deve ajudar.

    
por 09.05.2016 / 00:10