ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Win10下WSL2安装多发行版并配置图形桌面全攻略

Win10下WSL2安装多发行版并配置图形桌面全攻略 以前要在Windows 10上折腾Linux我第一反应都是装个虚拟机VMware Workstation打开配置内存、磁盘、网络再装一个完整的Linux发行版等桌面慢悠悠出来半天就过去了。后来接触WSL/WSL2才算是找到一条更轻的路直接在Win10里装一个或几个Linux发行版命令行和Windows无缝共享文件想跑什么服务一条命令就能起。更妙的是WSL2配合图形服务还能把完整的Linux桌面界面亮出来跟Windows窗口一起摆在桌面上互不干扰。这篇文章就是写给那些和我一样想在Win10系统里通过WSL/WSL2安装各种Linux版本并且把图形桌面跑起来的朋友。1. WSL与WSL2到底怎么选两个版本的差别决定方案走向1.1 WSL是什么为什么在Win10里能直接跑LinuxWSL的全称是Windows Subsystem for Linux直译过来就是“适用于Linux的Windows子系统”。它的出现最早是为了解决很多开发者在Windows环境下没法舒服地用Linux命令、Linux工具链的问题。你不需要装虚拟机不需要双系统就能在Windows里打开一个真正的bash终端运行apt、gcc、Python、Docker这些Linux生态里的东西。WSL1和WSL2之间的区别对后续能不能开图形桌面的影响非常大。WSL1其实是一个系统调用翻译层把Linux程序发出来的系统调用翻译成Windows NT内核能识别的调用。这种方式启动快文件互操作也方便但兼容性一般很多依赖Linux内核特性的软件跑不了。WSL2则完全不同它把一套经过微软修改的、真正的Linux内核放进了一个轻量级虚拟机里在虚拟机里运行完整的Linux发行版。正因为WSL2是真正的Linux内核它的兼容性远好于WSL1Docker、FUSE、systemd这些都能正常工作。图形桌面这类需要访问图形栈、内核模块的活儿尤其依赖WSL2的完整性。1.2 WSL1和WSL2关键对比一览对比项WSL1WSL2内核机制系统调用翻译层轻量虚拟机内的完整Linux内核系统调用兼容性一般特殊程序可能报错很好绝大多数Linux应用可直接跑Docker支持不支持早期需要依赖Docker ToolboxDocker Desktop原生支持跨Windows文件访问快比较自然慢从Linux侧访问挂载盘会明显卡顿跨OS文件访问在Windows侧访问Linux文件也有限制需要在同一侧操作否则性能差网络模式共享Windows网络NAT网络有独立IP开启图形桌面可以用X Server但体验一般配合X Server或RDP体验接近虚拟机适用场景轻量命令、跨盘协作开发、容器、服务端、图形环境这个表格很直白一旦你打算跑“各种Linux版本”并且要开启图形桌面基本上可以直接锁定WSL2。我见过不少人在WSL1上装Gnome/KDE翻车换了WSL2以后一切顺畅原因就在于WSL2跑的是真内核图形相关的依赖能装完整。当然WSL2也不是没缺点它跨Windows盘访问Linux侧的根文件系统时性能会比较拉胯所以项目文件最好放在Linux自己的文件系统里比如/home/用户名下别放在/mnt/c里折腾。1.3 为什么我最终选择WSL2而不是WSL1讲一个发生在我自己身上的例子。有一年我要在一台Win10上跑一个内网扫描工具工具本身是个Linux二进制文件依赖系统调用比较多。WSL1里启动就报“Operation not supported”直接把我看懵了。后来切到WSL2同一个文件运行得毫无问题。从那以后我所有发行版都统一用WSL2不再纠结。另一个理由是图形体验。WSL1由于是翻译层跑图形程序时会多一层转换偶尔会出现窗口渲染问题。WSL2虽然本身也没有WSLg但你可以用X Server或者RDP把Linux桌面搬出来画面流畅度、兼容性都比WSL1强一个档次。特别是完整桌面环境像XFCE这种轻量级桌面在WSL2里跑起来和虚拟机没什么两样。既然标题的核心是“开启图形桌面”那WSL2是唯一值得推荐的路线。2. Win10系统启用WSL/WSL2的完整环境准备2.1 开工前先检查系统版本和虚拟化设置想顺利在Win10上安装WSL2前提是系统版本不要太老。建议至少是Windows 10 2004Build 19041或更高我实测21H2、22H2都很稳定。打开命令提示符输入winver会弹窗显示你当前的版本号低于19041的建议先更新系统否则后面装内核更新包会报错。第二步是检查CPU虚拟化是否已经开启。WSL2需要虚拟化技术支撑任务管理器里切换到“性能”选项卡然后看“CPU”右下角会有一个“虚拟化”状态显示“已启用”就是正常的。如果没有启用需要重启电脑进BIOS/UEFI找到Intel Virtualization TechnologyVT-x或AMD-V的开关把它设为Enabled。这一步不提前搞定后面WSL2启动时会直接给你报0x80370102错误很麻烦。另外有些精简版系统可能默认把Windows功能项给砍了比如“虚拟机平台”“Windows虚拟机监控程序平台”等。我用的系统是官方镜像安装的功能齐全如果你用的是第三方优化版建议先在“启用或关闭Windows功能”里确认一下VirtualMachinePlatform有没有勾选。2.2 用一条命令快速启用WSL功能Win10下启用WSL有两条路一条是传统的手动启用Windows功能另一条是直接用新版WSL的wsl --install命令。我先说传统方式因为它对系统版本的兼容性更稳。以管理员身份打开PowerShell依次执行dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart第一次执行是启用WSL本身第二次是启用“虚拟机平台”这个虚拟化支撑功能。两条命令跑完系统会提示重启重启后WSL功能就算打开了。如果你用的是较新的Win10 21H2以上版本也可以直接执行wsl --install这条命令会将WSL功能、虚拟机平台、默认的Ubuntu发行版一次装好省掉手动装发行版那一步。不过我在Win10上实测wsl --install有时不会自动下载内核更新包装完之后仍然需要再跑一遍WSL2内核包所以我习惯用上面那两条dism命令打底后续步骤更可控。提示无论用哪种方式启用功能之后一定要重启不重启继续下一步很容易碰到诡异错误。2.3 安装WSL2内核更新包并设置默认版本WSL2和WSL1最大的差别就在于那个真正的Linux内核而微软在Win10上把这个内核做成了一个独立安装包wsl_update_x64.msi。去微软官方下载中心搜索“WSL2 Linux内核更新包”找到对应x64版本的安装包双击安装即可。安装完成后管理员身份打开PowerShell执行wsl --set-default-version 2如果系统提示“操作成功完成”说明WSL2已经被设置为默认版本。以后新装的发行版都会默认跑在WSL2上。如果不放心还可以用wsl -l -v查看当前已安装发行版对应的版本WSL版本那一列会显示“2”。在这个基础上我建议把WSL本身也更新到最新版。旧版WSL的wsl.exe功能很少不支持--version这种参数。让我看看你现在能不能用wsl --version能正常打印版本信息说明用的是新版WSL后面的systemd、wsl.conf配置项都能用。如果提示未知参数那也没关系内核包装好、版本设为2就够用了。只要后面装完发行版能正常启动就说明环境已经搭好。3. 在Win10上安装Ubuntu、Debian、Kali等发行版3.1 最简单的路线Microsoft Store直接安装想在Win10上装各种Linux发行版最省事的方式就是打开Microsoft Store搜索Linux你会看到一排可选的发行版Ubuntu、Debian、Kali Linux、openSUSE Leap、SUSE Linux Enterprise Server、Pengwin等等。选中一个版本点击安装然后等它下载完。装完之后从开始菜单里找到“Ubuntu”或者“Kali”的图标第一次打开会提示你设置一个新的用户名和密码。注意这个用户名和密码是Linux内的用户跟Windows账户没有关系后面做sudo权限操作都会用到它。设置完你就拥有一个可以正常使用的Linux终端了。这个方式最大的痛点在于Microsoft Store默认会把发行版安装在C盘而且安装路径不好定制。C盘磁盘空间紧张的话装几个发行版之后就会告急。所以我一般只在尝鲜时用商店安装真正长期使用的发行版我更推荐用下面这种导入方式。发行版适合场景商店名称Ubuntu通用开发、桌面、DockerUbuntuDebian稳定版服务器、最小化系统DebianKali Linux安全测试、渗透工具Kali LinuxopenSUSE Leap企业级开发、运维openSUSE LeapAlpine轻量容器、边缘设备Alpine WSL顺带一提每个发行版都有自己独特的包管理器Ubuntu/Debian/Kali用aptopenSUSE用zypperAlpine用apk。按需选择就好。3.2 自由路线用wsl --import导入自定义rootfs商店安装虽然直观但如果你想把Linux发行版装在D盘或者想装一个商店里没有的特殊版本就得用wsl --import。大概思路是先去目标发行版官网下载一个rootfs镜像压缩包通常是一个tar.gz文件或者从微软商店的appx安装包里提取出那个tar.gz。下载完成后管理员PowerShell执行wsl --import Ubuntu-22.04 D:\WSL\Ubuntu2204 D:\Downloads\ubuntu-22.04-rootfs.tar.gz --version 2这个命令的格式是wsl --import 发行版名字 安装目录 rootfs压缩包路径 --version 2。其中“Ubuntu-22.04”是显示在wsl -l里的名字可以随便取D:\WSL\Ubuntu2204是发行版被展开存放的目录这一步就解决了C盘空间不足的问题最后面的tar.gz就是rootfs文件。导入之后你可以用wsl -d Ubuntu-22.04进入这个发行版但此时默认用户通常是root。如果你想要一个普通用户需要进系统里用useradd创建用户然后编辑/etc/wsl.conf加入[user] default用户名保存后执行wsl --terminate Ubuntu-22.04再重新进入就会登录到指定用户名了。3.3 多发行版共存、切换与默认实例管理WSL最让我上瘾的一点就是能在同一台Win10里安装多个发行版平时全放在那儿谁也不会跟谁打架。用wsl -l -v可以列出当前所有已安装的发行版带上版本信息wsl -l -v输出结果会类似这样NAME STATE VERSION * Ubuntu Stopped 2 Debian Stopped 2 Kali-Linux Running 2前面带星号的是默认发行版也就是说直接在PowerShell输wsl进去的那个。想修改默认发行版用wsl -s Debian想直接进入某个指定的发行版不用管默认是谁用wsl -d Kali-Linux非常灵活。平时开发中我经常开着Ubuntu跑服务端再单独开一个Kali跑工具互不影响。这些发行版之间还可以互相通过挂载访问对方文件比如在Ubuntu里可以进/mnt/wsl下面的其他实例目录具体路径因版本而异不需要刻意记用到时用ls /mnt/wsl看一眼就明白了。4. Win10下WSL2图形桌面开启实操从单窗口到完整桌面4.1 现状说明Win10没有原生WSLg图形方案要自己拼提到WSL2图形界面很多人会想到WSLg这是Windows 11内置的功能它让WSL2里的GUI程序直接显示在Windows桌面上用户几乎不需要配置任何东西。但Win10并没有原生WSLg虽然部分Windows 10预览版里出现过相关功能稳定版里基本用不上。因此想在Win10上“开启图形桌面”只能走两条路方案A在Windows侧跑一个X Server比如VcXsrv、Xming让WSL2里的GUI程序通过X11协议把图形界面显示到Windows桌面上。适合跑单个图形应用也适合跑完整的轻量桌面。方案B在WSL2里面安装完整桌面环境和xrdp服务然后通过Windows自带的“远程桌面连接mstsc”连进去。适合把WSL2当成一台迷你Linux机器。两条路我都有实际使用经验。对日常“我只需要在Linux里开一个IDE、一个文件管理器”的人来说方案A更轻对追求“完整的Linux桌面体验”的人来说方案B更接近真实Linux环境。下面分开讲。4.2 最小方案VcXsrv X11转发跑单个GUI程序第一步去官网下载VcXsrv安装后启动XLaunch。XLaunch的配置界面里有几个关键选择Display Settings选“Multiple windows”Display number默认0即可。Client startup选“Start no client”。Extra settings把“Disable access control”勾上。这一步很重要它会让X Server接受来自WSL虚拟网卡的连接请求否则后面图形界面会起不来。X Server启动后Windows任务栏会出现一个X图标。接下来进入WSL2的Linux终端手动设置DISPLAY环境变量让Linux知道图形输出到哪台主机。WSL2的Linux运行在虚拟机里它访问Windows主机不能直接用localhost需要通过虚拟网卡找到Windows在WSL子网里的IP。最简单的办法是从/etc/resolv.conf里取nameserverexport DISPLAY$(grep nameserver /etc/resolv.conf | awk {print $2}):0.0为了以后不用每次手动敲把这一行追加到~/.bashrc末尾echo export DISPLAY$(grep nameserver /etc/resolv.conf | awk {print \$2}):0.0 ~/.bashrc source ~/.bashrc设置好之后可以测试一下。先装一个小工具sudo apt update sudo apt install -y xterm xterm如果VcXsrv还在运行桌面上马上会弹出一个X终端窗口。看到这个窗口说明X11转发链路整条都通了。这时候再装其他图形软件就有底气了比如gedit、nautilus、firefox全部能在Windows窗口里正常显示。4.3 完整桌面方案XFCE xrdp像远程桌面一样使用Linux如果你不想只看到一个窗口而是想要一个完整的桌面环境可以试试xrdp方案。我选的是XFCE因为它轻量、稳定在WSL2里跑起来不会有明显卡顿。在WSL2里执行sudo apt update sudo apt install -y xfce4 xfce4-terminal xrdp安装完成后配置xrdp的默认会话。编辑/etc/xrdp/startwm.sh在文件末尾找到启动桌面环境的位置把默认的startwm.sh那一行修改成启动XFCEecho startxfce4 ~/.xsession sudo chmod x ~/.xsession同时编辑/etc/xrdp/startwm.sh在文件末尾加一句startxfce4然后重启xrdp服务sudo systemctl enable xrdp sudo systemctl restart xrdp如果你的WSL2还没有开启systemd就先用传统方式启动sudo service xrdp start此时在Windows里按WinR输入mstsc打开远程桌面连接地址填localhost:3389用户名密码填WSL2里刚才设置的那个Linux用户点击连接。稍微等一两秒你就能看到XFCE桌面出现在远程桌面窗口里这就算是把完整的Linux图形桌面跑起来了。整个体验和连一台真实Linux服务器没有太大区别。注意如果连接后出现黑屏或者只看到一个蓝色背景多半是startwm.sh里没有正确写入startxfce4。可以尝试把/etc/xrdp/startwm.sh末尾的几行删掉再单独加入startxfce4保存后重启服务再试。4.4 让桌面体验更顺滑的几点优化在WSL2里跑桌面优化空间其实挺大。我经验最深的三个环节是systemd、字体、共享文件。新版的WSL2已经支持systemd了。在/etc/wsl.conf里加[boot] systemdtrue然后重启发行版。这样xrdp、sshd这些服务都可以正正经经地用systemctl管理不用每次进去都手动service start。很多人卡在xrdp“启动不了”的问题上其实大多是systemd没开服务反复被拉起但没有依赖关系。中文字体一定要装否则打开文件管理器、浏览器所有汉字都变成一个个方块。在Linux侧执行sudo apt install -y fonts-noto-cjk如果你对桌面美观有要求可以再装xfce4-goodies它包含一堆面板插件、终端增强、屏幕截图工具整体体验会舒适不少。至于文件共享Windows的磁盘在WSL2里会挂载到/mnt/c、/mnt/d桌面环境里可以通过Thunar文件管理器直接访问这些目录不需要额外配Samba。5. 常见故障排查与全流程实践记录5.1 WSL启不起来的典型报错速查装了这么多次WSL我几乎把能踩的坑都踩了一遍。下面这几种报错最典型值得先记下来。错误信息原因解决办法0x80370102CPU虚拟化未开启或虚拟机平台没启用BIOS里开启VT-x/AMD-V确认VirtualMachinePlatform功能已启用0x8007019eWSL2内核更新包没装安装wsl_update_x64.msi然后执行wsl --set-default-version 20x80070003发行版安装路径异常或目录权限不对用wsl --unregister卸载重装换一个Windows能访问的目录WslRegisterDistribution failed with error 0x800701bcWindows版本过旧更新系统到2004以上检测到不支持的子系统精简系统组件被删了用系统镜像的dism命令重新启用WSL和虚拟机平台如果遇到以上都没法解决的问题最保守的杀招是先把现有发行版导出再完全重置WSL功能。导出命令如下wsl --export Ubuntu D:\backup\ubuntu-backup.tar重置之后用wsl --import导入配置并不会丢太多。5.2 图形界面黑屏、白屏、连接被拒绝的排查顺序图形方案失败的时候别急着重装按照下面这个顺序排查基本都能找到问题。先确认DISPLAY变量是否正确。在WSL2里执行echo $DISPLAY应该看到类似于172.x.x.x:0.0的地址如果是空的或者显示:0.0但X Server没监听那就不对。如果显示的是IP继续下一步。再确认VcXsrv是否在运行并且“Disable access control”有没有勾上。如果没勾你需要在Windows侧额外执行xhost 来允许所有连接或者彻底关掉防火墙对VcXsrv的限制。VcXsrv默认会监听6000端口可以检查一下Windows防火墙是否放行了Private网络下的VcXsrv。接下来在WSL2里测试X11链路xset q如果这个命令能返回一堆显示器信息说明X Server连接正常如果报错说明DISPLAY或访问控制有问题。针对xrdp连接黑屏可以查看/var/log/xrdp.log和/var/log/xorg.log里面的报错通常很直白比如缺少桌面文件、权限不足之类。5.3 资源占用与发行版迁移的实操心得WSL2虽然比虚拟机轻但也不是毫无成本。它默认会吃掉很多内存和CPU资源如果电脑配置一般建议在C:\Users\用户名\.wslconfig里做一点限制。示例配置[wsl2] memory4GB processors4 swap2GB localhostForwardingtrue保存后把发行版全部终止执行wsl --shutdown再次启动时配置就会生效。这个文件对Win10同样有效别以为只有Win11才能用。至于发行版迁移我前面提到的wsl --import其实就是最好的迁移手段。假设你有一台老电脑上的Ubuntu跑了一年多配置了一堆环境想搬到新电脑上只需要在老电脑上wsl --export Ubuntu D:\backup\ubuntu.tar把备份文件拷到新电脑然后在新电脑上wsl --import Ubuntu D:\WSL\Ubuntu D:\backup\ubuntu.tar --version 2迁完之后原来安装的软件、桌面的配置文件都还在几乎是无感迁移。我自己的Kali环境就这么干过换电脑半小时内就能恢复到原样省去了重新编译工具链的烦恼。最后再分享一个小技巧如果你打算长期在WSL2里用图形桌面强烈建议每天用sudo apt update sudo apt upgrade保持系统更新别让图形组件因为依赖太旧而翻车。我第一次用xrdp连上WSL2里的XFCE桌面时其实有点意外没想到能在Win10下把Linux桌面用得这么顺。Windows文件管理器和Linux终端/桌面在同一屏里切换那种“两边都要”的自由感是虚拟机给不了的。如果你也是Win10用户又对Linux桌面有执念照着我上面的流程走一遍大概率半小时就能看到熟悉的桌面了。
返回列表