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)處理螢幕保護程式的啟動。

相關內容