Mer*_*lyn 3 linux redhat gnome dbus
我正在编写一个脚本,该脚本将检测 Gnome 会话是否以及何时被用户“锁定”,以踢出该用户并防止人们在公共使用实验室中锁定屏幕。但是,似乎唯一的方法是启动一个 dbus-monitor,如下所示:
dbus-monitor --session \ "type=signal,interface=org.gnome.ScreenSaver"
Run Code Online (Sandbox Code Playgroud)
不幸的是,无论我尝试了多少事情,我都无法以 root 身份运行它。我尝试了以下方法:
eval `dbus-launch`
dbus-monitor --session ...
Run Code Online (Sandbox Code Playgroud)
这无法启动并出现相同的错误
export $(dbus-launch)
dbus-monitor --session ...
Run Code Online (Sandbox Code Playgroud)
这将启动但未成功监视消息。
eval `dbus-launch`
export DBUS_SESSION_BUS_ADDRESS
dbus-monitor --session ...
Run Code Online (Sandbox Code Playgroud)
这会启动但不监视消息
当我得到 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.
Run Code Online (Sandbox Code Playgroud)
很简单,我需要能够远程监控会话 org.gnome.ScreenSaver dbus 消息(最好以 root 身份,因为设置新用户可能很痛苦)并且无法弄清楚如何做到这一点。还应该补充一点,如果我以用户身份登录,我可以自己运行 dbus-monitor 命令而没有任何问题(它按预期记录)。
更多信息,因为它不会伤害。
内核:RHEL5
2.6.18-406.el5
Run Code Online (Sandbox Code Playgroud)
数据总线版本:
D-Bus Message Bus Launcher 1.1.2
Run Code Online (Sandbox Code Playgroud)
GNOME 版本:
2.16.0
Run Code Online (Sandbox Code Playgroud)
小智 6
问题是 dbus-monitor 不知道连接到哪里,因为它以不同的用户/会话(root)身份运行。您可以使用以下内容从环境中获取 DBUS 地址:
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"
Run Code Online (Sandbox Code Playgroud)
这些命令尝试使用 找到正在运行的进程pidof -s gnome-session
,然后查看 DBUS_SESSION_BUS_ADDRESS 的环境和 grep 并将其分配给 DBUS_ADDRESS,然后使用该变量告诉 dbus-monitor 要监视的消息总线。
请记住,如果您有多个会话,它将只适用于“第一个”。
归档时间: |
|
查看次数: |
12884 次 |
最近记录: |