pycharm使用x11(MobaXterm)远程调试opencv2;解决cannot connect x server

最近在学习opencv2,由于我的linux机器处于内存考虑没有安装gui,但是调试的时候有时候又不得不需要使用gui查看

比如opencv2中的

cv2.imshow('image',img)
cv2.namedwindow('image')

此时运行终端运行会报出如下错误

cannot connect x server

解决方案X11

经过一番资料查找;了解到了一个叫做x11的东西

X11也叫做X Window系统,X Window系统 (X11或X)是一种 位图 显示的 视窗系统 。它是在 Unix 和 类Unix 操作系统 ,以及 OpenVMS 上建立图形用户界面 的标准工具包和协议,并可用于几乎所有已有的现代操作系统

我们这里选用一款带xserver的终端工具MobaXterm

我们需要修改服务ssh配置 /etc/ssh/sshd_config

X11Forwarding yes
X11UseLocalhost no -- 禁止将X11转发请求绑定到本地回环地址上
AddressFamily inet -- 强制使用IPv4通道

然后重启ssh服务 service sshd restart

这时我们使用MobaXterm链接上我们的服务器 ssh [email protected]

python3
import cv2
cv2.namedWindow('x11test')

我们会在本地机器得到如下窗口;证明我们成功了。

 

然后我们使用pycharm运行如下脚本:

import cv2
cv2.namedWindow("[email protected]");

错误cannot connect to X server 还是存在。

我们需要配置如下信息:

我们回到MobaXterm输入如下命令

echo $DISPLAY

我们会得到如下信息 debian-1:10.0 ;根据机器不同各有差异;然后我们修改设置 run->edit configurations->在environment variable ;填入debian-1:10.0

然后我们在运行我们的脚本;依然还是同样的错误

最后在https://www.cnblogs.com/yinzm/p/8251118.html找到了提示 ;文中有一句 用Xshell开启X11 forwarding功能(属性->连接->SSH->隧道->勾选"转发X11连接到"->X DISPLAY默认配置就行

最后我在MobaXterm中找到了类似的设置 Settings>Configuration>X11>X11 Settings>X11 server display mode 修改为如下配置

这时我们再在pycharm中点击run ;图中蓝色边框就是窗口

此时我们在pycharm的终端可以看到如下信息

 

注意:此模式下;窗口是没有title的;但也勉强算是能运行调试了。