使用Windows搭建WSL Linux开发环境

前言

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开发环境, 要获取最近更新以及反馈问题请访问原文.

参考文档

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

solve 0X80370102

How to install Linux on Windows with WSL

Manual installation steps for older versions of WSL

WSL 安装与使用

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,163评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,301评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,089评论 0 352
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,093评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,110评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,079评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,005评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,840评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,278评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,497评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,667评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,394评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,980评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,628评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,796评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,649评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,548评论 2 352

推荐阅读更多精彩内容