Я пытаюсь вызвать xsecurelock при удалении yubikey. Это делается следующим образом:
файл: 90-yubikey.rules
:
ACTION="remove", SUBSYSTEM="usb", ATTRS{idVendor}=="1050", RUN+="/bin/xsecurelock"
Затем я запустил sudo udev --reload
и удалил YubiKey, но ничего не произошло.
Я использовал udevadm --property
для подтверждения, что udev обнаружил удаление устройства, и idVendor действительно был 1050.
NB Я знаю, что запуск /bin/xsecurelock
от имени root приведет к блокировке, что не идеально, но я исправлю это, как только добьюсь срабатывания правила :)
решение1
ATTRS{} не соответствует свойствам udev – он соответствует атрибутам sysfs, которые являются совершенно другой вещью. Он напрямую считывает файлы из подкаталога устройства в /sys каждый раз, когда оно используется, и подкаталог для вашего Yubikey просто больше не существует, как только он был отключен.
Значения, которые вы видите в 'udevadm monitor --property', хранятся в базе данных udev и могут быть сопоставлены с использованием ENV{} или ENVS{} во время удаления. Поэтому вместо ATTRS{idVendor}
следует использовать ENV{ID_VENDOR_ID}
.
Помимо этого, существуют правила написания правил udev:
- Правила Udev не могут запускать длительные процессы; «RUN» предназначен для вспомогательных инструментов, которые подготавливают устройство, поэтому вся работа с устройством ждет его завершения.
- Правила Udev не могут запускать ничего, связанного с X11, поскольку у них нет адреса X-сервера.
Распространенным решением является RUN+="systemctl ..."
запуск программы как службы systemd.
Наиболее подходящим методом в вашем случае будет использование RUN+="loginctl lock-sessions"
среды рабочего стола (или xss-lock), которая управляет запуском вашей заставки.