Windows下搭建WSL Linux开发环境

1. 前言

WSL(Windows Subsyetem for Linux,适用于 Linux 的 Windows 子系统),是 Microsoft 公司于 2016 年在 Windows 10 平台发布的一项新功能,其使得用户可以在 Windows 操作系统上运行 ELF 格式的 Linux 可执行文件。

WSL 目前已发布两代产品:WSL 1 和 WSL 2。WSL 1 实现了 Linux 兼容层,将 Linux 系统调用转换为 Windows NT 系统调用;而 WSL 2 则利用 Windows 的 Hyper-V 功能,通过虚拟化技术直接运行 Linux 虚拟机,更接近原生 Linux 操作系统体验。

2. 前提条件

您必须运行 Windows 10 版本 2004 及更高版本(Build 19041 及更高版本)或 Windows 11 才能使用以下命令。如果您使用的是早期版本,请参阅手动安装页面

3. 开启 WSL 特性和虚拟机特性

以管理员身份打开 powershell, 开启 WSL 特性, 启动虚拟机

在安装 WSL 之前,首先运行以下命令来确认是否已启用“适用于 Linux 的 Windows 子系统”:

命令输出State : Disabled 表示未启用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

PS C:\Windows\system32> Get-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux


FeatureName : Microsoft-Windows-Subsystem-Linux
DisplayName : 适用于 Linux 的 Windows 子系统
Description : 提供服务和环境以在 Windows 上运行本机用户模式 Linux shell 和工具。
RestartRequired : Possible
State : Disabled
CustomProperties :
ServerComponent\Description : 提供服务和环境以在 Windows 上运行本机用户模式 Linux shell 和工具。
ServerComponent\DisplayName : 适用于 Linux 的 Windows 子系统
ServerComponent\Id : 1033
ServerComponent\Type : Feature
ServerComponent\UniqueName : Microsoft-Windows-Subsystem-Linux
ServerComponent\Deploys\Update\Name : Microsoft-Windows-Subsystem-Linux

开启 WSL 特性,

1
2
3
4
5
6
7
8
9
10
11
12

PS C:\Windows\system32>dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart

部署映像服务和管理工具
版本: 10.0.22000.653

映像版本: 10.0.22000.2295

启用一个或多个功能
[==========================100.0%==========================]
操作成功完成。

开启虚拟机特性

1
2
3
4
5
6
7
8
9
10
PS C:\Windows\system32> dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart

部署映像服务和管理工具
版本: 10.0.22000.653

映像版本: 10.0.22000.2295

启用一个或多个功能
[==========================100.0%==========================]
操作成功完成。

开启新特性后需要重启电脑

4. 安装 Linux 内核更新包

下载并安装 Linux 内核更新包

如果处理器是 x64 架构的选择: Linux 内核更新包 x64

如果处理器是 ARM 架构,Linux 内核更新包 arm64

下载后双击安装, 安装包有五百多兆, 安装需要一些时间.

将 WSL2 设置为默认的 WSL

1
2
3

wsl --set-default-version 2

5. 安装 Ubuntu

打开 Windows store

搜索 Unbuntu 点击安装(Get)

安装完成后点击打开, 如果你关闭了 windows store 界面, 也可以在开始菜单搜索 ubuntu 并打开.

首次打开需要进行初始化, 初始化需要一些时间, 等待初始化完成.

初始化完成后需要设置用户名密码;

设置完用户名密码, 就可以使用 Ubuntu 了.

至此 Ubuntu 安装就算安装完成了. 我也准备了一些关于使用 linux 的文章, 内容包括安装各类开发软件, 数据库等等方面, 有兴趣的同学可以访问鹏叔的技术博客 - linux 专题.

6. 使用 WSL 管理虚拟机

WSL 的底层技术实际是 Micrsoft hyper-v, 一款虚拟机管理软件, 类似 wmware 和 virtualbox, 和 linux 平台的 kvm.

wsl 就是管理虚拟机的命令行工具(command line interface).

在 Powershell 下面还可以对 Linux 进行一些管理工作, 例如生成快照, 恢复快照, 启动虚拟机, 关闭虚拟机.

以普通用户身份打开 Powershell

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
36
37
38

# 查看当前已安装的linux子系统以及状态
wsl --list --verbose

# 查看可安装的Linux版本
wsl --list --online

# wsl镜像导出
wsl --export <发行版名称> <导出的文件名>
# 例如
wsl --export ubuntu c:\tmp\ubuntu.tar

