Estoy intentando activar xsecurelock al eliminar un yubikey. Esto se hace de la siguiente manera:
archivo: 90-yubikey.rules
:
ACTION="remove", SUBSYSTEM="usb", ATTRS{idVendor}=="1050", RUN+="/bin/xsecurelock"
Luego corrí sudo udev --reload
y eliminé el yubikey, pero no pasó nada.
Solía udevadm --property
confirmar que udev detectó la eliminación del dispositivo y que el idVendor era efectivamente 1050.
NB: Soy consciente de que la ejecución /bin/xsecurelock
se bloqueará como root, lo cual no es ideal, pero lo arreglaré una vez que active la regla :)
Respuesta1
ATTRS{} no coincide con las propiedades de udev, coincide con los atributos de sysfs, que son algo completamente diferente. Lee directamente archivos del subdirectorio del dispositivo en /sys cada vez que se usa, y el subdirectorio de su Yubikey simplemente ya no existe una vez que se ha desconectado.
Los valores que ve en 'udevadm monitor --property' se almacenan en la base de datos udev y se pueden comparar usando ENV{} o ENVS{} durante la eliminación. Entonces, en lugar de ATTRS{idVendor}
deberías usar ENV{ID_VENDOR_ID}
.
Aparte de eso, existen reglas para escribir reglas de udev:
- Las reglas de Udev no pueden iniciar procesos de larga duración; 'RUN' está destinado a herramientas auxiliares que preparan el dispositivo, por lo que todo el manejo del dispositivo espera a que salga.
- Las reglas de Udev no pueden ejecutar nada relacionado con X11, ya que no tienen la dirección del servidor X.
Una solución alternativa común es utilizarlo RUN+="systemctl ..."
para iniciar el programa como un servicio systemd.
El método más apropiado en su caso es utilizar RUN+="loginctl lock-sessions"
y dejar que su entorno de escritorio (o xss-lock) se encargue del inicio de su protector de pantalla.