实际上,当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启动时显示的机器ID。通过使用export $(dbus-launch)
我们检索dbus-launch的输出并导出变量