Ich versuche, xsecurelock beim Entfernen eines Yubikeys auszulösen. Dies geschieht wie folgt:
Datei: 90-yubikey.rules
:
ACTION="remove", SUBSYSTEM="usb", ATTRS{idVendor}=="1050", RUN+="/bin/xsecurelock"
Dann bin ich losgelaufen sudo udev --reload
und habe den Yubikey entfernt, aber nichts ist passiert.
Ich habe udevadm --property
bestätigt, dass Udev die Entfernung des Geräts erkannt hat und dass der IDVendor tatsächlich 1050 war.
NB: Mir ist bewusst, dass die Ausführung /bin/xsecurelock
als Root gesperrt wird, was nicht ideal ist, aber ich werde das beheben, sobald die Regel ausgelöst wird :)
Antwort1
ATTRS{} stimmt nicht mit udev-Eigenschaften überein – es stimmt mit sysfs-Attributen überein, was etwas völlig anderes ist. Es liest bei jeder Verwendung direkt Dateien aus dem Unterverzeichnis des Geräts unter /sys, und das Unterverzeichnis für Ihren Yubikey existiert einfach nicht mehr, sobald er ausgesteckt wurde.
Die Werte, die Sie in „udevadm monitor --property“ sehen, werden in der Udev-Datenbank gespeichert und können beim Entfernen mit ENV{} oder ENVS{} abgeglichen werden. Anstelle von ATTRS{idVendor}
sollten Sie also verwenden ENV{ID_VENDOR_ID}
.
Abgesehen davon gibt es Regeln zum Schreiben von Udev-Regeln:
- Udev-Regeln können keine Prozesse mit langer Laufzeit starten; „RUN“ ist für Hilfstools gedacht, die das Gerät vorbereiten, sodass die gesamte Geräteverarbeitung auf das Beenden wartet.
- Udev-Regeln können nichts X11-bezogenes ausführen, da sie nicht über die Adresse des X-Servers verfügen.
Eine gängige Problemumgehung besteht darin, RUN+="systemctl ..."
das Programm als systemd-Dienst zu starten.
In Ihrem Fall besteht die am besten geeignete Methode darin, RUN+="loginctl lock-sessions"
den Start Ihres Bildschirmschoners Ihrer Desktopumgebung (oder XSS-Lock) zu überlassen.