好的,我让它工作如下.我在windows上安装了Ubuntu,并安装了anaconda python 3.6.
- 从sourceforge下载并安装VcXsrv或Xming(适用于Windows的X11)(请参见下面的编辑)
sudo apt-get update
sudo apt-get install python3.6-tk
(您可能需要在正在使用的python版本上安装不同的python*-tk
depnding)
pip install matplotlib
(适用于matplotlib,但许多其他功能现在也可以使用)
export DISPLAY=localhost:0.0
(加上~/.bashrc
使其永久化.见下文WSL2)
不管怎样,在所有这些之后,在wsl上运行在ubuntu中的代码按原样工作:
import matplotlib.pyplot as plt
import numpy as np
t = np.arange(0.0, 2.0, 0.01)
s = 1 + np.sin(2*np.pi*t)
plt.plot(t, s)
plt.title('About as simple as it gets, folks')
plt.show()
result:
也许这最好通过Jupyter笔记本或其他什么东西来实现,但在UbuntuFor Windows on Subsystem for Linux中有基本的命令行python matplotlib功能是很好的,这也使得许多其他gui应用程序也能工作.
例如,您可以安装xeyes,它会说安装x11应用程序,安装它将安装许多GUI应用程序使用的GTK.但关键是,一旦你的显示设置正确,并且你的x服务器安装在windows上,那么在本机ubuntu上运行的大多数东西都将适用于WSL.
Edit 2019-09-04:今天我在升级一些库之后遇到了"无法获取屏幕资源"的问题.所以我安装了VcXsrv,并用它代替了Xming.只需从https://sourceforge.net/projects/vcxsrv/开始安装,然后运行xlaunch.exe, Select 多个窗口,下一步确定.然后一切顺利.
Edit for WSL 2 users 2020-06-23
- ip不是本地主机.正在解决.因此,运行以下命令(并包含在~/.bashrc中):
export DISPLAY=`grep -oP "(?<=nameserver ).+" /etc/resolv.conf`:0.0
- 现在仔细判断防火墙:Windows安全->;防火墙及;网络保护->;允许应用通过防火墙->;确保VcXsrv已进行公共和私有判断.(当第一次启动xlaunch时,您可能会得到允许通过防火墙的提示.这也有效.此外,如果VcXsrv不在应用程序列表中,您可以手动添加它,例如从"C:\program files\VcXsrv\VcXsrv.exe"添加)
- 在勾选"禁用访问控制"的情况下启动VcXsrv
注意:一些WSL2用户出现了类似couldn't connect to display "172.x.x.x:0"
的错误.如果是这样,请try 使用以下命令判断DISPLAY中存储的IP地址:echo $DISPLAY
.如果显示的IP似乎是错误的(即"8.8.8.8"或另一个不工作的IP地址),则需要将第5点中显示的~/.bashrc
中的代码更改为可以获取实例IP地址的代码.一位用户说这有效:export DISPLAY=$(ifconfig | grep inet | awk '{print $2}' | head -n 1 | awk '{print $0":0"}')
.然而,对其他一些人来说,这并不奏效.YMMV,但只需找到您的IP并使用if进行显示.对于大多数WSL2用户来说,#5中的命令有效.
Edit for Windows 11:如果微软说服你扔掉旧电脑,买一台带有TPM的电脑,这样你就有了Windows 11,你就可以免费获得GUI.我希望他们在Windows 10上添加升级路径来实现这一点,因为Win10将类似于XP,而且会持续很长时间,因为MS决定您需要最新的计算机,即使Win11在旧计算机上也可以正常工作.