crontabでdbusプログラムを実行し、SESSION IDを知る方法は?


17

crontab内でプログラムを実行する必要がありますが、プログラムはdbusセッションIDをどのように知ることができますか?セッションマネージャーによって起動されたプログラムでのみ使用できます。

回答:


21

問題は、と少し似ているXディスプレイにアクセスすると、Xクッキーファイルの場所を見つけます。(また、ユーザーのディスプレイで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

dbusデーモンがまだ使用可能であるという保証がないことに注意してください。ユーザーがログアウトした可能性があります。

別の方法は、デスクトップセッションでプロセスのPIDを見つけ、その環境からdbusアドレスを取得することです。

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

crontabがrootとして実行されており、コンソールにログインしているユーザーのセッションと通信したい場合は、別のユーザーのデスクトップでrootとしてグラフィカルプログラムを起動できますか?を参照してください


2

gnomeセッションマネージャーのPIDを知っていれば、/procファイルシステムから環境を読み取れると思います。

GNOME_SESSION_PID=<PID_OF_GNOME_SESSION> 
READ_SESSION_COOKIE="$(grep -z DBUS_SESSION_BUS_ADDRESS /proc/$GNOME_SESSION_PID/environ|cut -d= -f2-)"

その後、SESSION idを、notify-sendまたはdbus *ツールなどの他のプログラムとともに使用します。

乾杯。


非常に印象的で、実際にはKDE4を実行しているので、plasma-desktop代わりに探しました、ありがとう!
デイジー


1

Vincenzoの答えについてコメントすることはできませんが、KDE4で彼の答えが私にとって最もうまくいくと思います。

ただし、コマンドを少し変更する必要がありました。私にとっては:

ps -u yourlogin e | grep -Eo 'dbus-daemon.*ADDRESS=unix:abstract=/tmp/dbus-[A-Za-z0-9]{10}' | tail -c35

ADDRESS大文字で注意してください。


0

はいDBusにはaxセッションが必要です。以前の回答のように、「DBUS_SESSION_BUS_ADDRESS」は開始する前に値を持っている必要があります。ただし、「dbus-launch」を使用してこの値を作成できます。次のスニペットは、crontabから呼び出されるスクリプトに入れることができます。

if test -z "$DBUS_SESSION_BUS_ADDRESS" ; then
  eval `dbus-launch --sh-syntax`
fi
echo "D-Bus daemon address is:"
echo "$DBUS_SESSION_BUS_ADDRESS"

# -E to export DBUS_SESSION_BUS_ADDRESS. Crucial to make DBUS work.
sudo -u <user> -E <program> 

このソリューションの欠点の1つは、ソフトウェアを停止した後にセッションがハングアップする可能性があることです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.