Windows自带Linux子系统大家都知道,但是各种毛病还是很多的,整理了能开启符合正常使用习惯的WSL方法。原文链接:https://pa.ci/206.html

开启WSL2

虽然WSL已经更新到了第2版,但是目前win10默认的还是第1个版本,即Windows上的Linux应用而不是类似于虚拟机的独立系统。
开启WSL2的步骤如下,需使用管理员权限打开powershell执行命令:

  1. Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux
  2. Enable-WindowsOptionalFeature -Online -FeatureName VirtualMachinePlatform

复制代码

执行完成后,会询问是否重启,这里选择Y进行重启。重启后再次使用管理员权限打开powershell执行命令:

  1. wsl --set-default-version 2

复制代码

此时通过Microsoft store安装的Linux系统就是WSL2版本了,但是由于WSL2是独立内核,所以还需要执行以下命令更新内核,否则会出现WslRegisterDistribution failed with error: 0x800701bc错误:

  1. wsl --update
  2. wsl --shutdown

复制代码

至此,Linux子系统就是拥有独立内核的WSL2版本了,以Debian为例,neofetch信息如下图:

启用Systemd

WSL2默认使用init启动Linux系统的,但是目前绝大多数发行版都是用的systemd的。这导致很多服务都没法使用,比如在Debian/Ubuntu上的nginx和php-fpm等常用软件。所幸微软最近更新了这个功能,现在可以手动启用。
首先在powershell中执行

  1. wsl --version

复制代码

命令,确认wsl版本是大于0.67.6的。Win10 22H2进行过

  1. wsl --update

复制代码

之后,应该是1.0.0.0版本,如下:

  1. WSL 版本: 1.0.0.0
  2. 内核版本: 5.15.74.2
  3. WSLg 版本: 1.0.47
  4. MSRDC 版本: 1.2.3575
  5. Direct3D 版本: 1.606.4
  6. DXCore 版本: 10.0.25131.1002-220531-1700.rs-onecore-base2-hyp
  7. Windows版本: 10.0.19045.2311

复制代码

随后,在现有的Linux子系统内,在/etc/wsl.conf文件内添加以下内容(如果没有就新建一个):

  1. [boot]
  2. systemd=true

复制代码

修改完成后,在powerhell中执行

  1. wsl --shutdown

复制代码

以关闭linux子系统,随后再打开Linux子系统就会发现已经启用了systemd,使用

  1. systemctl list-unit-files --type=service

复制代码

将输出如下内容: