前言
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 操作系统体验。
前提条件
您必须运行 Windows 10 版本 2004 及更高版本(Build 19041 及更高版本)或 Windows 11 才能使用以下命令。如果您使用的是早期版本,请参阅手动安装页面。
开启WSL特性和虚拟机特性
以管理员身份打开powershell, 开启WSL特性, 启动虚拟机
在安装WSL之前,首先运行以下命令来确认是否已启用“适用于 Linux 的 Windows 子系统”:
State : Disabled
表示未启用
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特性,
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%==========================]
操作成功完成。
开启虚拟机特性
PS C:\Windows\system32> dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
部署映像服务和管理工具
版本: 10.0.22000.653
映像版本: 10.0.22000.2295
启用一个或多个功能
[==========================100.0%==========================]
操作成功完成。
开启后重启电脑
安装Linux内核更新包
下载并安装Linux内核更新包
如果处理器是x64架构的选择: Linux内核更新包x64
如果处理器是 ARM 架构,Linux内核更新包arm64
下载后双击安装, 安装包有五百多兆, 安装需要一些时间.
将WSL2设置为默认的WSL
wsl --set-default-version 2
安装Ubuntu
打开Windows store
搜索Unbuntu点击安装(Get)
安装完成后点击打开, 如果你关闭了windows store界面, 也可以在开始菜单搜索ubuntu并打开.
首次打开需要进行初始化, 初始化需要一些时间, 等待初始化完成.
初始化完成后需要设置用户名密码;
设置完用户名密码, 就可以使用Ubuntu了.
至此Ubuntu安装就算安装完成了. 我也准备了一些关于使用linux的文章, 内容包裹安装各类开发软件, 数据库等等方面, 有兴趣的同学可以访问鹏叔的技术博客 - linux专题.
使用WSL管理虚拟机
WSL的底层技术实际是Micrsoft hyper-v, 一款虚拟机管理软件, 类似wmware和virtualbox, 和linux平台的kvm.
wsl就是管理虚拟机的CLI(command line interface).
在Powershell下面还可以对Linux进行一些管理工作, 例如生成快照, 恢复快照, 启动虚拟机, 关闭虚拟机.
以普通用户身份打开Powershell
# 查看当前已安装的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发行版
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"
安装 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,运行:wsl --update
如果有更新,等待更新完成,然后运行:
wsl --shutdown
将 WSL 2 关机以重启
检查是否安装成功
打开自己的 WSL 2,任意寻找一款 GUI 程序(例如 gedit),观察是否能够启动成功(每次开机初次启动可能会有较长的冷启动时间,需要耐心等待)。
以 gedit 为例,执行:
> sudo apt update -y
> sudo apt install -y gedit
> gedit
troubleshooting
问题1: WslRegisterDistribution failed with error: 0x80370102
出现这个问题的原因是没有开启windows虚拟机特性, 开启虚拟机特性并重启即可解决问题.
# 开启虚拟机特性
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中增加:
185.199.108.133 raw.githubusercontent.com
问题3: 当再次进入linux时出现"适用于 Linux 的 Windows 子系统实例已终止"
解决办法: 重启LxssManager服务;
管理员模式打开终端,输入
#停止LxssManager服务
net stop LxssManager
#启动LxssManager服务
net start LxssManager
后记
本文原文位于鹏叔的技术博客空间 - 使用Windows搭建WSL Linux开发环境, 要获取最近更新以及反馈问题请访问原文.
参考文档
How to install Linux on Windows with WSL