我正在尝试在移除 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 规则还有一些规则:
- Udev 规则无法启动长时间运行的进程;“RUN”用于准备设备的辅助工具,因此所有设备处理都等待它退出。
- Udev 规则无法运行任何与 X11 相关的内容,因为它们没有 X 服务器的地址。
一个常见的解决方法是将该RUN+="systemctl ..."
程序作为 systemd 服务启动。
最适合您情况的方法是使用RUN+="loginctl lock-sessions"
您的桌面环境(或 xss-lock)处理屏幕保护程序的启动。