[教程] 如何在wsl下运行GUI程序
在linux下运行图形程序需要Display Server,常见的Display Server包括较新的Wayland和使用广泛的Xorg,在wsl下也是如此。此教程使用Xorg。
Xorg的架构简单理解为一个Xserver来与操作系统/硬件驱动进行通信,和一个Xclient与图形程序通信。这一特点决定了Xserver需要运行在原生Windows上而非wsl内,再由wsl内的Xclient与这个原生Windows上的Xserver来实现图形程序的显示。
Windows上常见的Xserver包括Cygwin/X,VcXsrv和Xming。Xming的开源版本年久失修,不推荐使用。VcXsrv目前好评较多,但其multiwindow至今(v1.19.6.0)未能在win10上正确实现窗口预览 v1.20.1.4已经正常。Cygwin/X因为需要cygwin环境,相比前二者大一些。此教程使用Cygwin/X,但VcXsrv同样是个很好的选择。
安装Cygwin/X
前往Cygwin官网找到安装程序链接( setup-x86_64.exe或者setup-x86.exe)并下载。选择合适的镜像源(清华校内参见TUNA源说明)可以加速安装。我们需要的是X11分类下面的xorg-server软件包,单击它左边的“Skip”使其变成版本号,然后继续安装。
安装好后,创建一个Xwin的快捷方式,并添加参数:0 -multiwindow -listen tcp -noprimary
。也就是说,如果安装在默认位置,Xwin的快捷方式应该指向:
C:\cygwin64\bin\XWin.exe :0 -multiwindow -listen tcp -noprimary
至此,点击此快捷方式即可运行Xserver。注意在启动任何GUI程序之前,需要先启动Xserver。
配置wsl
我们需要告知wsl内的程序,Xserver已经在本地启动。为此,需要将环境变量DISPLAY
置为127.0.0.1:0
。如果使用bash
作为默认的shell,那么可以使用下面的命令自动设置该环境变量:
echo "export DISPLAY='127.0.0.1:0'" >> ~/.bashrc
修改过bashrc后重开wsl,就可以使用图形程序了。