Правило Arch udev не срабатывает

Правило Arch udev не срабатывает

Я пытаюсь вызвать 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:

  1. Правила Udev не могут запускать длительные процессы; «RUN» предназначен для вспомогательных инструментов, которые подготавливают устройство, поэтому вся работа с устройством ждет его завершения.
  2. Правила Udev не могут запускать ничего, связанного с X11, поскольку у них нет адреса X-сервера.

Распространенным решением является RUN+="systemctl ..."запуск программы как службы systemd.

Наиболее подходящим методом в вашем случае будет использование RUN+="loginctl lock-sessions"среды рабочего стола (или xss-lock), которая управляет запуском вашей заставки.

Связанный контент