Linux

如何以 root 身份正確啟動 dbus-monitor –session?

  • November 16, 2020

我正在編寫一個腳本,該腳本將檢測 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 要監視的消息匯流排。

請記住,如果您有多個會話,它將僅適用於“第一個”。

引用自:https://serverfault.com/questions/699718