Ssh

為什麼我不能通過遠端 SSH 會話執行 Gnome 應用程序?

  • April 22, 2019

使用 登錄到遠端主機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 &"

引用自:https://unix.stackexchange.com/questions/120612