実際、SSHセッションが開いているときは、dbusセッションを起動しません。一部のプログラムはそれを起動する可能性がありますが、セッションはそれを認識しません(したがって、それを閉じることができません)。
dbusセッションについて知らないことは、dbusを使用するがそれ自体は起動しないプログラムに問題が発生することも意味します。
dbusセクションは、マシンごとおよびX11ディスプレイごとです。それらの情報は$ HOME / .dbus / session-bus /-に格納されていますが、そこで参照されているプロセスが閉じている可能性があるため、dbusの起動が必要かどうかを判断するには、追加のチェックが必要です。次に、そこにある変数をセッションにエクスポートします。
それからそれは魅力のように働きます:)
以下を.bash_profileファイルに入れます:
# set dbus for remote SSH connections
if [ -n "$SSH_CLIENT" -a -n "$DISPLAY" ]; then
machine_id=$(LANGUAGE=C hostnamectl|grep 'Machine ID:'| sed 's/^.*: //')
x_display=$(echo $DISPLAY|sed 's/^.*:\([0-9]\+\)\(\.[0-9]\+\)*$/\1/')
dbus_session_file="$HOME/.dbus/session-bus/${machine_id}-${x_display}"
if [ -r "$dbus_session_file" ]; then
export $(grep '^DBUS.*=' "$dbus_session_file")
# check if PID still running, if not launch dbus
ps $DBUS_SESSION_BUS_PID | tail -1 | grep dbus-daemon >& /dev/null
[ "$?" != "0" ] && export $(dbus-launch) >& /dev/null
else
export $(dbus-launch) >& /dev/null
fi
fi
注:hostnamectlはsystemdの一部であり、dbus-launchが必要な変数を表示するマシンIDを取得できます。を使用しexport $(dbus-launch)
て、dbus-launchの出力を取得し、変数をエクスポートします