在 crontab 中运行一个 dbus 程序,如何知道 SESSION id?

dai*_*isy 17 kde d-bus

我需要在 crontab 中运行一些程序,但该程序如何知道 dbus 会话 ID?它仅适用于会话管理器启动的程序。

Gil*_*il' 24

这个问题有点类似于访问 X 显示查找 X cookie 文件的位置。(另外,如果您想在用户的显示器上启动 GUI 程序,请参考这些问题。)

Dbus 将会话地址存储在~/.dbus/session-bus. 文件名是$machine_id-$display_number,其中$machine_id是随机生成的数字存储在/var/lib/dbus/machine-id$display_number是 X 显示编号($DISPLAY:$display_number:$display_number.$screen_number)。在该文件~/.dbus/session-bus是可分析由一个外壳和包含定义为DBUS_SESSION_BUS_ADDRESSDBUS_SESSION_BUS_PID

dbus_session_file=~/.dbus/session-bus/$(cat /var/lib/dbus/machine-id)-0
if [ -e "$dbus_session_file" ]; then
  . "$dbus_session_file"
  export DBUS_SESSION_BUS_ADDRESS DBUS_SESSION_BUS_PID
  dbus-send …
fi
Run Code Online (Sandbox Code Playgroud)

请注意,不能保证 dbus 守护程序仍然可用。用户可能已注销。

另一种方法是在桌面会话中找到进程的 PID,并从其环境中获取 dbus 地址。

export $(</proc/$pid/environ tr \\0 \\n | grep -E '^DBUS_SESSION_BUS_ADDRESS=')
Run Code Online (Sandbox Code Playgroud)

如果 crontab 以 root 身份运行,并且您想与在控制台上登录的任何用户的会话进行通信,请参阅我可以以 root 身份在另一个用户的桌面上启动图形程序吗?


归档时间:

查看次数:

10825 次

最近记录:

6 年,8 月 前