複数のログインセッションを介してコンピュータにアクセスします。セッションライフサイクルは重複しても重複してもかまいません。私の場合、これらのログインセッションは現在常に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-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
安定して移植可能ですか?
ベストアンサー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
このオプションがなければ、--autolaunch
X Windows接続は必要ないと思います。