 + Linux + VS Code 远程开发 入门教程)
目标避免 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 环境显得友好的多。您不必跟一堆开发环境配置上的障碍做斗争。这个时候就有朋友说为什么不VMWareVirtualBox嗯这个基本噶了呢。答案是这种虚拟机的方式存在一定的性能损耗而且最大的麻烦在于稳定的互操作是需要折腾的。笔者就记得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 Terminalwsl-l-v如果需要把某个发行版设置为默认例如 Ubuntu-26.04wsl--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]appendWindowsPathfalse# 补充的是这个会有人告诉你关掉这个。。。额。。。见过腿痛砍腿嘛就是这个道理4.1.2 重启 WSL这一步是必须的。WSL启动的时候才会重新读取整个新的配置。在 Windows PowerShell 中执行wsl--shutdown4.1.3 验证结果重新打开 WSLecho$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 应用。登录后建议先更新系统包索引并升级sudoaptupdatesudoaptupgrade-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 编辑器打开该文件保存CtrlO→Enter退出CtrlXcat hello.c显示该文件的全部内容文件很长时会刷屏长文件可用less hello.c安装常用工具示例git、编译工具、pythonsudoaptinstallgitbuild-essential python3 python3-pip-y小提示Windows 的 C: 驱动器在 WSL 里路径是 /mnt/c例如 C:\Users\你 在 WSL 为 /mnt/c/Users/你。为了更好性能建议把代码放在 WSL 的家目录~里。五、修改配置文件设置全局网络模式为 Mirrored您开发的时候想必都会开启网络代理访问Github对吧。简单的说当在 Windows 上运行了代理软件之后其会在本地开启相关的代理端口所有流量都会经过此端口转发从而实现网络代理。而在 WSL2 中则可以手动设置代理地址和端口从而实现 WSL2 使用 Windows 的代理。exporthttp_proxyhttp://Windows_IP:代理端口exporthttps_proxyhttp://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] networkingModemirrored dnsTunnelingtrue firewalltrue autoProxytrue [experimental] autoMemoryReclaimgradual # 这样动态配置但是笔者不确定会不会有问题谨慎开启~来如果好奇这些都是啥简单的说说[wsl2] networkingModemirrored # 启用镜像网络模式WSL这个时候就好像您的Windows网络情况 dnsTunnelingtrue # 启用DNS隧道解决代理网络下DNS问题 firewalltrue # 共享Windows防火墙设置安全 autoProxytrue # 自动继承Windows代理配置注意:##.wslconfig不支持「行尾注释」[experimental] autoMemoryReclaimgradual # 可选优化内存管理重启 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-Cyour_emailexample.com# 回车使用默认路径会生成 ~/.ssh/id_ed25519 和 id_ed25519.pub把公钥内容~/.ssh/id_ed25519.pub复制到远程主机的 ~/.ssh/authorized_keys远程主机需要能 SSH 登录。可以用 ssh-copy-id在 WSL 下可用或手动拷贝# 在 WSL 下ssh-copy-id userremote-host# 或者手动复制公钥内容到远端 ~/.ssh/authorized_keys在 VS Code 的 Remote-SSH 面板中配置主机或者直接通过扩展的命令 Remote-SSH: Connect to Host…连接成功后即可像本地一样编辑、运行和调试远程文件。附录 A 参考链接A.1 微软官方文档主题链接WSL 安装安装 WSLWSL 基本命令基本命令WSL 配置.wslconfig/wsl.conf配置 WSLWSL 网络配置配置 WSL 网络A.2 第三方补充资料主题链接WSL 安装WSL 安装教程CSDNWSL 配置.wslconfig/wsl.conf含networkingModemirroredWSL 配置与镜像网络CSDNWSL 网络与镜像模式WSL 网络与镜像模式