複数のログインセッションを通じてマシンにアクセスします。セッションの存続期間は重複する場合と重複しない場合があります。私の場合、これらのログインセッションは現在常にSSH経由ですが、ローカルセッションも処理したいと思います。
これらのセッションでD-Busが必要になることがあり、これらのログインセッション間で同じD-Busセッションを共有したい GVFSを使用するため 。
これを行うための推奨方法は何ですか?私が気づいていないD-Busの使用を中断したくありません。私は使用を検討しました
_export $(dbus-launch --autolaunch $(cat /var/lib/dbus/machine-id))
_
(Ubuntu 12.04以降)これは正しくないようです:
$DISPLAY
_がないものも転送されます。dbus-launch
_は「自動起動エラー:X11初期化に失敗しました」と文句を言います。デーモンを起動しません。dbus-launch
_のマニュアルページには、「_--autolaunch
_オプションは内部実装の詳細(…)と見なされます。とにかくlibdbus実装の外でそれを使用する本当の理由はありません。」_dbus-launch
_またはD-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
_は信頼でき、移植可能ですか?
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
--autolaunch
オプションなしでは、Xウィンドウ接続が必要だとは思いません。