问题描述
本来是需要在Windows Subsystem Linux (WSL2) 环境下用python编写程序,然后画图展示。但不知什么原因在plt.plot() plt.show()
后没有显示图片。之后想到可能是X11Forwarding (X11转发)
设置的原因,于是准备用最简单的X程序测试一下X11转发功能是否正常
apt install x11-apps
后输入xeyes
却显示Error: Can't open display: 0
而在WSL1上输入xeyes
却能正常弹出
解决方法的尝试
每一个方法测试的最后都默认加上xeyes
0.0 确认或修改 /etc/ssh/sshd_config 里 X11Forwarding yes
1.0 默认设置打开Xming(PC端,下同。不加说明则是在Linux端)
1.1 export DISPLAY=0.0
1.2 export DISPLAY=localhost:0.0
2.0 默认设置打开Xming
2.1
export DISPLAY=`grep nameserver /etc/resolv.conf | sed 's/nameserver //'`:0
# equals to
export DISPLAY=$(cat /etc/resolv.conf | grep nameserver | awk '{print $2}'):0
下载VcXsrv
3.0 默认设置打开VcXsrv
3.1 同2.1
4.0 控制面板\系统和安全\Windows Defender 防火墙\允许应用通过 Windows 防火墙
更改设置→勾选
4.1 同3.0
4.2 同2.1
5.0 同4.0
5.1 在cmd中切换到vcxsrv所在目录,通过命令行添加参数启动
vcxsrv -ac
5.2 同2.1
6.0 同4.0
6.1 在cmd中切换到vcxsrv所在目录,通过命令行添加参数启动
.\vcxsrv.exe -ac -terminate -lesspointer -multiwindow -clipboard -wgl
6.2 同2.1
以上方法,在我电脑上仅6成功出现那双会动的眼睛
其实在寻找解决办法的过程中发现了很多热心网友提出的方法,只是时间关系没办法一个一个测试
最后
我在WSL2的python环境中测试了画图显示
可用的几种展示方式
# import matplotlib
# 不同的 back-end
# matplotlib.use(“Agg”) ## non-interacive back-end
# matplotlib.use(“TkAgg”) *
# matplotlib.use(“GTkAgg”)
# matplotlib.use(“GTk”)
import matplotlib.pyplot as plt
plt.plot([0,1,2]) # 查看vcsrv会看到有占用,但不显示图像
plt.show() # 显示图像
主要参考链接
@ChenaniahGSF https://github.com/microsoft/WSL/issues/4106
@github-samson https://github.com/PowerShell/Win32-OpenSSH/issues/1181