Kde

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

  • January 8, 2019

我需要在 crontab 中執行一些程序,但是程序如何知道 dbus 會話 ID?它僅適用於會話管理器啟動的程序。

這個問題有點類似於訪問 X 顯示查找 X cookie 文件的位置。(另外,如果您想在使用者顯示器上啟動 GUI 程序,請參閱這些問題。)

Dbus 將會話地址儲存在~/.dbus/session-bus. 文件的名稱是$machine_id-$display_number,其中$machine_id是儲存在其中的隨機生成的數字/var/lib/dbus/machine-id$display_number是 X 顯示的數字($DISPLAYis:$display_number:$display_number.$screen_number)。中的文件~/.dbus/session-bus可由 shell 解析,並包含 和 的DBUS_SESSION_BUS_ADDRESS定義DBUS_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

請注意,不能保證 dbus 守護程序仍然可用。使用者可能已註銷。

另一種方法是在桌面會話中查找程序的 PID,並從其環境中獲取 dbus 地址。

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

如果 crontab 以 root 身份執行,並且您想與控制台上登錄的任何使用者的會話進行通信,請參閱我可以在另一個使用者的桌面上以 root 身份啟動圖形程序嗎?

引用自:https://unix.stackexchange.com/questions/28463