WSL2配置完全指北——手把手教你配置WSL2

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的内容

参考资料

448 个赞

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

6 个赞

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

5 个赞

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

vi /etc/wsl.conf
[user]
default=username

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

4 个赞

太强了!

4 个赞

太强了!

1 个赞

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

10 个赞

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

13 个赞

感谢分享

3 个赞

还有网络呢 镜像网络

7 个赞

mark,下次wsl坏了就找你

4 个赞

前面我补充了

2 个赞

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

2 个赞

网络映射就解决了

50 个赞

已看完,只缺台电脑了

1 个赞

感谢分享!马上试试

2 个赞

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

2 个赞

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

4 个赞

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

3 个赞

感谢热佬 :+1: