실제로 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의 일부이며 machine-id를 검색 할 수 있습니다. dbus-launch는 원하는 변수를 표시합니다. 를 사용하여 export $(dbus-launch)
dbus-launch의 출력을 검색하고 변수를 내 보냅니다.