A regra do Arch udev não é acionada

A regra do Arch udev não é acionada

Estou tentando acionar o xsecurelock após a remoção de um yubikey. Isto se faz do seguinte modo:

arquivo: 90-yubikey.rules:

ACTION="remove", SUBSYSTEM="usb", ATTRS{idVendor}=="1050", RUN+="/bin/xsecurelock"

Então corri sudo udev --reloade removi o yubikey, mas nada aconteceu.

Eu costumava udevadm --propertyconfirmar que o udev detectou a remoção do dispositivo, e o idVendor era de fato 1050.

NB, estou ciente de que a execução /bin/xsecurelockserá bloqueada como root, o que não é o ideal, mas vou consertar isso assim que a regra for acionada :)

Responder1

ATTRS{} não corresponde às propriedades do udev – corresponde aos atributos do sysfs, que são algo completamente diferente. Ele lê diretamente os arquivos do subdiretório do dispositivo em /sys sempre que é usado, e o subdiretório do seu Yubikey simplesmente não existe mais depois de desconectado.

Os valores que você vê em 'udevadm monitor --property' são armazenados no banco de dados udev e podem ser correspondidos usando ENV{} ou ENVS{} durante a remoção. Então, em vez de ATTRS{idVendor}você deve usar ENV{ID_VENDOR_ID}.

Além disso, existem regras para escrever regras do udev:

  1. As regras do Udev não podem iniciar processos de longa duração; 'RUN' destina-se a ferramentas auxiliares que preparam o dispositivo, portanto, todo o manuseio do dispositivo aguarda sua saída.
  2. As regras do Udev não podem executar nada relacionado ao X11, pois não possuem o endereço do servidor X.

Uma solução comum é usar RUN+="systemctl ..."para iniciar o programa como um serviço systemd.

O método mais apropriado no seu caso é usar RUN+="loginctl lock-sessions"e deixar seu ambiente de desktop (ou xss-lock) cuidar da inicialização do seu protetor de tela.

informação relacionada