udev 規則在刪除 hid 金鑰時鎖定會話

udev 規則在刪除 hid 金鑰時鎖定會話

我試圖在刪除我的 hid 裝置(HyperFIDO U2F 金鑰)時鎖定會話。然而,經過多次嘗試,我都沒有成功。

我嘗試建立一個 udev 規則,如下/etc/udev/rules.d/50-lockscreen.rules所示:

SUBSYSTEM="hid", ACTION=="remove", RUN+="/usr/local/bin/lock.sh"

它所呼叫的腳本lock.sh如下所示:

#!/bin/bash
/usr/bin/gnome-screensaver-command --lock

誰能幫我?

答案1

假設您使用的是使用 systemd 的發行版。如果是這樣 ...

看這個獲取有關如何獲取要放入規則中的關鍵設備信息的信息,以便它與與刪除相關的特定事件匹配(會有多個),然後在規則的 RUN 部分中放入/usr/bin/loginctl lock-sessions。重新載入 udev 規則,拔出鑰匙,您的螢幕將鎖定,該電腦上的所有會話也將鎖定。

鎖定您必須找到您的特定會話 ID 並僅鎖定該會話 ID,但如果您擁有 root 權限,則您可能擁有整台電腦。在大多數情況下,鎖定所有會話不是問題。

你就完成了。

答案2

最可能的解釋是 gnome-screensaver-command 在 udev 提供的上下文中運行時不知道誰的螢幕保護程式打開哪個顯示器它應該命令 - 它不在您的用戶帳戶下運行,並且它沒有在您的 X 用戶會話中傳播的環境變數。

一種方法可以可能開始工作:

  • 在 su 下向您的用戶執行 gnome-screensaver-command
  • 確保 DISPLAY 環境變數設定為與 X 會話中終端機中的值相同的值
  • 確保建立了與 X 會話的連接權限 - 這將需要對 xauth 和/或 xhost 進行一些調整,詳細資訊非常取決於您的特定設置

更詳細地解釋這個問題: gnome 使用X11 作為其基礎設施,允許諸如“多個獨立會話,這些會話可能都有不同的用戶帳戶登錄,可透過功能鍵切換或連接到不同的顯示器和滑鼠/鍵盤”之類的場景」(「多座」)和「實際會話運行在與監視器和 HID 裝置所連接的機器不同的機器上」(「XDMCP」是此處的關鍵字)。 「一個會話,一個使用者」實際上只是一種可能的用例,並且是唯一一個命令幹擾此類會話中的任何內容而不參與其中的命令可以知道如何正確反應 - 但沒有內置特殊規定對於這種情況。

答案3

手冊頁說:

 RUN{type}
      ...
      This can only be used for very short-running foreground tasks.
      Running an event process for a long period of time may block all
      further events for this or a dependent device.

      Starting daemons or other long-running processes is not appropriate
      for udev; the forked processes, detached or not, will be
      unconditionally killed after the event handling has finished.

所以你不能在 udev 規則中執行此操作。但是您可以使用 udev 規則與登入時啟動的另一個程式進行通信,然後該程式將開啟螢幕保護程式。這也解決了為該程式提供正確的顯示、權限cookie等的問題。

它還解決瞭如果多個用戶登入並使用 X(物理上,如果有多個螢幕,或遠端)會發生什麼的問題,因為 X 是明確編寫的以允許這種情況,即使許多人不知道並且不要使用此功能。

相關內容