目前遇到了两种报这个错的情况:
情况一:本地在外网,通过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