題 如何在啟用X11轉發的ssh'ing打開X程序後修復“無法打開顯示”錯誤?


在我的Mac(OS X 10.6.8)上啟動X11應用程序(XQuartz 2.3.6,xorg-server 1.4.2-apple56)後,在X11中打開終端並運行 xhost +我然後 ssh -Y 到我的Ubuntu 10.04 VM(在VMware Fusion上運行)。當我跑 gedit .bashrc (例如),我得到:

(gedit:9510): Gtk-WARNING **: cannot open display: 

set | grep DISPLAY 沒有回報。

但如果我 ssh -Y 進入我的Ubuntu 11.04機器, gedit .bashrc 作品。 echo $DISPLAY 返回“localhost:10.0”。

我試過了 export DISPLAY=localhost:10.0 而在我的VM中然後運行 gedit .bashrc,但我得到:

(gedit:9625): Gtk-WARNING **: cannot open display: localhost:10.0

兩個不同的Ubuntu機器的配置有什麼不同可以解釋為什麼一個工作而另一個不工作?

更新: 如建議的那樣 Zoredache 在下面的評論中,我跑了 sudo apt-get install xbase-clients,但我仍然有同樣的問題。


87
2017-07-13 18:13


起源


Ubuntu 10.04盒子是否安裝了適合X11的工具?安裝xbase-clients(如果尚未安裝)。 - Zoredache
我安裝了它但仍然有同樣的問題。 (往上看。) - Daryl Spitzer
是。為了確保,我重新啟動了VM(之後通過SSH重新連接)。 - Daryl Spitzer
也許嘗試在連接時將-vv選項傳遞給ssh,這會打印詳細的調試消息,您應該在連接時看到有關X11轉發的幾條註釋。 - Zoredache
就我而言,這只是升級MacQu的XQuartz版本的問題 - Waruna Ranasinghe


答案:


檢查服務器的sshd_config(通常 /etc/ssh/sshd_config),並確保使用該行啟用X11Forwarding選項

X11Forwarding yes

如果未指定X11Forwarding,則我可以檢查的Debian機器上的默認值為no。


33
2017-07-13 18:54



我在設置另一個Ubuntu VM之後發現,我需要安裝xbase-clients並啟用X11Forwarding。更新你的答案以包括兩者,我會接受它。 - Daryl Spitzer
有趣。至少在今天早上我做的新安裝的10.04 X11Forwarding默認啟用了。 Ubuntu傢伙必須再次搞亂默認值。 - Zoredache
@DerfK,在我的系統“X11Forwarding yes”中,我仍然會收到錯誤, (gedit:8381):Gtk-WARNING **:無法打開顯示: 在這種情況下 - A J
在Debian上,您可能必須安裝包xauth,然後再次登錄。 - comte


xhost +:如何在遠程服務器上啟動GUI時修復“無法打開顯示”錯誤

回答:您可以按照本文中提到的xhost過程修復“無法打開顯示”錯誤。

允許客戶端使用xhost +從任何主機進行連接

執行以下命令以禁用訪問控制   您可以允許客戶端從任何主機進行連接。

$ xhost +

禁用訪問控制,客戶端可以從任何主機連接

啟用X11轉發

在執行ssh時,使用-X選項啟用X11轉發。

$ ssh username@hostname -X

使用-Y選項啟用可信X11轉發,

$ ssh username@hostname -Y

在該主機中打開GUI應用程序

在打開ssh連接到遠程主機後,如上所述,   你可以打開任何GUI應用程序,它將打開它沒有任何問題。

如果仍然出現“無法打開顯示”錯誤,請設置DISPLAY   變量如下所示。

$ export DISPLAY='IP:0.0'

注意:IP是您想要GUI的本地工作站的IP   要顯示的應用程序。


49
2018-02-21 08:47



注意為+1 IP =是您想要獲取GUI的本地工作站的IP - PCoder
對於那些在OS X上遇到類似問題的人,還要確保安裝了XQuartz,否則這些修復都無濟於事。 (OP的問題顯示他有XQuartz,所以對於那些與我有類似問題的人來說這更像是一個旁注) - Dolan Antenucci
注意跑步 xhost + 是非常不安全的,不應該使用!正如Stefan Rogin所說,攻擊者可以從主機連接到您的XSession,讀取您鍵入的所有內容,甚至可以更改您看到的屏幕。 - jirislav


從Mac OS X登錄到Ubuntu VM時我遇到了這個問題 - 出於某種原因,它似乎不喜歡顯示變量中的“localhost”。所以手動設置IP,正如harrymc建議的那樣:

export DISPLAY="127.0.0.1:10.0"

然後X11程序應該沒問題。似乎沒有必要告訴操作系統localhost和127.0.0.1是等效的,但它至少可以工作。


17
2018-06-29 20:44



這對我有用。知道為什麼localhost沒有工作? - Alex
答對了!我已經被這個問題困住了一段時間......我通過SSH連接並且無法啟動Gtk程序(普通的X11,就像“xeyes”一樣,但是工作了)。顯示是正確的。實際上,“localhost”的解決方案並非如此!如果我手動設置DISPLAY = 127.0.0.1:10.0,或DISPLAY = :: 1:10.0它確實有效。編輯/ etc / hosts似乎沒有任何效果;並且DNS已正確配置(“dig localhost”correclty報告127.0.0.1和:: 1)因此,它似乎是Gtk中X11連接的DNS解析(gtk?gdk?glib?other?)中的一個錯誤。 - Pablo Saratxaga
在Beagle Bone Black的Debian安裝中,/ etc / host沒有設置為除root之外的任何人都可讀。這導致了這里報告的症狀。使得/ etc / hosts可以被所有人讀取,並且它工作正常。 - Daniel


我的CentOS KVM服務器遇到了這個問題,我錯過了“xauth”程序。


13
2017-10-22 07:59



這幫我完成了最小的debian安裝,非常感謝你! - binOr


如果你有這個問題 一段時間後 在運行時 -X ARG。要不就 ForwardX11 在/ etc / ssh / ssh_config中,然後運行 $ ssh username@hostname -Y, 啟用 值得信賴的X11轉發,不知道確切的原因,但我猜 -X 一些功能在一段時間後過期,可能會增加安全性。

這是我在網上找到的:

如果使用ssh -X remotemachine,遠程機器將被視為   不受信任的客戶。因此,您的本地客戶端將命令發送到遠程   機器並接收圖形輸出。如果你的命令違反了   一些安全設置,你會收到一個錯誤。

但是,如果使用ssh -Y remotemachine,遠程機器將被視為   可信客戶。最後一個選項可以解決安全問題。因為   其他圖形(X11)客戶端可以從遠程機器嗅探數據   (製作截圖,做鍵盤記錄和其他討厭的東西),它甚至是   可以改變這些數據。

如果你想了解更多關於這些事情,我建議你閱讀   Xsecurity聯機幫助頁或X Security擴展規範。而且你   可以檢查你的選項ForwardX11和ForwardX11Trusted   的/ etc / SSH / ssh_config中。

來源:


9
2017-10-17 08:06





運行UXTERM或XTERM時只需發出

export $DISPLAY 

變量將在那裡。然後只需設置並導出即可。


4
2017-07-10 21:26





剛剛在我的Mac上測試過,其他系統可能還可以

  1. 允許客戶端使用xhost +從任何主機進行連接

    $ xhost +

  2. 您應該有一個支持X11顯示的環境

    [Mac系統]為Mac安裝X11 https://www.xquartz.org/

  3. 你應該讓你的ssh-server轉發x11顯示

    更新 /etc/ssh/sshd_config 並設置 X11Forwarding yes,然後重啟你的ssh服務器

  4. 你應該讓你的ssh會話轉發x11顯示 -X 參數

    $ ssh -X user @ ip

  5. 如何在PyCharm中打開X11應用程序?
    • 打開一個支持X11顯示的ssh會話(記得保持這個會話)
    • echo $DISPLAY 在那個ssh會話中
    • DISPLAY PyCharm的環境變量

4
2017-08-30 11:36



為什麼這與其他任何答案相比都有所不同?請解釋一下你是否能用一個簡單的方法 編輯。你能行的!! - Pimp Juice IT
@麥當勞謝謝,更新了更多細節。 - Color