WSL2 入门配置指南

最近不断看到有网友询问关于 WSL2 的问题,因此决定写一篇详细的入门配置教程,手把手教你如何配置 WSL2,从入门到熟练使用。

通过这篇文章,你将学会:

  1. 在你的 Windows 电脑上安装 Ubuntu 到 WSL2 中;
  2. 迁移你的 WSL2 系统镜像,让系统随时可用;
  3. 优化 WSL2 系统设置,让其可以后台启动并高效运行;
  4. 设置 Ubuntu 内的应用开机自启。
  5. 其他的一些安全设置选项

1. 安装 Ubuntu 到 WSL2

默认选择 Ubuntu 系统,因为它是唯一官方支持 GPU 加速的发行版,非常方便。

wsl --install


如果你想尝试其他发行版,可以通过以下命令查看并安装:

wsl --list --online 或 wsl -l -o
wsl --install -d <发行版名称>


当然,你也可以安装多个发行版。默认情况下,系统会安装在 C 盘上,但你可以迁移到其他位置。

2. 导出和迁移系统

首先,导出现有的系统:

wsl --export Ubuntu E:\Ubuntu2.tar


然后取消挂载当前系统:

wsl --unregister Ubuntu


最后,将系统重新挂载到新的位置:

wsl --import Ubuntu E:\wsl2\Ubuntu E:\Ubuntu.tar


3.1. 限制 WSL2 的资源占用

为了防止 WSL 长期占用系统资源,你可以通过配置. wslconfig 文件来限制 WSL 的内存、CPU 和交换分区大小。

  1. 打开 Windows 资源管理器,地址栏输入 %UserProfile% 回车。在该目录下创建一个名为. wslconfig 的文件,写入以下内容(以 8GB 内存电脑为例,分配 2GB 内存和 2 个 CPU 线程给 WSL,设置 4GB 交换分区):
[wsl2]
memory=2GB
swap=4GB
processors=2
localhostForwarding=true


  1. 执行以下命令关闭并重新启动 WSL:
wsl --shutdown


如果你不想限制 WSL2 的内存占用,可以通过定时任务定期清理内存。编辑 crontab 设置每小时释放一次内存:

crontab -e
0 */1 * * * echo 3 > /proc/sys/vm/drop_caches


3.2. 设置 WSL2 后台启动

  1. 在你的 WSL2 的 Debian 或 Ubuntu 中执行以下命令,允许用户执行所有命令而不需要密码:
sudo bash -c "echo '$USER ALL=(ALL) NOPASSWD: ALL' >/etc/sudoers.d/$USER"


  1. 在 Windows 开机启动文件夹中添加一个以. vbs 结尾的文件,内容如下:
set ws=wscript.CreateObject("wscript.shell")
ws.run "wsl -d Ubuntu", 0


要快速进入开机启动文件夹,可以按 Windows+R,然后输入 shell:startup。你可能还会用到 taskschd.msc

4. 设置 Ubuntu 内的应用开机自启

在 WSL 系统内新建并添加以下内容:

vi /etc/wsl.conf


内容如下:

[boot]
systemd=true


然后开启 Ubuntu 的开机启动服务:

systemctl status rc-local


并添加以下内容:

cat <<EOF >/etc/rc.local
# !/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.
exit 0
EOF


执行以下命令使脚本可执行并启用:

chmod +x /etc/rc.local
systemctl enable --now rc-local


无视警告即可:

systemctl status rc-local.service


修改 /etc/rc.local 里的内容即可让你的 Ubuntu 应用开机启动。

5. 其他的一些必要配置:

设置 root 密码,开机必备

sudo passwd root


更新系统

su -
apt-get update && apt-get upgrade


WSL2 Ubuntu 安装 openssh-server

sudo apt update
sudo apt install openssh-server


WSL2 启用 systemd

在 / etc 目录下新建 wsl.conf 配置文件,并编辑该配置文件:

Ubuntu

sudo vi /etc/wsl.conf


输入内容:

[boot]
systemd=true


Windows

在 Windows PowerShell(管理员) 中运行:

wsl --shutdown


再重新打开 Ubuntu,使 WSL 彻底重新启动以便启用 systemd。然后在 WSL 中运行:

让你的 ssh 开机自启

systemctl enable ssh
systemctl start ssh


请注意你的 ssh 的登录安全,按照你的安全习惯配置即可。

进一步学习

学完以上基础内容后,你可能会感兴趣以下内容:

  • 如何在 WSL2 内运行大模型,如部署本地的 ollama 或吾皇的 GPT;
  • 如何让你的本地模型在外网随时可访问,如部署 Tailscale 或 ZeroTrust;
  • 还有哪些有趣的场景可以探索?

写了这么多,给个赞,升个三级不过分吧!

Update:关于评论里提到的网络配置问题,NAT 模式(WSL2 默认)下已满足需要,有更多需求的请参看底部参考资料 3 的内容

参考资料

感谢分享,当年折腾 wsl1 自启弄半天没弄好,改用真 Linux 了

迁移之后默认使用的是 root 账户,可以把那个更改用户的命令也写上去

这个我倒是没遇到过,我都是 root 用户,查了下貌似是在 /etc/wsl.conf 添加默认用户即可

vi /etc/wsl.conf


[user]
default=username


不知道对不对,有需要的需要自测了

太强了!

太强了!

现在 wsl2 还没法直接设置局域网 ip 吧,
也就是局域网其他电脑没法通过一个固定 ip 来访问 wsl2 中部署的服务

有几点问题我来补充一下。
1、systemd 是才初八不久,所以很多旧版本用不了的,亲测 ltsc2021 有最新的 wsl 预览版也不行
2、可以从微软商店手动下载安装包解压安装,这样可以安装到任意位置
3、不建议开机自启 wsl,这玩意本身占用就不小的,用 WindowsTerminal 就行,点一下就启动了
4、如果使用最新的 Windows,可以在. wslconfig 里面配置,使其自动释放内存和硬盘空间(稀疏)
5、WSL 装 Ubuntu 很臃肿很占硬盘空间,建议没有 CUDA 需求的用 debian12 的,包新稳定且硬盘占用很小
6、最新版的 Windows 可以用 wsl 的镜像网络等新特性可以自己看一下这个

Windows Command Line – 18 Sep 23 sr-annote { all: unset; }

Windows Subsystem for Linux September 2023 update 8

There is a new release for the Windows Subsystem for Linux (WSL) with new features and bug fixes! Check out the summary below, and read on to learn more about new experimental features, and some significant quality improvements. Experimental features…

感谢分享

还有网络呢 镜像网络

mark,下次 wsl 坏了就找你

前面我补充了

我觉得 wsl2 最复杂的就是网络配置了。比如我遇到的情况就是,我的电脑 windows11 里有个 wsl2,wsl2 里有个 docker,启动了一个 new api 服务,我该怎么让我局域网里的一个电脑,连上我电脑里的 wsl2 里的 docker 的服务

ps: 目前已解决。

网络映射就解决了

已看完,只缺台电脑了

感谢分享!马上试试

现在,wsl2 有镜像网络了,直接无感使用,局域网电脑可以通过你电脑 ip 访问你 wsl 的端口,不用像之前做很多复杂配置,只需把 wslconfig 配置为镜像网络,只是目前存在无法在本机使用当前局域网 ip 访问本机,不过小问题,本机访问本机直接 127.0.0.1

用 Windows11 22H2 及以上版本的 Windows 能自动解决很多问题

网络配置问题,每个人的需要求不尽相同,NAT 模式(WSL2 默认)下已满足目前需要,有更多需求的请参看底部参考资料 3 的内容

感谢热佬