我試圖在刪除 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)處理螢幕保護程式的啟動。