Linux
如何以 root 身份正確啟動 dbus-monitor –session?
我正在編寫一個腳本,該腳本將檢測 Gnome 會話是否以及何時被使用者“鎖定”,以踢出該使用者並防止人們在公共使用實驗室中鎖定螢幕。但是,似乎唯一的方法是啟動 dbus-monitor,如下所示:
dbus-monitor --session \ "type=signal,interface=org.gnome.ScreenSaver"
不幸的是,無論我嘗試了多少事情,我都無法讓它以 root 身份工作。我嘗試了以下方法:
1
eval `dbus-launch` dbus-monitor --session ...
這無法啟動並出現相同的錯誤
2
export $(dbus-launch) dbus-monitor --session ...
這會啟動,但無法成功監控消息。
3
eval `dbus-launch` export DBUS_SESSION_BUS_ADDRESS dbus-monitor --session ...
這會啟動但不監視消息
當我收到 X11 會話錯誤時的確切錯誤如下:
Failed to open connection to session message bus: dbus-launch failed to autolaunch D-Bus session: Fd 4 did not have the close-on-exec flag set! Setting the flag. Xlib: connection to ":0.0" refused by server Xlib: No protocol specified Autolaunch error: X11 initialization failed.
很簡單,我需要能夠遠端監控會話 org.gnome.ScreenSaver dbus 消息(最好以 root 身份,因為設置新使用者可能會很痛苦)並且無法弄清楚如何做到這一點。還應該補充一點,如果我以使用者身份登錄,我可以自行執行 dbus-monitor 命令而不會出現任何問題(它按預期記錄)。
更多資訊,因為它不會受到傷害。
核心:RHEL5
2.6.18-406.el5
DBUS 版本:
D-Bus Message Bus Launcher 1.1.2
GNOME 版本:
2.16.0
問題是 dbus-monitor 不知道連接到哪裡,因為它作為不同的使用者/會話(root)執行。您可以通過以下方式從環境中獲取 DBUS ADDRESS:
DBUS_ADDRESS=$(grep -z DBUS_SESSION_BUS_ADDRESS /proc/$(pidof -s gnome-session)/environ) dbus-monitor --address "$DBUS_ADDRESS" "type=signal,interface=org.gnome.ScreenSaver"
這些命令嘗試使用 找到正在執行的程序
pidof -s gnome-session
,然後查看環境並 grep 查找 DBUS_SESSION_BUS_ADDRESS 並將其分配給 DBUS_ADDRESS,然後使用該變數告訴 dbus-monitor 要監視的消息匯流排。請記住,如果您有多個會話,它將僅適用於“第一個”。