Windows如何体验使用Linux
一、背景因早上刷抖音时刷到一博主介绍WSL这个东东因已很少在本地电脑操作Linux环境咱们来看下这个和传统的vmware workstation 、virtualbox虚拟机有啥不同WSL如何安装和使用另提前声明WSL不推荐用于实际的开发测试验证引起存在一些兼容性问题还是VM独立环境更好。二、WSL介绍WSL是windows subsystem for linux的简写即它windows10 的一个子系统是一个可在windows下运行得linux操作系统它也有多个发行版本可供选择。官方介绍它可让开发人员按原样运行 GNU/Linux 环境 - 包括大多数命令行工具、实用工具和应用程序 - 且不会产生传统虚拟机或双启动设置开销。现在已经发展到WSL 2支持适用于 Linux 的 Windows 子系统在 Windows 上运行 ELF64 Linux 二进制文件。 它的主要目标是提高文件系统性能以及添加完全的系统调用兼容性。新的体系结构WSL 2改变了 Linux 二进制文件与Windows 和计算机硬件进行交互的方式且兼容WSL 1架构WSL 1 和 WSL 2 之间的主要区别在于在托管 VM 内使用真实的 Linux 内核相比WSL1.0完整的Linux内核、支持完整的系统调用兼容性以及跨 Linux 和 Windows 操作系统的性能。 WSL 2 是安装 Linux 发行版时的当前默认版本它使用最新最好的虚拟化技术在轻量级实用工具虚拟机 (VM) 内运行 Linux 内核。下面是官网的一张对照表注意WSL 2 仅在 Windows 11 或 Windows 10 版本 1903、内部版本 18362 或更高版本中可用。 可通过按 “Win R”键入 winver查看你的内部和发现版本。 它还适用于 VMware 15.5.5 和 VirtualBox 6传统的 VM 体验可能启动速度慢是独立的消耗大量资源WSL 2 具备了有 WSL 1 的几乎全部优点 Windows 和 Linux 之间的无缝集成启动时间短资源占用量少无需 VM 配置或管理。 虽然 WSL 2 中使用 了VM但 VM 是在幕后管理和运行的对用户依然无感另WSL 2 中的 Linux 内核是 Microsoft 根据最新的稳定版分支构建的且已专门针对 WSL 2 进行了调整针对大小和性能进行了优化因 WSL 2 包括了自己的 Linux 内核具有完全的系统调用兼容性不在需要像WSL 1那样需要中间层来转化WSL 2也存在一个资源的问题WSL 2 的内存使用量会随使用而缩放。 当进程释放内存时这会自动返回到 Windows。 但在关闭 WSL 实例前WSL 2 是不会将内存中缓存的页面释放回 Windows。 这就回出现一个问题如果你有长时间运行的 WSL 会话或访问非常大量的文件此缓存可能会耗尽你的 Windows 内存。官网推荐开发的小伙伴们建议尝试 VS Code 远程 WSL 扩展以便使你不仅能够使用 Linux 命令行工具将项目文件存储在 Linux 文件系统上而且还可以使用 Windows 上的 VS Code 在 Internet 浏览器中创作、编辑、调试或运行项目而不会造成任何与跨 Linux 和 Windows 文件系统工作相关联的性能下降。资源链接Install WSL with a single command now available in Windows 10 version 2004 and higher、WSL2-Linux-Kernel库、官网文档、WSL 2内核、WSL 开发环境配置指南三、WSL安装和使用1宿主机OS版本确认执行winver确认你的OS版本满足 Windows 10 版本 2004 及更高版本内部版本 19041 及更高版本或 Windows 11 且你的cpu开启了“虚拟化支持”类似与vmware workstation和virtualbox的运行前检查2WSL 2 安装前准备1、启用适用于 Linux 的 Windows 子系统打开powershell执行dism.exe/online/enable-feature/featurename:Microsoft-Windows-Subsystem-Linux/all/norestart2、启用虚拟平台支持以管理员打开powershell执行dism.exe/online/enable-feature/featurename:VirtualMachinePlatform/all/norestart或图形界面安装如下功能“适用于Linux的Windows子系统” 和 “虚拟机平台”如下所示3管理员打开CMDC:Windows\system32\chcp 936//修改cmd串口显示未中文返回如下 Acitive code page: 936 C:Windows\system32\ wsl.exe//打开默认的 Linux 发行版如果没安装的话可用来验证 适用于 Linux 的 Windows 子系统没有已安装的分发版。 可以通过访问 Microsoft Store 来安装分发版: https://aka.ms/wslstore C:Windows\system32\wsl--list--online//查看可用发行版列表默认采用Ubuntu可简写为wsl-l-o C:Windows\system32\wsl--install//安装完成后重启重启后会开启Ubuntu vm的提示框提示配置用户名和密码 C:Windows\system32\wsl--install-d DistroName//安装指定发行版 C:Windows\system32\wsl--set-default-version Version# //将默认版本设置为 WSL 1 或 WSL 2C:Windows\system32\wslwsl-s DistributionName//或 wsl--setdefault DistributionName,更改默认安装的发行版 C:Windows\system32\wsl-l-v//列出已安装的发行版 C:Windows\system32\wslpwd//查看当前目录路径在 WSL 中的装载位置 C:Windows\system32\wsl--status//查看当前安装版本信息#终止指定的分发C:Windows\system32\wsl-t Linux分发版名称#终止所有运行的分发及 WSL 轻型工具虚拟机C:Windows\system32\wsl--shutdown#卸载C:Windows\system32\wsl--unregister Linux分发版名称#更新 WSL2 内核到最新版本C:Windows\system32\wsl--update# 还原到 WSL2 内核的先前版本C:Windows\system32\wsl--update--rollback也可从windows自带的“Microsoft Store”中搜索“ubuntu”选择一个ubuntu发行版安装比如ubuntu20.04安装后就可以在我们的软件列表找到单击后即可进入四、附录常见问题4.1 安装失败并出现错误 0x80070003适用于 Linux 的 Windows 子系统只能在系统驱动器通常是 C: 驱动器中运行。 请确保分发版存储在系统驱动器上打开“设置”-“系统”–“存储”- “更多存储设置” 更改新内容的保存位置”4.2 WslRegisterDistribution 失败并出现错误 0x8007019e这一般是未启用“适用于 Linux 的 Windows 子系统”可选组件打开“控制面板” - “程序和功能” - “打开或关闭 Windows 功能”- 选中“适用于 Linux 的 Windows 子系统”或使用本文开头所述的 PowerShell cmdlet。4.3 安装失败出现错误 0x80070003 或错误 0x80370102请确保在计算机的 BIOS 内已启用虚拟化。 有关如何执行此操作的说明因计算机而异并且很可能在 CPU 相关选项下。WSL2 要求 CPU 支持二级地址转换 (SLAT) 功能后者已在 Intel Nehalem 处理器Intel Core 第一代和 AMD Opteron 中引入。 即使成功安装了虚拟机平台旧版 CPU例如 Intel Core 2 Duo也无法运行 WSL2。4.4 尝试升级时出错Invalid command line option: wsl --set-version Ubuntu 2请确保已启用适用于 Linux 的 Windows 子系统并且你使用的是 Windows 内部版本 18362 或更高版本。 若要启用 WSL请在 PowerShell 提示符下以具有管理员权限的身份运行此命令Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux。4.5 由于虚拟磁盘系统的某个限制无法完成所请求的操作。虚拟硬盘文件必须是解压缩的且未加密的并且不能是稀疏的取消选中“压缩内容”如果已选中“加密内容”请一并取消选中方法是打开 Linux 发行版的配置文件文件夹。 它应位于 Windows 文件系统上的一个文件夹中类似于USERPROFILE%\AppData\Local\Packages\CanonicalGroupLimited…在此 Linux 发行版配置文件中应存在一个 LocalState 文件夹。 右键单击此文件夹可显示选项的菜单。 选择“属性”“高级”然后确保未选择未勾选“压缩内容以节省磁盘空间”和“加密内容以保护数据”复选框。 如果系统询问是要将此应用到当前文件夹还是应用到所有子文件夹和文件请选择“仅此文件夹”因为你只是要清除压缩标志。 完成此操作后wsl --set-version 命令应正常工作。4.6 无法将词语“wsl”识别为 cmdlet、函数、脚本文件或可运行程序的名称请确保已安装“适用于 Linux 的 Windows 子系统”可选组件。 此外如果你使用的是 ARM64 设备并从 PowerShell 运行此命令则会收到此错误。 请改为从 PowerShell Core 或从命令提示符运行 wsl.exe。4.7 错误此更新仅适用于装有适用于 Linux 的 Windows 子系统的计算机若要安装 Linux 内核更新 MSI 包需要 WSL应先启用它。 如果失败将看到以下消息This update only applies to machines with the Windows Subsystem for Linux。出现此消息有三个可能的原因1、你仍使用旧版 Windows不支持 WSL 2。 有关版本要求和要更新的链接请参阅步骤 #2。2、未启用 WSL。 需要返回到步骤 #1并确保在计算机上启用了可选的 WSL 功能。3、启用 WSL 后需要重新启动才能使其生效请重新启动计算机然后重试。4.8 错误WSL 2 要求对其内核组件进行更新如果 %SystemRoot%\system32\lxss\tools 文件夹中缺少 Linux 内核包会遇到此错误。 若要解决此问题请在安装说明的步骤 #4 中安装 Linux 内核更新 MSI 包。 可能会需要从添加或删除程序卸载 MSI然后重新安装。4.9 忘记WSL密码如果忘记了 Linux 分发版的密码,请打开 PowerShell并使用以下命令进入默认 WSL 分发版的根目录wsl -u root如果需要在非默认分发版中更新忘记的密码请使用命令wsl -d Debian -u root并将 Debian 替换为目标分发版的名称。在 PowerShell 内的根级别打开 WSL 发行版后可使用此命令更新密码passwd 其中 是 DISTRO 中帐户的用户名而你忘记了它的密码。系统将提示你输入新的 UNIX 密码然后确认该密码。 在被告知密码已成功更新后请使用以下命令在 PowerShell 内关闭 WSLexit五、Windows10 使用 Xming Xshell 远程显示 Linux 图形界面完整教程原理通过将远程Linux 服务器的图形渲染指令转发到 你的Windows 上运行的 X ServerXmingXshell 负责建立带 X11 转发的 SSH 隧道。5.1、工具准备XmingWindows X Server接收 Linux 图形输出XshellSSH 客户端开启 X11 转发注本方案不适合大窗口 3D 软件优先使用轻量程序对于网络差可以改用 VNC 方案替代 X11 转发另VcXsrv比 Xming 更稳定推荐替代 Xming5.2、启动 Xming我弄晚上直接运行 Xming.exe启动后任务栏右下角出现 Xming 图标。默认监听localhost:0.0重点不要修改注意也不要勾选 “No Access Control”安全起见保持默认。完成后 配置Xshell 会话关键打开 Xshell → 选中你的 Linux 会话 → 属性【连接】→【SSH】保持正常端口【隧道】→ 勾选【启用 X11 转发】:X 显示localhost:0.0和 Xming 匹配,确定重新连接服务器。很多人手动设置 export DISPLAYxxx开启 X11 转发后不需要手动设置 DISPLAYSSH 会自动下发环境变量。5.3、Linux 远端服务器配置必须做#安装 X11 转发依赖#Ubuntu/Debianaptupdateaptinstallxauth xorg#CentOS7 / Rocky / RHELyuminstallxauth xorg-x11-xauth#配置 sshd 允许 X11 转发vi/etc/ssh/sshd_config#取注释如下2项X11ForwardingyesX11UseLocalhostyes#完成systemctl restart sshd#验证重新通过 Xshell 登录服务器执行echo$DISPLAY#正常输出类似localhost:10.0#出现这个值代表 X11 转发通道建立成功#图形化测试Windows 桌面弹出窗口 成功xclock# 或者xeyes# Ubuntu测试gedit#root用户无法弹窗这是因为默认 ssh X11 cookie 只对普通用户生效xauth list# 复制输出内容然后sudo -ixauthadd粘贴刚才的内容5.4、VcXsrvVcXsrv 持续维护、支持 OpenGL、剪贴板兼容性更好Xming 早已停止更新容易出现复制粘贴失效、高 DPI 缩放异常。1下载安装 VcXsrv单击下载vcxsrv2打开开始菜单运行 XLaunchDisable access control必须勾选否则大概率认证拒绝)最后xshell选择 X DISPLAY填写localhost:0.0。#StartVcXsrv.bat编码 ANSI;多窗口剪贴板互通-wgl OpenGL 支持-ac Disable access control关闭访问控制dpi高 DPI 屏幕窗口字体过小 dpi 自动适配echooffC:\Program Files\VcXsrv\vcxsrv.exe:0-multiwindow-clipboard-wgl-ac-terminate-dpi auto