# 镜像导入
# 语法
wsl --import <发行版名称> <安装位置> <tar 文件名>
# 例如
wsl --import ubuntu-copy c:\users\yourname\ubuntu c:\tmp\ubuntu.tar

# 安装不同的linux发行版, 以Debian为例
wsl --install -d Debian

# 关闭linux子系统, 以ubuntu为例
wsl --terminate ubuntu

# 运行特定的 Linux 发行版,请将 <Distribution Name> 替换为目标发行版的名称
wsl --distribution <Distribution Name> --user <User Name>

# 注销(卸载)当前安装的Linux的Windows子系统, 以ubuntu为例
wsl --unregister Ubuntu

# 终止所有 WSL 实例和 WSL 2 轻量级实用工具虚拟机
wsl --shutdown

# 查找 Linux 发行版的 .vhdx文件和磁盘路径
# 若要查找 Linux 分发版的 .vhdx 文件和目录路径,请打开 PowerShell 并使用以下命令,将 <distribution-name> 替换为实际的Linux发行版名称:
(Get-ChildItem -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Lxss | Where-Object { $_.GetValue("DistributionName") -eq <distribution-name> }).GetValue("BasePath") + "\ext4.vhdx"


7. 安装 WSLg(可选)

Windows Subsystem for Linux GUI 是在 WSL 中使用 Linux 图形界面程序的一种方式,可以在 WSL 中任意使用 Linux 的图形界面程序。

WSLg 需要电脑已经安装了 WSL 2 内核组件。

  • 查看本机的显卡品牌:

    按 Ctrl+alt+delete,打开任务管理器,进入“性能”,查看“GPU”,记住右上角显示的 GPU 厂家。支持该功能的显卡厂商必须是 Intel、AMD 和 NVIDIA 中的一个。

  • 安装虚拟显卡驱动

    进入 https://learn.microsoft.com/en-us/windows/wsl/tutorials/gui-apps#prerequisites,安装适合自己的 GPU 的虚拟显卡驱动,并重启电脑。

  • 更新 wsl 内核版本

    使用管理员 / Administrator 身份或 Administrator 用户打开 cmd 或 powershell,运行:

    1
    wsl --update

    如果有更新,等待更新完成,然后运行:

    1
    wsl --shutdown

    将 WSL 2 关机以重启

  • 检查是否安装成功

    打开自己的 WSL 2,任意寻找一款 GUI 程序(例如 gedit),观察是否能够启动成功(每次开机初次启动可能会有较长的冷启动时间,需要耐心等待)。

    以 gedit 为例,执行:

    1
    2
    3
    > sudo apt update -y
    > sudo apt install -y gedit
    > gedit

8. troubleshooting

  • 问题 1: WslRegisterDistribution failed with error: 0x80370102

    出现这个问题的原因是没有开启 windows 虚拟机特性, 开启虚拟机特性并重启即可解决问题.

    1
    2
    # 开启虚拟机特性
    dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
  • 问题 2: 执行命令 wsl --list --online 时报错”无法解析服务器的名称或地址”

    原因: 这个问题是由于安装包地址被墙了的缘故,最终的解决方案,具体原因参考wsl.exe –list –online 报错:无法解析服务器的名称或地址

    解决办法:
    可以到https://ipaddress.com这个网站上找到 raw.githubusercontent.com 对应的 ip 地址, 在你电脑上 ping 查到的地址 -t,看哪个地址能连接上.

    例如: 185.199.108.133 可以 ping 通, 接下来设置本地解析.

    修改 C:\Windows\System32\Drivers\etc\hosts, 在在 hosts 中增加:

    1
    185.199.108.133 raw.githubusercontent.com
  • 问题 3: 当再次进入 linux 时出现”适用于 Linux 的 Windows 子系统实例已终止”

    解决办法: 重启 LxssManager 服务;
    管理员模式打开终端,输入

    1
    2
    3
    4
    5
    6
    #停止LxssManager服务
    net stop LxssManager

    #启动LxssManager服务
    net start LxssManager

9. 关联阅读

chocolatey 安装和使用

Windows 下搭建 WSL Linux 开发环境

cygwin install and configuration

Cmder 安装与配置

Win11 怎么把软件添加到开机自启动中

10. 参考文档

使用 Windows 构建高效的 Linux 开发环境

solve 0X80370102

How to install Linux on Windows with WSL

Manual installation steps for older versions of WSL

WSL 安装与使用

WSL 2 的安装过程(以及介绍)