Arch udev 规则未触发

Arch udev 规则未触发

我正在尝试在移除 yubikey 时触发 xsecurelock。具体操作如下:

文件:90-yubikey.rules

ACTION="remove", SUBSYSTEM="usb", ATTRS{idVendor}=="1050", RUN+="/bin/xsecurelock"

然后我跑过去sudo udev --reload,并移除了 yubikey,但什么也没发生。

我用来udevadm --property确认udev检测到了设备的移除,并且idVendor确实是1050。

注意:我知道运行/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)处理屏幕保护程序的启动。

相关内容