前言

WSL 是一个允许用户在 Windows 上运行 Linux 环境的功能,安装 WSL 之后,可以安装 Linux 发行版,并且直接在 Windows 上使用 Linux 应用程序、实用程序和 Bash 命令行工具,也无需承担传统虚拟机或双启动设置的费用

基础配置

配置查看

进入 PowerShell 中,终端中输入

1
winver

查看 windows 的配置信息,如果是 windows11 的话是默认支持 WSL2 的,否则需要查看 OS 内部版本号,WSL2 需要内部版本号不低于 18362,否则只能安装 WSL。另外如果在 Windows Server 2019 (版本 1709+) 上安装 WSL的话,需要手动安装

启用虚拟机平台

在 PowerShell 中输入指令

1
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart

这条指令用于启用 Windows 的虚拟机平台组件,是 WSL2 和 Hyper-V 虚拟化技术的依赖项。启用之后可以支持更高效的 WSL2 子系统和其他虚拟化相关的功能

  • dism 是部署映像服务和管理工具
  • /online 是对当前运行的操作系统进行操作
  • /enable-feature:启用指定的功能
  • /featurename:VirtualMachinePlatform 要启用的功能名称,这里就是虚拟机平台
  • /all 启用所有父功能
  • /norestart 操作完成后不自动重启

虚拟化

进入 PowerShell 中,在终端中输入

1
systeminfo

之后可以在输出的信息中查找 Hyper-V 的信息,如果在输出中出现以下两种输出之一,则说明电脑已经支持虚拟化了

1
2
3
4
5
Hyper-V 要求:     虚拟机监视器模式扩展: 是
固件中已启用虚拟化: 是
二级地址转换: 是
数据执行保护可用: 是
Hyper-V 要求: 已检测到虚拟机监控程序。将不显示 Hyper-V 所需的功能。

否则需要在BIOS中开启虚拟化技术,进入BIOS的方法不同电脑有不同方式。进入到BIOS中之后,在配置中找到虚拟化技术或者Inter Virtual Technology,启用即可

开发者模式

设置-系统-开发者选项中,打开开发人员模式即可

开启适用于Linux的Windows子系统

打开控制面板-程序-程序和功能-启用或关闭Windows功能,在下面找到适用于Linux的Windows子系统,勾选上即可。选上之后需要电脑重启才能完成请求的更改

安装 WSL2

命令行安装 WSL2

在 PowerShell 中输入下面指令进行安装

1
wsl --install

之后系统会自动开始安装 WSL2,安装完成之后系统会提示重新启动。重启之后进入 PowerShell 中,可以输入如下指令查看子系统的状态,也可以查看版本是 WSL1 还是 WSL2

1
wsl --status

安装完成之后设置 WSL 的默认版本,最后一个参数为 2 表示 WSL2,为 1 则表示 WSL1

1
wsl --set-default-version 2

手动安装 WSL2

安装 Linux 内核更新包

下载链接由微软提供:WSL2 Linux 内核更新包适用于 x64 计算机

下载完成之后,双击运行,即可安装完成,此时的默认版本为 WSL1,使用如下指令将 WSL 设置为 WSL2 版本即可

1
wsl --set-default-version 2

安装 Ubuntu

安装完 WSL2 之后进入微软应用商店中,搜索对应的 Ubuntu 的版本,安装即可

安装完成 Ubuntu 之后,在开始菜单中可以看到该 Ubuntu,进入之后需要设置用户名和密码,这个就按照喜好设置即可

网络设置

设置完成之后即可进入系统,第一件事可以查看网络连接是否有效,即输入更新源的指令,如下

1
sudo apt-get update

如果出现正常的 Get ... 则说明网络没问题,否则需要打开 WSL setting 软件,进入网络选项中,将网络模式配置为 Mirrored 模式。之后即可正常使用了

安装桌面环境

换源

由于 Ubuntu 的默认软件源在国外,下载软件时经常会卡顿,除非有梯子。还可以直接换源,将国外的源换成国内的即可

进入 Ubuntu 中,通过修改 /etc/apt/source.list 来更换源,可以将原来的内容替换为

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# 阿里云
deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse

# 中科大
deb https://mirrors.ustc.edu.cn/ubuntu/ bionic main restricted universe multiverse
deb-src https://mirrors.ustc.edu.cn/ubuntu/ bionic main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu/ bionic-updates main restricted universe multiverse
deb-src https://mirrors.ustc.edu.cn/ubuntu/ bionic-updates main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu/ bionic-backports main restricted universe multiverse
deb-src https://mirrors.ustc.edu.cn/ubuntu/ bionic-backports main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu/ bionic-security main restricted universe multiverse
deb-src https://mirrors.ustc.edu.cn/ubuntu/ bionic-security main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu/ bionic-proposed main restricted universe multiverse
deb-src https://mirrors.ustc.edu.cn/ubuntu/ bionic-proposed main restricted universe multiverse

# 清华
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic main restricted universe multiverse
deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-updates main restricted universe multiverse
deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-updates main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-backports main restricted universe multiverse
deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-backports main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-security main restricted universe multiverse
deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-security main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-proposed main restricted universe multiverse
deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-proposed main restricted universe multiverse

当然也可以不进入 Ubuntu 中,进入到 Windows 中的文件管理器中,在右侧可以看到 Linux 图标,这个就是这个 Ubuntu 的文件系统,进入之后找到对应的文件进行修改即可。换源之后需要运行 sudo apt-get update 来更新一下源

