crontabでdbusプログラムを実行するときにSESSION IDをどのように知ることができますか?

crontabでdbusプログラムを実行するときにSESSION IDをどのように知ることができますか?

crontabでいくつかのプログラムを実行する必要がありますが、プログラムはdbusセッションIDをどのように知っていますか?セッションマネージャが起動したプログラムでのみ機能します。

ベストアンサー1

問題はやや似ています。VisitXShowそしてX Cookieファイルの場所を見つける。 (また、ユーザーのモニターでGUIプログラムを実行したい場合は、この質問を参照してください。)

Dbusはセッションアドレスをに保存します~/.dbus/session-bus。ファイル名は、$machine_id-$display_number$machine_id保存されているランダムに生成された数字、X表示番号(または)/var/lib/dbus/machine-idです。のファイルはシェルから解析することができ、 との定義を含みます。$display_number$DISPLAY:$display_number:$display_number.$screen_number~/.dbus/session-busDBUS_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としてグラフィカルプログラムを起動できますか?

おすすめ記事