為什麼我不能通過遠端 SSH 會話執行 Gnome 應用程序?
使用 登錄到遠端主機
ssh -X me@host
,我成功執行gnome-terminal -e "tail -F /var/log/file" &
。當我註銷然後第二天嘗試同樣的事情時,我得到了這個:獲取會話匯流排失敗:無法連接到套接字 /tmp/dbus-K99gT9yDjS:連接被拒絕 回退到非出廠模式。召喚GConf惡魔失敗;退出。無法聯繫配置伺服器;一些可能的原因是您需要為 ORBit 啟用 TCP/IP 網路,或者由於系統崩潰而導致 NFS 鎖定失效。有關資訊,請參見http://projects.gnome.org/gconf/。(詳情 - 1:無法連接到會話:無法連接到套接字 /tmp/dbus-K99gT9yDjS:連接被拒絕)
在這種情況下如何執行 gnome-terminal?
實際上,當 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 的一部分,允許檢索機器 ID,dbus-launch 顯示我們想要的變數;通過使用
export $(dbus-launch)
我們檢索 dbus-launch 的輸出並導出變數
以前的答案都不適用於我的情況,但通過 dbus-launch 啟動應用程序可以完成工作:
ssh myhost "dbus-launch gnome-terminal --display localhost:10.0 &"