我正在研究一个脚本,该脚本将检测用户是否lockingGnome会话以及何时lockingGnome会话,以阻止用户locking公共实验室中的屏幕。 但是,似乎唯一的方法就是按如下方式启动一个dbus监视器:
dbus-monitor --session \ "type=signal,interface=org.gnome.ScreenSaver"
不幸的是,无论我尝试多less东西,我都无法以root身份工作。 我已经尝试了以下内容:
eval `dbus-launch` dbus-monitor --session ...
这无法启动相同的错误
export $(dbus-launch) dbus-monitor --session ...
这启动,但不成功监控消息。
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用户,因为设置一个新用户可能会很痛苦)并且不知道该怎么做。 还应该补充说,如果我是以用户身份login的,我可以自己运行dbus-monitor命令,没有任何问题(它按预期logging)。
更多的信息,因为它不能伤害。
内核: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 --session --address "$DBUS_ADDRESS" "type=signal,interface=org.gnome.ScreenSaver"
这些命令尝试使用pidof -s gnome-session查找正在运行的进程,然后查看环境并grepfindDBUS_SESSION_BUS_ADDRESS并将其分配给DBUS_ADDRESS,然后使用该variables告诉dbus-monitor监视要监视的消息总线。
请记住,如果您有多个会话,则只能使用“第一个”。