更新软件

在 Ubuntu 中执行如下指令,即可更新升级软件

1
sudo apt-get upgrade

安装 gnome 桌面环境

由于上述安装的 Ubuntu 是不带桌面环境的,所以要想使用桌面环境的话,需要自己手动安装,常用的桌面环境有 xfce4、gnome 等,这里使用 gnome 桌面

1
2
3
4
# 安装 gnome 桌面环境
sudo apt-get install ubuntu-desktop
# 安装 gnome 相关工具
sudo apt-get install gnome-tweak-tool

安装 xfce4 桌面环境

除了可以安装 gnome 桌面环境以外,还可以安装 xfce4 桌面环境

1
2
sudo apt install xfce4 xfce4-session -y
sudo apt install xfce4-goodies firefox -y

安装 xfce4 桌面环境之后需要比 gnome 多几个小步骤

安装管理服务工具

可以先查看一下是否支持 systemctl 指令,在终端输入如下指令

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

如果出现正常的输出,则说明支持 systemctl 命令,否则需要手动设置,有两种方法来实现,建议使用第一种

  • 微软官方支持方法
    • 在 Ubuntu 中新建文件 /etc/wsl.conf 文件,在其中写入如下指令

      1
      2
      [boot]
      systemed=true
    • 然后退出当前窗口,之后打开 Windows 的 Powershell,重启 WSL

      1
      wsl --shutdown
    • 重新打开 Ubuntu 之后,可以再次使用上述指令测试

  • 安装 daemonize 方法
    • 安装 daemonizefontconfig

      1
      sudo apt install fontconfig daemonize
    • 之后修改 /etc/profile 文件,在文件末尾添加如下指令

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      SYSTEMD_PID=$(ps -ef | grep '/lib/systemd/systemd --system-unit=basic.target$' | grep -v unshare | awk '{print $2}')

      if [ -z "$SYSTEMD_PID" ]; then
      sudo /usr/bin/daemonize /usr/bin/unshare --fork --pid --mount-proc /lib/systemd/systemd --system-unit=basic.target
      SYSTEMD_PID=$(ps -ef | grep '/lib/systemd/systemd --system-unit=basic.target$' | grep -v unshare | awk '{print $2}')
      fi

      if [ -n "$SYSTEMD_PID" ] && [ "$SYSTEMD_PID" != "1" ]; then
      exec sudo /usr/bin/nsenter -t $SYSTEMD_PID -a su - $LOGNAME
      fi
    • /etc/sudoer 中添加如下内容

      1
      2
      %sudo ALL=(ALL) NOPASSWD: /usr/sbin/daemonize /usr/bin/unshare --fork --pid --mount-proc /lib/systemd/systemd --system-unit=basic.target
      %sudo ALL=(ALL) NOPASSWD: /usr/bin/nsenter -t [0-9]* -a su - [a-zA-Z0-9]*
    • 需要刷新一下 /etc/profile 文件,使配置生效

      1
      source /etc/profile

安装远程控制软件

实际上上述安装之后,每次打开 Ubuntu 依旧是命令行,没有桌面环境,所以需要在 Ubuntu 中安装远程控制软件,并且使用 Windows 自带的 mstsc 工具来实现可视化操作 Ubuntu

1
2
# 安装 xrdp 远程控制服务
sudo apt-get install xrdp

由于默认端口为 3389,且这个默认端口已经被保留用于 Ubuntu 的终端了,所以将远程控制服务的端口更改为 3390

1
2
3
sudo sed -i 's/3389/3390/g' /etc/xrdp/xrdp.ini
# 如果安装的是 xfce4,需要多一句
sudo sed -i 's/xserverbpp=24/#xserverbpp=24\nxserverbpp=128/g' /etc/xrdp/xrdp.ini

配置 session ,否则远程桌面登录时输入密码后会闪退

1
2
3
4
# 如果安装的是 gnome
echo "gnome-session" > ~/.xsession
# 如果安装的是 xfce4
echo "xfce4-session" > ~/.xsession

如果安装的是 xfce4 的话,需要在 /etc/xrdp/startwm.sh 的末尾添加如下的指令

1
2
3
4
unset DBUS_SESSION_BUS_ADDRESS
unset XDG_RUNTIME_DIR
. $HOME/.profile
startxfce4

之后重新启动 xrdp 服务

1
sudo systemctl restart xrdp

重启之后,查看 xrdp 服务状态

1
sudo systemctl status xrdp

如果在 Active 处显示为绿色的 running 状态即表示服务运行成功

在 Windows 中启动 Ubuntu 桌面

在 Window 中按下 win+R 之后,输入 mstsc 之后回车,然后在弹出的远程桌面连接框中输入 localhost:3390 之后点击连接即可进入

进入之后,第一项 session 选择 Xorg ,在下面输入你的 Ubuntu 中设置的账号和密码,即可进入桌面环境

启动时遇到的问题

输入用户密码进入闪退

使用 gnome 桌面的话,有可能在进入桌面时闪退,网上有一种办法:在 Ubuntu 中重新添加一个新用户,并且设置密码

1
sudo adduser a

然后在登陆时使用新的用户名和密码

文献参考

Windows子系统WSL_适用于 linux 的 windows 子系统没有已安装的分发版。-CSDN博客

WSL2支持systemctl命令_wsl systemctl-CSDN博客

Microsoft Learn:培养开拓职业生涯新机遇的技能