【終極!!!】cannot connect to X server, couldnt connect to display

目前遇到了兩種報這個錯的情況:

情況一:本地在外網,通過SSH登錄到內網服務器。運行代碼,

報錯:

(1)cannot connect to X server

(2)_tkinter.TclError: couldn't connect to display

或者運行完了也沒有任何顯示。

環境:本地:windows 10  遠程: linux ubuntu 16.04   連接方式:服務器在內網中,本地和內網之間通過VPN連接,然後本地通過SSH登錄到服務器

症狀:VNC可以遠程桌面到服務器,本地ping服務器通,服務器ping本地不通。(這個問題修復之後也是這樣,這裏只不過是交代一下環境。公司的VPN還挺厲害的,能控制很多東西)

原因:你的代理地址可能被某一個流氓軟件給改了!!

代碼(代碼放在服務器端,本地通過ssh登錄到服務器,然後運行這個代碼):

img_dir = '/home/data/1.jpg'

from matplotlib import pyplot as plt

img = plt.imread(img_dir)
plt.imshow(img)
plt.show()

mini example

$ export DISPLAY=10.xxx.xx.xxx:0.0

$ xarclock
Error: Can't open display: 10.xxx.xx.xxx:0.0

無論上述的display設置成什麼都不行!

或者

$ python3.6
Python 3.6.9 (default, Jul  3 2019, 15:36:16) 
[GCC 5.4.0 20160609] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import cv2
>>> cv2.namedWindow('img', 0)

或者在pycharm:

Traceback (most recent call last):
  File "/home/usr1/abc.py", line 6, in <module>
    plt.imshow(img)
  File "/home/usr1/.local/lib/python3.6/site-packages/matplotlib/pyplot.py", line 2677, in imshow
    __ret = gca().imshow(
  File "/home/usr1/.local/lib/python3.6/site-packages/matplotlib/pyplot.py", line 926, in gca
    return gcf().gca(**kwargs)
  File "/home/usr1/.local/lib/python3.6/site-packages/matplotlib/pyplot.py", line 603, in gcf
    return figure()
  File "/home/usr1/.local/lib/python3.6/site-packages/matplotlib/pyplot.py", line 545, in figure
    **kwargs)
  File "/home/usr1/.local/lib/python3.6/site-packages/matplotlib/backend_bases.py", line 3252, in new_figure_manager
    return cls.new_figure_manager_given_figure(num, fig)
  File "/home/usr1/.local/lib/python3.6/site-packages/matplotlib/backends/_backend_tk.py", line 950, in new_figure_manager_given_figure
    window = tk.Tk(className="matplotlib")
  File "/usr/lib/python3.6/tkinter/__init__.py", line 2026, in __init__
    self.tk = _tkinter.create(screenName, baseName, className, interactive, wantobjects, useTk, sync, use)
_tkinter.TclError: couldn't connect to display "10.xxx.xxx.xxx:0.0"

解決!!

這個問題不知道會不會折騰你一天,反正會折騰我一天!

用盡一切x server(xming xmanager vcxsrv, xshell moba-xterm, .........), ssh,  各種折騰都不管用的根源!!如下:

把你的C,,,L,,,O,,,U,,,D,,,S,,,,S之類的FQ軟件卸了。重啓電腦!!或者其他你不應該用的代理軟件。如果你跟我一樣是使用公司VPN上網的話!!!!!

 

然後使用 moba-xterm或者xmanager,它們都會自帶xserver。它們啓動之後,一般會啓動xserver

這樣你在moba-xterm或者xshell中使用ssh登錄到服務器然後再運行相應代碼

就可以在本地show出來圖片了

 

情況二:本地PC和服務器PC都在同一個內網,沒有使用VPN連接。本地代碼在Pycharm中修改提交,執行代碼是通過VNC遠程到服務器桌面,在桌面中的終端裏執行。

出現的症狀是:

1,代碼在pycharm中遠程執行正常  2,但是在VNC遠程桌面終端中執行報這個錯: :cannot connect to X server

不顯示cv2.imshow應該顯示的界面。

原因:還是$DISPLAY環境變量引起的。本地pycharm中在settings和run-> configuration中設置好了DISPLAY這個環境變量,但是遠程桌面的終端裏沒有設置好。其實上面這個報錯後面跟着的就是遠程桌面終端的DISPLAY這個環境變量的值,只不過因爲它是空,所以沒有顯示出來。

解決:可以另外打開一個終端,看一下應該設置成多少:$ echo $DISPLAY

$ echo $DISPLAY

# 輸出
:2.0

然後,在當前報錯的終端內按照看到的值進行設置(這個值其實和啓動VNC時設置的值一致:$ vncserver -geometry 1920x1080 :2)。如:

$ export DISPLAY=localhost:2.0

然後在原地重新運行代碼應就不報這個錯了,而且界面能顯示出來了。

 

 

 

同樣原因導致的問題見:

1,win10 pycharm 打不開 console Couldn't connect to console process Process finished with exit code 129

2,python win10 pycharm遠程連接ubuntu顯示不了圖片 cannot connect to X server 10.xxx.xxx.xxx:0.0

3,_tkinter.TclError: couldn't connect to display

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章