WSL Error: Can‘t open display

问题描述

本来是需要在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 防火墙
更改设置→勾选
WSL Error: Can‘t open display_第1张图片
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所在目录,通过命令行添加参数启动 .\vcxrv.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()  # 显示图像

WSL Error: Can‘t open display_第2张图片

主要参考链接

@ChenaniahGSF https://github.com/microsoft/WSL/issues/4106
@github-samson https://github.com/PowerShell/Win32-OpenSSH/issues/1181

你可能感兴趣的:(WSL,X11,DISPLAY)