目标:
- 避免 Windows 与 Linux 环境混用导致的工具冲突(如 node/npm、python、git 等),实现更干净、可控的开发环境。
- 修改 WSL2 网络模式为 Mirrored(镜像模式)实现使用 Windows 代理(检测到 localhost 代理配置,但未镜像到 WSL。NAT 模式下的 WSL 不支持 localhost 代理)。
- 在 Windows 11 上安装并使用 WSL2,掌握常用 Linux 命令,并用 VS Code 做本地(WSL)和远程(SSH)开发。
一、关于WSL的背景说明?
一些老嵌入式朋友可能会有疑问,欸?啥是WSL,为什么要用,凭什么不是虚拟机,有这样或者是那样的疑问。这里就做一些笔者自己默默跟WSL爆破的一些记录,供大伙参考。
WSL是Windows Subsystem for Linux这四个单词的缩写。微软的意图很简单:让你在 Windows 里运行真正的 Linux。对于嵌入式开发 、脚本、构建工具和很多开源工具来说,Linux 环境显得友好的多。您不必跟一堆开发环境配置上的障碍做斗争。
这个时候,就有朋友说,为什么不VMWare,VirtualBox(嗯,这个基本噶了)呢。答案是这种虚拟机的方式存在一定的性能损耗,而且最大的麻烦在于稳定的互操作是需要折腾的。笔者就记得,VMWare版本一改,一些老办法就使不得了。最后就是VMWare上Ubuntu等等经常挂掉。稳定性实在是令人叹气。
当然,一些活要是跟显卡打交道,VMWare一类的事情那就是别想了,这类虚拟机似乎是看不到显卡的。
WSL的出现让双系统,传统虚拟机的方式可以从必选降低为备选。从互操作性上,现代WSL显然远远比VMWare等方案强得多。我们不费吹灰之力的就能在WSL下的Linux访问到Windows上的文件。比如说,你要摸到D盘上的PDF或者是C语言文件。我们直接就能
cat/mnt/c/Program Files/a_c_file.c完全不用做其他操作,开箱即用。甚至可以直接调用显卡等等。
当然,USB设备访问,需要使用usbipd等开源项目加持,狗屎微软一直不入正,只能说没招了。需要的朋友可以单独寻找搜索引擎了解usbipd项目~
二、准备工作(你需要做的事)
WSL不错,咋开始呢?好,开始你美好的WSL时光需要这些实在是最基本的条件了:
- Windows 11(推荐最新版)。
- 拥有管理员权限的用户账号(安装时需要管理员身份运行 PowerShell)。
- 稳定的网络(安装过程中需要下载文件)。
三、在 Windows 11 上安装并使用 WSL2
**PS:一些老旧的教程会让你开Hyper-V虚拟化,笔者查证了一下,现在不需要了,现在凡是说要开启Hyper-V的,都是错的,启用“虚拟机平台”就足够了。**但是,WSL的安装自动会拉起需要的功能,您不必担心。按照下面的内容做就好
3.1 WSL2 的安装
注意是以管理员身份,您启动Windows Powershell,(右键“开始”→Windows Terminal (Admin)或PowerShell (Admin))。在管理员 PowerShell 里输入:
wsl--install这条命令会自动启用所需 Windows 功能(这就包含了启用“虚拟机平台”)、安装 WSL2,并提示重启。
2.关闭 WSL在 PowerShell 里执行:
wsl--shutdown到这里,您急需要选择一个发行版,现在还没有Linux发行版,比如说UBuntu,或者是Arch Linux给您使用。
3.2 发行版本的安装
选择自己的发行版咯!您输入这个指令,在网络通畅(不通畅那就记得挂代理。挂代理是一个危险的教程,这里咱们就不参合了~)
wsl--list--online- 选择想要安装的发行版本,以下以
Ubuntu-26.04为例
wsl.exe--install Ubuntu-26.04- 关闭 WSL在 PowerShell 里执行:
wsl--shutdown- 重新进入 WSL直接输入:
wslOver,您可以开始美美使用了。
3.3 检查与常用管理命令
之后WSL将会陪伴您度过每一天,所以,稍微会一些WSL的指令是不赖的,上面已经给出了WSL的安装,和直接关掉的指令。下面给出一些常见的其他指令
列出已安装的 Linux 发行版并查看版本(在PowerShell或Windows Terminal):
wsl-l-v如果需要把某个发行版设置为默认(例如 Ubuntu-26.04):
wsl--set-defaultUbuntu-26.04将现有发行版切换到 WSL2(如果不是):
wsl--set-versionUbuntu-26.04 2现在进行 WSL 的安装时,默认发行版本为 WSL2。当然,如果您的操作系统非常老旧,比如说是Windows 10的早期的一个版本,那需要注意一下。
进一步确认 WSL 组件版本:
wsl--version出现类似于下图的内容
wsl --version用于查看 WSL 组件和内核版本,不能单独判断某个发行版使用的是 WSL 1 还是 WSL 2。请继续执行:
wsl-l-v在输出的VERSION列查看目标发行版;显示2才表示该发行版使用 WSL2。
wsl--terminate XXX# XXX是咱们的WSL发行版的名称比如说,我现在需要关掉正在运行的RK3506,那么
wsl--terminate RK3506就能在不干扰其他发行版运行的情况下安全停掉RK3506这个发行版。
四、WSL2 隔离 Windows PATH
孩子们,WSL的互操作性方便其实也有大雷,那就是有时候我们的shell会找上我们Windows上的东西,类似:
/mnt/c/Windows/System32 /mnt/c/Program Files/nodejs也是会被找上的。意味着您刚安装的nodejs,或者是gcc编译器,很有可能找到了Windows那边去,最后特性不支持,配置解析混乱,直接导致项目运行崩溃。经典的就是:
- Node / npm / pnpm 版本混乱(优先命中 Windows,最后给您爆出来一大堆匪夷所思的错误,排查很有可能会浪费您不少的token 😃 )
- Python / pip 环境污染
- CLI 工具行为异常(路径优先级不可控)
- DevOps 工具(Docker / Git / CI)出现不可预期问题
对于工程化开发(尤其是全栈 + CI/CD 场景),强烈建议隔离。
4.1.1 配置/etc/wsl.conf
办法就是在您的发行版内部,补充:
❯cat/etc/wsl.conf[interop]appendWindowsPath=false# 补充的是这个,会有人告诉你关掉这个。。。额。。。见过腿痛砍腿嘛?就是这个道理4.1.2 重启 WSL
这一步,是必须的。WSL启动的时候才会重新读取整个新的配置。在 Windows PowerShell 中执行:
wsl--shutdown4.1.3 验证结果
重新打开 WSL:
echo$PATH预期结果应该只包含 Linux 路径,例如:
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin4.1.4 这么做会怎样呢?
| 能力 | 变化 |
|---|---|
| 调用 Windows 程序 | ❌ 不直接可用(如explorer.exe,非要调用,需要添加完整的路径,因为shell不再默认查找这些地方,我们本来希望如此!) |
| Node / Python 环境 | ✅ 完全隔离 |
| CLI 行为一致性 | ✅ 明显提升 |
| CI/CD 一致性 | ✅ 更接近 Linux 服务器 |
4.3 第一次进入 Linux(在 Ubuntu 终端里做)
在开始菜单打开刚安装的 Ubuntu 应用。登录后建议先更新系统包索引并升级:
sudoaptupdate&&sudoaptupgrade-yPS,如果您不太熟悉Linux,玩玩这些~
| 命令 | 作用 | 备注 |
|---|---|---|
pwd | 显示当前所在目录 | print working directory;在 WSL 里刚打开通常显示/home/你 |
ls -la | 列出当前目录下的文件(含隐藏文件) | -l显示详细信息,-a包含.开头的隐藏项 |
cd ~ | 回到用户家目录 | ~就是/home/你;只敲cd效果相同 |
mkdir myproj | 新建一个名为myproj的文件夹 | make directory;加-p可一次创建多级目录 |
cd myproj | 进入myproj文件夹 | 用cd ..返回上一层 |
touch hello.c | 新建一个空文件hello.c | 文件已存在时,只更新它的时间戳、不清空内容 |
nano hello.c | 用 nano 编辑器打开该文件 | 保存:Ctrl+O→Enter;退出:Ctrl+X |
cat hello.c | 显示该文件的全部内容 | 文件很长时会刷屏,长文件可用less hello.c |
安装常用工具(示例:git、编译工具、python):
sudoaptinstallgitbuild-essential python3 python3-pip-y小提示:Windows 的 C: 驱动器在 WSL 里路径是 /mnt/c,例如 C:\Users\你 在 WSL 为 /mnt/c/Users/你。为了更好性能,建议把代码放在 WSL 的家目录(~)里。
五、修改配置文件设置全局网络模式为 Mirrored
您开发的时候,想必都会开启网络代理访问Github,对吧。简单的说:当在 Windows 上运行了代理软件之后,其会在本地开启相关的代理端口,所有流量都会经过此端口转发,从而实现网络代理。而在 WSL2 中则可以手动设置代理地址和端口,从而实现 WSL2 使用 Windows 的代理。
exporthttp_proxy="http://<Windows_IP>:<代理端口>"exporthttps_proxy="http://<Windows_IP>:<代理端口>"但是,随着 WSL2 的更新,推出了Mirrored 网络模式,它提供了更好的网络兼容性和更简单的网络配置体验。此时如果本机运行着代理,那么此时启动 WSL2 会提示
wsl: 检测到 localhost 代理配置,但未镜像到 WSL。NAT 模式下的 WSL 不支持 localhost 代理。
本文将 WSL2 的网络模式修改为 Mirrored(镜像模式)实现在 WSL2 中使用 Windows 代理。
而 Mirrored 模式的会有以下优势:
- IP 地址共享:WSL2 实例与 Windows 主机共享相同的 IP 地址
- 简化网络配置:不再需要处理独立的虚拟网络接口
- 更好的兼容性:解决了企业网络、VPN 和防火墙的许多连接问题
- 端口无缝访问:本地端口自动映射,无需额外配置
5.1 配置.wslconfig
操作步骤:关闭所有 WSL 实例打开 PowerShell(管理员权限),执行:
wsl--shutdown创建 or 修改.wslconfig 文件在 Windows 用户目录(C:\Users\admin)下创建或编辑名为.wslconfig的文件,添加以下内容:
[wsl2] networkingMode=mirrored dnsTunneling=true firewall=true autoProxy=true [experimental] autoMemoryReclaim=gradual # 这样动态配置,但是笔者不确定会不会有问题,谨慎开启~来,如果好奇这些都是啥,简单的说说
[wsl2] networkingMode=mirrored # 启用镜像网络模式,WSL这个时候就好像您的Windows网络情况 dnsTunneling=true # 启用DNS隧道(解决代理网络下DNS问题) firewall=true # 共享Windows防火墙设置,安全! autoProxy=true # 自动继承Windows代理配置注意:##
.wslconfig不支持「行尾注释」
[experimental] autoMemoryReclaim=gradual # 可选:优化内存管理重启 WSL直接在 PowerShell 中输入wsl重新启动 Ubuntu。此时 WSL 将使用与 Windows 主机相同的网络环境,包括 代理网络 连接。
七、用 VS Code 在 WSL 里开发(推荐)和用 VS Code 远程 SSH
当你要连接远程开发板或服务器的时候,您需要这个!我也建议必须配置!
7.1 用 VS Code 在 WSL 里开发(推荐)
在 Windows 上安装 VS Code(从官网下载安装程序)。
链接在这里喔:Visual Studio Code
在 VS Code 中安装扩展:Remote - WSL,WSL(可以减少配置wsl的ssh这一步)
在 WSL 终端进入项目目录并执行:
cd~/myproj code.code . 会在 Windows 的 VS Code 中打开该目录,但 VS Code 会以“连接到 WSL”的方式运行扩展与终端。此时你的编辑器、终端和调试都在 Linux 环境下工作(工具依赖都安装在 WSL)。
优点:几乎不用配置,体验接近原生 Linux。
7.2 用 VS Code 远程 SSH(当你要连接远程开发板或服务器时)
当你未来需要连到学校/公司/家中的远程 Linux(比如树莓派、开发板、远程服务器),可以使用 VS Code 的 Remote - SSH 扩展。基本步骤:
在 Windows 上安装 VS Code 并安装 Remote - SSH 扩展。
生成 SSH 密钥(在 Windows 的 PowerShell 或 WSL 都s可以):
ssh-keygen-t ed25519-C"your_email@example.com"# 回车使用默认路径(会生成 ~/.ssh/id_ed25519 和 id_ed25519.pub)把公钥内容(~/.ssh/id_ed25519.pub)复制到远程主机的 ~/.ssh/authorized_keys(远程主机需要能 SSH 登录)。可以用 ssh-copy-id(在 WSL 下可用)或手动拷贝:
# 在 WSL 下:ssh-copy-id user@remote-host# 或者手动复制公钥内容到远端 ~/.ssh/authorized_keys在 VS Code 的 Remote-SSH 面板中配置主机(或者直接通过扩展的命令 Remote-SSH: Connect to Host…),连接成功后即可像本地一样编辑、运行和调试远程文件。
附录 A 参考链接
A.1 微软官方文档
| 主题 | 链接 |
|---|---|
| WSL 安装 | 安装 WSL |
| WSL 基本命令 | 基本命令 |
WSL 配置(.wslconfig/wsl.conf) | 配置 WSL |
| WSL 网络配置 | 配置 WSL 网络 |
A.2 第三方补充资料
| 主题 | 链接 |
|---|---|
| WSL 安装 | WSL 安装教程(CSDN) |
WSL 配置(.wslconfig/wsl.conf,含networkingMode=mirrored) | WSL 配置与镜像网络(CSDN) |
| WSL 网络与镜像模式 | WSL 网络与镜像模式 |