
很多Windows用户想折腾Linux又舍不得重装系统第一个想到的就是虚拟机。但Vmware跑起来吃内存、开个图形界面还卡实际用起来总觉得隔了一层。后来微软推出了Windows Subsystem for Linux简称WSL直接把一个完整的Ubuntu环境集成到Win10里不用虚拟化不用双系统开机就是命令行想用的时候打开终端就能进Linux这才算真正解决了问题。我身边不少搞嵌入式、写Python、跑算法的同事现在都是靠这个在Windows上过Linux日子的。这篇文章就围绕“Win10应用商店版Ubuntu18.04子系统安装”这个主题把从环境检查、商店安装、初始化账号到设置中文环境的完整过程讲透。我会把每一步背后的原因也讲清楚不只告诉你“怎么做”还告诉你“为什么这样做”最后再附上我这几年来实际踩过的坑和排查经验。不管你是刚接触Linux的初学者还是需要在Windows上临时跑Linux命令的开发者这套流程都能直接用。1. 为什么选应用商店版先弄清楚WSL的思路很多人的第一反应是装Ubuntu为什么不直接下载镜像装双系统因为WSL不是虚拟机也不是传统意义的“子系统”它的定位是给Windows用户提供一个轻量的Linux兼容环境。你不需要专门划分磁盘分区不需要处理引导问题更不需要在Windows和Linux之间来回重启。1.1 应用商店版与镜像安装的本质区别如果你下载过Ubuntu桌面版镜像应该记得那个安装过程分区、引导、显卡驱动、交换分区每一步都有可能把系统搞挂。WSL完全绕开了这些它由微软和CanonicalUbuntu母公司官方合作发布在应用商店里的Ubuntu本质是一个经过打包的根文件系统配合WSL的运行时来工作。应用商店版的好处非常明显安装体积小通常只有几百兆不占额外磁盘分区。卸载干净去设置或者用命令就能彻底移除不会留下引导垃圾。更新方便和商店里的普通应用一样系统会提示你升级。与Windows文件系统互通可以直接在Linux里访问C盘、D盘的文件。这个过程相当于你在Windows里“租用”了一个Linux空间入口就是终端窗口不需要图形界面也能完成绝大多数工作。1.2 搞清楚WSL1和WSL2的区别再动手标题里只写了“Win10应用商店版Ubuntu18.04子系统”但安装之前你必须弄清楚自己会用到WSL的哪个版本因为这两者的机制完全不同。WSL1是一个系统调用翻译层它把Linux程序发出的系统调用直接翻译成Windows NT内核能识别的调用所以启动快、内存占用低但兼容性不佳很多依赖Linux内核特性的软件跑不起来。WSL2则不同它使用了真正的轻量级虚拟机技术内部跑的是一个完整的Linux内核所以Docker、FUSE文件系统、iptables这类依赖内核模块的工具都能正常工作。代价就是它需要Windows开启“虚拟机平台”功能并且占用内存相对高一些。我的建议很直接除非你的机器配置实在太老否则一律装WSL2。Docker Desktop现在也默认使用WSL2作为后端如果你以后有容器相关需求选WSL1会非常痛苦。注意如果系统还是旧版Win10比如LTSC 2019或更早版本部分版本不支持WSL2只能停留在WSL1。这个问题后面排查章节会细说这里先记住结论。2. 安装前准备环境检查与Windows功能开启很多人在这一步省略了检查直接在应用商店搜索Ubuntu就安装结果启动时报错“WSL optional component is not enabled”或者“0x80070057”然后一头雾水。实际上这些报错大部分都能通过预先检查避开。2.1 查看Windows版本和内部版本号按下快捷键WinR输入winver并回车会弹出一个窗口显示Windows版本和OS内部版本号。这里需要重点看的是内部版本号支持WSL2的最低版本要求是build 19041Windows 10 2004及以上。如果版本低于这个号建议先在Windows更新里升级系统或者干脆只能用WSL1。顺带提醒一下Win10的版本号如果显示的是21H2、22H2这种通常都满足WSL2要求。如果你是老系统且不方便升级那就把WSL版本锁定为1后面所有Docker类操作就不要想了。2.2 启用必要的Windows功能打开控制面板进入“程序” - “启用或关闭Windows功能”勾选以下两项适用于Linux的Windows子系统。虚拟机平台安装WSL2时必需。操作路径我再说细一点Win键打开开始菜单直接输入“启用或关闭Windows功能”就能搜索到这个面板。勾选完成后系统会提示重启一定要重启不要选择“以后重启”因为后续安装WSL内核组件时需要系统处于新状态。这个环节最容易出问题的是“虚拟机平台”找不到选项——某些精简版系统把这一项裁剪掉了。解决办法是自己下载并安装WSL2内核更新包微软官方有单独的MSI安装包装上以后就算功能列表里看不到“虚拟机平台”WSL2也能正常工作。不过这类情况比较少见多数人按照标准流程走就行。提示如果你以前装过Docker Desktop有可能这些功能已经默认开启检查一遍即可不用重复勾选。3. 应用商店安装Ubuntu 18.04操作细节与避坑环境准备就绪接下来就是正式的安装环节。从商店搜索到初始化看起来只是点几下鼠标但里面有几个容易踩的坑。3.1 在商店搜索并安装Ubuntu 18.04打开Microsoft Store在搜索框输入“Ubuntu”结果列表里会出现一堆发行版Ubuntu、Ubuntu 22.04.3 LTS、Ubuntu 20.04.5 LTS、Ubuntu 18.04.6 LTS等等。这里就需要注意了一定选带版本号的而且要用18.04这个版本不要选了“Ubuntu”这个不带数字的默认版本。为什么不选最新的22.04而选18.04因为很多自动化工具、嵌入式交叉编译链、ROS机器人操作系统的配套库仍然以18.04为主要验证环境。比如你要做相机雷达联合标定官方文档大概率写的是Ubuntu 18.04和ROS Melodic20.04对应的是ROS Noetic环境参数不一样照抄命令就不灵了。操作步骤在应用商店搜索框输入“Ubuntu 18.04”。在结果中找到“Ubuntu 18.04.6 LTS”点击进入。点击“获取”按钮系统会自动完成下载和安装。下载速度取决于网络情况一般几分钟内能完成。安装完成后在开始菜单里就能看到Ubuntu的图标。3.2 第一次启动创建UNIX用户名和密码点击开始菜单里的Ubuntu图标首次启动会进行初始化这个过程大约几十秒然后会提示你“Enter new UNIX username:”。这里有几个关键点值得说明用户名不要大写不要带空格建议使用简短的小写英文名。系统不会像Windows那样创建“管理员”和“标准用户”区别而是直接给你配置一个默认用户这个用户默认具有sudo权限。输入密码时屏幕不会有任何显示连星号都没有这是Linux终端的正常行为不是出问题了。这一步很多人会愣住以为键盘坏了。其实就是盲输输入完直接回车即可。初始化完成后你会进入一个普通的bash命令行界面能看到类似userDESKTOP-XXXX:~$这样的提示符到这里Ubuntu子系统已经成功运行。4. 初始化Ubuntu环境换源、更新、设置中文很多教程到这里就结束了但实际用起来你会发现两个问题第一是apt install下载速度慢得像蜗牛爬第二是终端里看不了中文全是方块或者乱码。这两个问题都必须在系统刚装好时解决。4.1 把软件源换成国内镜像源Ubuntu默认的软件源服务器在国外国内网络环境下执行apt update经常超时或者速度极慢。这一步建议在第一时间完成不然后面装任何软件都想砸键盘。首先备份原始源列表这算是个好习惯防止以后想还原却找不到原文件sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak然后编辑源列表文件sudo nano /etc/apt/sources.list把文件里的内容全部替换成清华源或阿里云源。以清华源为例Ubuntu 18.04的源内容大致如下deb 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 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保存退出后执行sudo apt update sudo apt upgrade -yupdate是更新软件包索引upgrade是真正升级已安装的软件包。第一次执行upgrade可能需要几分钟耐心等着就行。如果你连nano都不会用可以用sudo vi /etc/apt/sources.list按i进入编辑模式编辑完按Esc输入:wq保存退出。不会vi就用nano按CtrlO保存CtrlX退出对新手友好得多。4.2 安装中文字体包与语言包Ubuntu子系统默认英文环境虽然你可以在终端里输入中文但显示中文内容时会变成一团乱码或者方框这是因为缺少中文字体。需要安装以下包sudo apt install -y language-pack-zh-hans fonts-noto-cjklanguage-pack-zh-hans是简体中文语言包负责界面和locale的翻译与支持fonts-noto-cjk是Google的Noto中日韩字体负责让终端和命令行工具能正常渲染中文字形。安装语言包之后还需要生成中文locale。locale可以理解成Linux程序判断“用什么语言、什么编码来处理文本”的环境变量。执行sudo locale-gen zh_CN.UTF-8这条命令会生成简体中文的UTF-8编码规则。4.3 把系统默认语言切换为中文生成locale后将系统的默认语言设置为中文。Ubuntu系统有一个默认的配置文件/etc/default/locale可以直接编辑它sudo nano /etc/default/locale把内容修改为LANGzh_CN.UTF-8 LANGUAGEzh_CN:zh LC_ALLzh_CN.UTF-8保存退出后重启终端窗口或者退出WSL再重新进入。重启后执行locale命令如果显示LANGzh_CN.UTF-8就说明切换成功。你可能还会遇到一个情况即使设定了中文locale某些软件比如man手册、部分命令行工具仍然显示英文。这是因为这些工具没有安装中文翻译文件可以在安装language-pack-zh-hans时顺便安装manpages-zh但说实话Linux下中文文档覆盖并不完整英文反而更可靠所以我建议把系统设为中文环境练习操作遇到英文内容就正常读别太纠结。4.4 让Windows Terminal正确显示中文默认的Windows控制台conhost对中文渲染支持一般尤其在使用WSL时输入中文经常会出现光标错位、字符重叠的问题。我强烈建议安装Windows Terminal它是微软官方的新终端工具对UTF-8和中文支持都很出色。Windows Terminal在应用商店里就能搜到安装后在设置里把默认配置文件改成“Ubuntu 18.04”字体建议用“Cascadia Mono”或者“Consolas”这两个字体对中文都有比较好的fallback。打开Terminal进入Ubuntu中文显示就不会再出奇怪的问题了。如果你坚持用默认控制台也可以右键标题栏进入“属性” - “选项”勾选“使用UTF-8”但体验还是不如Windows Terminal。5. 常见问题与排查技巧实录这章我根据自己的使用经历整理几个高频问题。每个问题都是我在实际安装和日常使用时遇到过的照着排查基本都能解决。5.1 启动Ubuntu时报错“0x80070057”这个错误很经典通常出现在没有开启虚拟化相关功能就直接安装运行WSL2时。排查思路回到“启用或关闭Windows功能”确认“虚拟机平台”和“适用于Linux的Windows子系统”都已勾选。确认系统已重启。打开命令行cmd或PowerShell执行wsl --set-default-version 2然后重新启动Ubuntu。如果依然不行执行wsl -l -v查看当前WSL版本如果显示的是1而你需要2可以手动指定wsl --set-version Ubuntu-18.04 2这个命令会把Ubuntu 18.04从WSL1转换为WSL2转换过程需要一点时间。如果你的系统版本低于2004这个方法会报错那就只能停留在WSL1或者升级Windows系统。5.2 应用商店下载Ubuntu一直是“正在获取”这个问题常见于网络不稳定的环境。微软商店的下载走的是系统更新服务如果系统时区、网络代理设置不对下载很容易卡住。检查系统时间是否准确时间不对会导致TLS证书校验失败。在设置里打开“网络和Internet” - “代理”关闭“使用代理服务器”选项如果你没专门配置代理。重置一下应用商店缓存按WinR输入wsreset.exe等待商店重新初始化后再试。另一个可行方案是绕过应用商店直接用命令行安装在微软官网下载Ubuntu 18.04的.appx包然后用Add-AppxPackage命令安装。但多数情况下上面的方法足够解决。5.3 中文显示为菱形方块安装了中文语言包和字体终端里还是显示方块重点检查两方面是否安装了fonts-noto-cjk有些精简安装只装语言包不装字体中文就没法渲染。Windows Terminal里是否选择了正确的字体。在Windows Terminal中字体的fallback机制和系统控制台不同需要设置一个支持中文的字体。不要只设置英文字体可以把字体改成“Microsoft YaHei Mono”或者“Sarasa Mono SC”更纱黑体这两个字体对中文支持非常完整。如果还是不行试试在Ubuntu中执行fc-list :langzh这个命令会列出系统中所有支持中文的字体如果列表为空说明字体没装上重新执行sudo apt install -y fonts-noto-cjk然后重启终端。5.4 忘记sudo密码或账号进不去这个问题的本质是WSL每次启动都会以默认用户登录但密码忘了就没法执行管理员操作。解决办法是利用Windows侧的wsl命令指定用户登录wsl -d Ubuntu-18.04 -u root这样会以root身份直接进入Ubuntu不需要密码。进入后执行passwd 你的用户名就能重置密码。顺带说一句WSL的root用户默认没有密码所以如果你设置了root密码又忘了用同样的方法重置就行。5.5 磁盘空间无故增大系统越来越卡WSL使用虚拟磁盘文件VHDX来存储Linux文件系统这个文件会自动增长但不会自动收缩。即使你在Ubuntu里删除了大量文件VHDX文件占用的Windows空间也不会自动释放。要手动压缩在PowerShell里执行wsl --shutdown然后找到ext4.vhdx文件通常在C:\Users\你的用户名\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu18.04onWindows_*\LocalState\右键属性确认路径再用管理员身份打开Diskpart工具diskpart select vdisk fileC:\Users\你的用户名\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu18.04onWindows_*\LocalState\ext4.vhdx attach vdisk readonly compact vdisk detach vdisk exit这个操作能把虚拟磁盘中的空闲空间释放出来效果很明显。鉴于写到这里我估计你已经完成了安装和中文设置先把系统用起来这个压缩操作可以等以后遇到磁盘占用问题时再回来操作。5.6 WSL里访问Windows文件速度极慢我见过很多人把项目代码放在D盘然后在WSL里直接跑/mnt/d/xxx路径下的程序结果发现编译速度比Windows里慢好几倍。这是因为WSL访问/mnt下的Windows文件系统需要跨文件系统翻译大量的I/O调用会产生巨大开销。解决办法很简单把代码、项目等文件放在Linux原生文件系统内也就是/home/你的用户名/目录下。从Windows访问Linux文件用资源管理器地址栏输入\\wsl$\Ubuntu-18.04\home\用户名随意操作。简单说Windows文件放WindowsLinux文件放Linux跨系统互访只做传输不做日常读写速度问题就能最大程度规避。5.7 apt update报错“Unable to fetch”出现这个报错时先确认是不是源配置写错了比如把Ubuntu版本代号写错——18.04是bionic20.04是focal22.04是jammy。如果源没问题再看看网络是否正常。还有一种情况是IPv6造成的在某些网络环境下wsl的IPv6路由有问题。可以在/etc/gai.conf文件里取消注释precedence ::ffff:0:0/96 100这个配置会让系统优先使用IPv4访问网络能绕过一部分IPv6解析问题。6. 后续还能怎么扩展开发环境的落地思路安装好系统、配好中文这只是起点。我见过不少朋友装完就放那吃灰了其实WSL能做的事远比想象中多。如果你是做开发或者学习用的接下里可以按这个顺序继续搭建安装VS Code的Remote-WSL插件直接在Windows侧的编辑器里操作WSL内的代码文件特别顺手。安装Docker Desktop并开启WSL2集成所有的容器都能跑在Ubuntu里。用alias把常用命令简化比如alias llls -alF每次进终端体验会好很多。配置SSH密钥通过Windows侧生成公钥传到GitHub或服务器以后推代码不用反复输密码。我在实际使用中还有一个体会把WSL Ubuntu的终端固定在任务栏快捷键一键启动替代了以前用cmd/PowerShell操作习惯在写完C代码后直接调用Linux下的gcc编译方便到回不去。说到底WSL这套方案不再只是个“轻量虚拟机”它让Windows和Linux在同一台机器上无缝协作把两边生态的最强部分都用起来这才是这个工具最大的价值。