使用 WSLg

作者IYATT-yx

2 月 25, 2022

最近更新于 2023-12-03 20:54

WSL 全称 Windows Subsystem for Linux,可以把 Linux 作为一个子系统在 Windows 原生运行。目前有两代,称为 WSL 和 WSL2。

WSL 第一代是用 Windows 来模拟 Linux kernal,处理系统相关的交互,只有命令行界面,文件系统不能在 Windows 下访问。

而 WSL 2 则是像虚拟机一样,运行了真正的 Linux。和虚拟机不同的是,它速度非常快,而且文件系统互通,可以直接在 Windows 下访问,并且目前 WSL2 已经支持虚拟 GPU 了,而通过虚拟机安装的系统目前还无法支持。

WSLg 是 Windows Subsystem for Linux GUI 的缩写,该项目的目的是在完全集成的桌面体验中支持在 Windows 上运行 Linux 图形界面应用程序(X11 和 Wayland)。

WSLg 实现了 Windows Linux 同时使用的体验。在 Windows 系统下可以同时使用 Windows 和 Linux 应用。而且,WSLg 使 Linux GUI App 像 Windows 上的原生应用,可以直接整合到开始菜单或者任务栏中,从 alt-tab 窗口切换即可体验到实现跨 Windows 和 Linux 应用程序的窗口切换。

WSLg 是否得到支持与 Windows 版本有关,但是也没看到文档说至少要到哪个版本,反正就是从某个版本开始 WSL2 可以直接运行图形程序在 Windows 图形环境中。如果在终端执行一个图形程序时,提示没有找到显示设备那就是不支持 WSLg,反之出现了程序窗口那就是支持 WSLg。如果是不支持 WSLg 的 Windows 版本,可以尝试升级 Windows 到最新版本,那就肯定支持了。

Windows 10 安装工具下载:https://www.microsoft.com/zh-cn/software-download/windows10

Windows 11 安装工具下载:https://www.microsoft.com/zh-cn/software-download/windows11

参考文档

WSL 文档:https://docs.microsoft.com/zh-cn/windows/wsl/

CUDA 支持:https://docs.nvidia.com/cuda/wsl-user-guide/index.html

测试设备环境

笔记本电脑:

OS:Windows 11 专业工作站版 21H2

CPU:Intel i5-8265U

内存:20GB

集成显卡:Intel UHD Graphics 620

独立显卡:NVIDIA GeForce MX230

启用 WSLg

以管理员权限运行 PowerShell

1.启用 WSL 相关支持

wsl --install

执行上面命令会自动启用所需功能、下载安装 Linux 内核以及设置默认 WSL 版本为 WSL2 等等。但是默认会安装 Ubuntu(如下图),不管是不是想使用 Ubuntu 子系统,在看到 “正在下载:Ubuntu” 后都建议按 Ctrl+C 终止掉,这个下载速度慢得一匹。

2.安装子系统

查看可安装的子系统版本

wsl --list --online

再次强调不建议按上面提示的命令方式安装,下载速度实在是惨不忍睹。

要安装的话建议打开 Windows 应用商店,搜索要安装的子系统

安装完以后,打开子系统

首次启动会进行一些配置,然后自行设置用户名和密码就行(强调 Linux 下输入密码不会显示星号,只管输入就行,回车确认)

我这个版本的系统中的 WSL2 是支持 WSLg 的,即代表已经启用了 WSLg,可以直接运行图形程序。

这里可以简单测试一下,以 Python3 Tkinter 为示例:

sudo apt update && sudo apt install -y python3 python3-tk

python3 -m tkinter

附:

(1)强制重启 WSL

打开 PowerShell 执行

wsl --shutdown

(2)限制内存大小

再打开 WSL

按照默认状态,WSL 会占用很多内存,对于内存大的电脑来说影响不大,但是对于内存小的电脑来说估计很容易死机,再加上一般情况下 Linux 占用内存也不高(相比 Windows 来说少太多),完全没必要给那么多内存。

如果要限制内存,打开文件资源管理,在地址栏输入 %UserProfile% 回车进入用户目录,创建一个文本文件并命名为 .wslconfig,注意这个文件没有扩展名。如果关闭了扩展名显示的,前往 查看-选项 去掉下图位置的勾选。

.wslconfig 配置文件书写格式参考:

内存分配 8GB,交换分区设置为 4GB。具体内存大小设置根据自己的电脑的配置而定。

[wsl2]
memory=8GB
swap=4GB
localhostForwarding=true

最后一行的配置是:启用本地主机转发功能,允许WSL 2 实例访问主机上的网络服务。这样,你可以从WSL 2 实例中访问主机上运行的应用程序或服务。

重启子系统,查看内存情况

free -h

(3)文件交互

从 Windows 访问子系统

打开文件资源管理器,在地址栏输入 \\wsl$ 回车

从子系统访问 Windows

在 /mnt 路径下就能看到磁盘盘符

(4)设置中文支持

sudo apt update && sudo apt install -y locales

sudo dpkg-reconfigure locales

上下键移动选项框,空格键勾选,回车键确认。

往下接近底部找到并勾选 zh_CN.UTF-8

移动选项框到 zh_CN.UTF-8 回车

另外中文在某些应用中可能存在显示方框的情况,可安装字体

sudo apt update && sudo apt install -y ttf-wqy-microhei ttf-wqy-zenhei xfonts-intl-chinese

重启 WSL 有效

(5)apt 国内镜像

https://blog.iyatt.com/?p=1495

(6)查看子系统状态

wsl --list --verbose

第一列是子系统名字,可以同时安装不同的子系统,第二列是运行状态,第三列是 WSL 版本