ログインセッション全体でD-Busセッションを再利用する

ログインセッション全体でD-Busセッションを再利用する

複数のログインセッションを介してコンピュータにアクセスします。セッションライフサイクルは重複しても重複してもかまいません。私の場合、これらのログインセッションは現在常にSSHを介して行われますが、ローカルセッションも処理することを好みます。

時々、これらのセッションではD-Busが必要であり、これらのログインセッション間で同じD-Busセッションを共有したいと思います。GVFSを使用するには

推奨されるアプローチは何ですか?私は知らないD-Busの使い方を台無しにしたくありません。私は使用を検討しました

export $(dbus-launch --autolaunch $(cat /var/lib/dbus/machine-id))

しかし、(Ubuntu 12.04に基づいて)これは正しくないようです。

  • これにはXセッションが必要ですが、私のSSHセッションはXディスプレイを転送することも、転送しない場合もあり、転送されたセッションも同じではありません$DISPLAY
  • Xディスプレイが利用できない場合は、dbus-launch「自動起動エラー:X11初期化に失敗しました」というメッセージが表示されます。そしてデーモンプロセスを開始しないでください。
  • マニュアルdbus-launchページには、「この--autolaunchオプションは内部実装の詳細と見なされます(...)。とにかく、libdbus実装の外部で使用する実際の理由はありません」と出ています。

dbus-launchD-Busファミリの他のツールは、実行中のアイテムdbus-daemonと関連付けられているアイテムを自動的に検出する機能をサポートしていますか? D-BusがX接続を介して起動されると、必要な情報がそこにありますが、~/.dbus/session-bus/$(cat /var/lib/dbus/machine-id)-${DISPLAY#*:}利用可能なX接続がなければどこにも保存されないようです。

私のD-Busセッションファイルを一緒にまとめる必要がありますか?これにより、ディレクトリ内のファイルを使用する必要がありますか~/.dbus/session-bus?このパスは/var/lib/dbus/machine-id安定して移植可能ですか?

ベストアンサー1

DBusは共有dbusデーモン設定を少しトリッキーにします。

私の設定の場合、設定dbus-launch --sh-syntax.bash_rc

しかし、既存のDBusデーモンをチェックするのはとても簡単です。設定ファイルが$ HOME / .dbus_settingsにあるとします。

need_start=1

if [ -r "$HOME/.dbus_settings" ]
then
    . "$HOME/.dbus_settings"
fi

if [ -n "$DBUS_SESSION_BUS_PID" ]
then
    if kill -0 "$DBUS_SESSION_BUS_PID" 2>/dev/null
    then
        need_start=0  # Found one
    fi
fi

if [ "$need_start" -ne 0 ]
then
    dbus-launch --sh-syntax >"$HOME/.dbus_settings"
    . "$HOME/.dbus_settings"
fi

このオプションがなければ、--autolaunchX Windows接続は必要ないと思います。

おすすめ記事