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 --reload
e removi o yubikey, mas nada aconteceu.
Eu costumava udevadm --property
confirmar 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/xsecurelock
será 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:
- 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.
- 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.