喜迎 WSL 1.0 发布,Windows 10 的 WSL 2 也可以用 systemd 了,再水一篇安装教程

喜迎 WSL 1.0 发布,Windows 10 的 WSL 2 也可以用 systemd 了,再水一篇安装教程

没想到在我上篇关于 WSL 2的文章发布后的 5 天,微软就正式发布了 WSL 1.0,上篇文章发布 5 天就过时了。另外,微软曾在 9 月更新了一波 WSL 2 官宣了对 systemd 的支持,但只对 Windows 11 可用。这次正式发布的 WSL 1.0 在 Windows 10 上也是可用的,这就意味着 Windows 10 上的 WSL 2 也可以使用 systemd 了,太开心了,我决定再写(水)一篇 WSL 的安装教程,毕竟上篇已经过时了。

注意,本次发布的 WSL 1.0 是指 WSL 2 的 1.0 版本。WSL 分为 WSL 1 和 WSL 2,后者是前者的替代,两者技术完全不同。WSL 1 已经不更新了。

安装

Step 0:升级 Windwos 10 到最新版

打开设置——更新和安全——检查更新,安装更新。然后打开文件资源管理器,在左侧“此电脑”上右击--属性,在弹出的窗口中查看系统信息,确保 Windows 10 版本号为 22H2 或更高,操作系统内部版本为 19045.2311 或更高。

Step 1:打开相关功能

在任务栏的搜索框中搜索”启用或关闭 Windows 功能“。

在打开的”Windows 功能“窗口中勾选 ”Hyper-V“、"适用于 Linux 的 Windows 子系统"、”虚拟机平台“,然后点确定。

如果点确定后系统提示你重启,那你就重启。我这边因为默认是开启状态,所以没有提示重启。

Step 2:在命令行中确认并更改 WSL 默认版本

走完前面两步,WSL 应该已经可用了。以管理员权限打开系统自带的 PowerShell 或你自己安装其他终端(比如 Git-Bash)。

执行命令:

wsl -l -v

正常情况下会输出当前系统上安装的 Linux 系统发行版和对应 的 WSL 版本。因为我之前安装过了,所以输出如下:

wsl -l -v
  NAME            STATE           VERSION
* Ubuntu-22.04    Stopped         2

然后,继续在命令行中执行如下命令,更新 wsl。

wsl --update

这行命令会将 wsl 更新到最新的内核版本。

检查更新后的版本:

wsl --version
WSL 版本: 1.0.0.0
内核版本: 5.15.74.2
WSLg 版本: 1.0.47
MSRDC 版本: 1.2.3575
Direct3D 版本: 1.606.4
DXCore 版本: 10.0.25131.1002-220531-1700.rs-onecore-base2-hyp
Windows版本: 10.0.19045.2311

看到 WSL 版本号大于等于 1.0.0.0 就是对的。

然后,再执行如下命令,将默认的 WSL 默认的 Linux 分发版本设为 2。

wsl --set-default-version 2

Step 3:安装一个 WSL Linux 发行版

接下来执行:

wsl -l --online

看看微软为我们提供了哪些可用 Linux 发行版。输出如下图。

输出的 8 个发行版中,排在第一的是没有注明版本号的 Ubuntu,这也是目前 WSL 默认的发行版,如果你在获取 Linux 发行版时没有指定发行版信息,就会给你安装这个。当前默认的 Ubuntu 版本为最新的 LTS 版本,即 22.04.1(jammy),估计再过两年会变成 24.04。

第二个没有注明版本信息的是 Debian,当前版本为 11.5(bullseye)。

现在就可以通过执行:

wsl --insall -d <发行版本>

来安装一个 Linux 发行版了。

如果你执行 wsl -l --online 命令时就遇到如下网络问题。

wsl -l --online
无法从'https://raw.githubusercontent.com/microsoft/WSL/master/distributions/Dist
ributionInfo.json'提取列表分发。无法解析服务器的名称或地址
Error code: Wsl/WININET_E_NAME_NOT_RESOLVED

或者 wsl --insall -d <发行版本> 执行太慢。不慌,这都是网络问题,我们可以直接从 Windows 应用商店安装想要的发行版。

打开 Windows 应用商店,搜索想装的发行版。我本次想装的是 Debian。

点击获取就可以下载了。下载安装完成后点击“打开”即可开启发行版。第一次打开会弹出窗口进行初始化操作,并让你设置账户的密码。

账户密码设置完后就会进入发行版系统。现在就可以探索 WSL Linux 了。

输入 logout 可关闭当前窗口。

使用

1. 进入发行版

到了这一步,所安装发行版的图标就会出现在 Windows 启动菜单中,点击对应图标或在终端命令行中输入 :

wsl -d <发行版名称>

就可以进入发行版系统了。-d 选项用于指定要进入的目标发行版。

如果你安装的是 Ubuntu-22.04,直接输入:

wsl

不用 -d 选项,也可以进入,因为 Ubuntu-22.04 是目前 WSL 默认的发行版。

2. 退出发行版

在发行版的命令行中执行 exitlogout 即可退出当前发行版。

3. 查询发行版的状态

退出发行版命令行后或者另外打开一个命令行终端,执行:

wsl -l -v
  NAME            STATE           VERSION
* Ubuntu-22.04    Stopped         2
  Debian          Stopped         2

即可查看当前有发行版的运行状态。我这里显示 Ubuntu-22.04 和 Debian 都没在运行。

4. 关闭发行版

前面用 exitlogout 只能推出 wsl 发行版的交互式 shell,并不一定会关闭发行版。虽然 WSL 现在支持 systemd 了,但新安装的发行版默认使用的还不是 systemd,所以也不能在 wsl 发行版中执行 sudo poweroffsudo shutdown 命令来关闭发行版系统。

尝试执行poweroffshutdown 会报错:

System has not been booted with systemd as init system (PID 1). Can't operate.
Failed to connect to bus: Host is down

在使用 exitlogout 后,我们可以在 Windows 终端中执行 wsl --shutdownwsl -t 来关闭后台正在运行的发行版。

  • 关闭指定的单个发行版:wsl -t 发行版名称
  • 关闭所有正在运行的发行版:wsl --shutdown

5. 移除发行版

对于不再需要的 wsl 发行版,我们可以将其移除,以节省磁盘空间。执行:

wsl --unregister 发行版名称

即可移除指定的发行版。

6. 为发行版开启 systemd

先进入发行版。

执行如下命令:

sudo sh -c 'echo "[boot]\nsystemd=true" >> /etc/wsl.conf'

即在发行版的 /etc 目录下创建一个 wsl.conf 文件,并输入了如下配置:

[boot]
systemd=true

然后退出发行版,关闭发行版,再进入。执行如下命令:

ps --no-headers -o comm 1

如果输出的是 “systemd”,说明 systemd 已开启成功。

后记

使用 WSL 2 差不多两周了,感觉 WSL 才是最好用的 Linux 发行版。如果阅读量超过 1000,我会继续更新一篇关于 WSL 使用的小技巧。

编辑于 2022-11-25 11:28・IP 属地上海