我有一個無頭虛擬機器(運行 Ubuntu 伺服器 17.04),我使用 SSH 存取它。我對 X11 轉發的基礎知識很熟悉,我可以很好地轉發 xterm 和朋友。 XFCE終端也轉送OK。
我希望能夠使用 Gnome 終端,但它似乎無法啟動。相反,它只是掛起一段時間並最終出錯:
Error constructing proxy for org.gnome.Terminal:/org/gnome/Terminal/Factory0: Error calling StartServiceByName for org.gnome.Terminal: Timeout was reached
有趣的是,如果我的 VM 上執行本機桌面會話(透過 startx 啟動),則 gnome-terminal 可以透過 X11 遠端工作。
我猜測需要運行某種 Gnome 服務,但我無法弄清楚它是什麼或如何在完整桌面會話的上下文之外啟動它。我通常不會啟動它們,因為預設情況下虛擬機器是無頭的。
有人知道我可以做些什麼來讓 Gnome 終端遠端工作,而不必在我的虛擬機器上本地啟動 GUI 桌面會話嗎?
答案1
這不起作用,因為gnome-terminal
(像其他任何gnome-thing
)將嘗試連接到 dbus,並在很長一段時間沒有收到回應後失敗。
最簡單的解決方法就是為您的會話啟動一個 dbus 實例:
export $(dbus-launch)
gnome-terminal
如果您開始了韋蘭會議於偏僻的自從您第一次運行 以來export $(dbus-launch)
,您必須再次運行它,否則將在遠端顯示器上gnome-terminal
啟動 Wayland 實例,而不是在轉發的顯示器上啟動 X11 實例。gnome-terminal
這種情況下的另一個解決方法是明確運行 X11,gnome-terminal-server
該 X11 將在最後一個使用它的視窗關閉後終止。例子:
#! /bin/bash
ID=foo.bar$RANDOM
GDK_BACKEND=x11 /usr/libexec/gnome-terminal-server --app-id "$ID" &
sleep .4 # yuck
gnome-terminal --app-id "$ID"
wait
答案2
可以在 vanilla Ubuntu 或 Debian 中使用以下命令來完成:
ssh -X user@host dbus-launch gnome-terminal
在我的筆記中,我有一些共同的標誌dbus-launch
:--exit-with-x11
或--exit-with-session
剩下的問題是加載需要一段時間。
在我看來,這似乎是本地gnome-terminal
與遠端的對話gnome-terminal-server
;它需要拉下程式碼並修改它,但它的軟體相當簡單,太簡單了。
編輯:此外,您可以在不需要x11-dbus
軟體包的情況下完成此操作(預設情況下,Ubuntu 中沒有該軟體包,儘管它很小)。
這並不適用於所有gnome-terminal
版本,但我在 Ubuntu 22 和 Debian 11 上測試過它並且它有效。
ssh -X user@host gnome-terminal --disable-factory
除了終端命令的樣式/長度之外,這些方法還有差異。
最初的方法dbus-launch
將啟動gnome-terminal
實例,gnome-terminal-server
因為它與遠端電腦互動的方式。
但是,該--disable-factory
方法將啟動一個gnome-terminal
實例,該實例可以與 Ubuntu 22 擴充座等無縫協作。
希望這兩個選項之一滿足您的要求。還有其他方法,但在我看來,這些方法是最好的,因為它們非常簡單。
答案3
在從單一會話進行 X11 轉送的簡單案例中,請參閱 https://askubuntu.com/a/1279065/463121
登入後:
$ dbus-update-activation-environment --systemd DBUS_SESSION_BUS_ADDRESS DISPLAY XAUTHORITY
然後 gnome-terminal 速度很快並且可以透過 X11 轉送。
如果開始出錯,可能是個人 dbus 守護程序被卡住了,如果您可以終止所有使用者進程並重新登錄,那就沒問題了。
編輯:或甚至:
$ dbus-update-activation-environment --all
答案4
透過 X 啟動應用程式可能會非常慢。
我在透過 SSH 與世界各地的客戶系統建立 VNC 隧道方面取得了許多成功。
在遠端電腦上,安裝 VNC 伺服器(例如 TigerVNC)並啟動守護程式。 (yum install -y Tigervnc-server ; vncserver :3 - 或您想要使用的任何連接埠)。它會提示您設定密碼。
在本機上,安裝 VNC 用戶端 (yum install -y Tigervnc) 您可以將「exec /usr/bin/gnome-terminal」新增至 ~/.vnc/xstartup 檔案。然後執行: ssh -L 5903:localhost:5903 -N -f -l user remote-server-IP-or-hostname 這裡的連接埠號碼將是 59 和您選擇的連接埠號
在另一個終端機中執行: vncviewer :3
系統應該提示您輸入在伺服器上設定的密碼。