WSL中的远程开发

前言

一开始我的电脑之前安装过wsl和Ubuntu18.04子系统,在vscode上没弄成功,今天痛下决心重新尝试,关于vscode与wsl这里先放上原理框架图
在这里插入图片描述

VSCode安装Remote-WSL扩展

Remote - WSL 扩展使你能够在 Windows 子系统 Linux (WSL) 中运行 Visual Studio Code
在这里插入图片描述
安装 Remote - WSL 扩展后,您将在最左侧看到一个新的状态栏项目
在这里插入图片描述
远程状态栏项目可以快速显示 VS Code 正在运行的上下文(本地或远程),单击该项目将显示远程 - WSL 命令。
在这里插入图片描述

安装wsl

在 Windows 搜索栏中,键入“功能”以打开“打开和关闭 Windows 功能”对话框。向下滚动并检查适用于 Linux 的 Windows 子系统。
在这里插入图片描述
由于我之前安装过一次,这里不再安装。但是在cmd中运行wsl找不到指定路径,于是使用

wsl.exe --list --all

命令查看,这是我之前已经安装过wsl和Ubuntu子系统,但是在vscode中还是无法使用,接下来准备重新卸载子系统重装

使用

wls.exe --unregister Ubuntu-18.04

命令卸载ubuntu18.04,如下图
在这里插入图片描述
重新运行wsl
在这里插入图片描述

安装Ubuntu子系统

然后在Windows11(我的电脑跟更新到了11)自带的Microsoft Store里下载安装Ubuntu18.04后打开报错,如图二(非本主机,网图)
在这里插入图片描述
(图片来自网络,自己的忘记截屏)
在这里插入图片描述
不报错时应该如下图
在这里插入图片描述
造成该问题的原因是WSL版本由原来的WSL1升级到WSL2后,内核没有升级,前往微软WSL官网下载安装适用于 x64 计算机的最新 WSL2 Linux 内核更新包即可。
适用于 x64 计算机的 WSL2 Linux 内核更新包
在这里插入图片描述
下载运行后又报错,如下
在这里插入图片描述
原因如下
在这里插入图片描述
我们需要先启用“适用于 Linux 的 Windows 子系统”可选功能,然后才能在 Windows 上安装 Linux 分发。

以管理员身份打开 PowerShell(“开始”菜单 >“PowerShell”> 单击右键 >“以管理员身份运行”),然后输入以下命令

dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart

在这里插入图片描述
然后启用虚拟机功能

dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart

在这里插入图片描述
重新启动计算机,以完成 WSL 安装并更新到 WSL 2,重启后再打开Ubuntu18.04即可正常运行
在这里插入图片描述
打开 PowerShell,然后在安装新的 Linux 发行版时运行以下命令,将 WSL 2 设置为默认版本:

wsl --set-default-version 2

注意在PowerShell里运行
在这里插入图片描述
关于其他报错
可以参考:排查适用于 Linux 的 Windows 子系统问题
安装步骤可以参考:旧版 WSL 的手动安装步骤
这时再次在cmd执行wsl
在这里插入图片描述
到此安装结束

在WSL中运行vsocde

在 WSL 终端中,新建helloWorld文件夹,然后输入命令

code .

以启动 Visual Studio Code。该’.'参数告诉 VS Code 打开当前文件夹(如果此命令不起作用,您可能需要重新启动终端,或者您在安装时可能没有将 VS Code 添加到您的路径中。)
在这里插入图片描述
您将看到的第一件事是关于“安装 VS Code 服务器”的消息(c7d83e57… 数字是与您刚刚安装的客户端工具匹配的 VS Code 服务器版本)。VS Code 正在 Linux 端安装一个小型服务器,然后桌面 VS Code 将与之对话。然后,该服务器将在 WSL 中安装和托管扩展,以便它们在 WSL 中安装的工具和框架的上下文中运行。换句话说,您的语言扩展将针对 WSL 中安装的工具和框架运行,而不是针对 Windows 端安装的工具和框架,因为它应该为正确的开发体验。

接下来发生的是 VS Code 将启动并打开helloWorld文件夹。您可能会看到一条快速通知,告诉您 VS Code 正在连接到 WSL,并且可能会提示您允许访问基于 Node.js 的服务器。
在这里插入图片描述
连接完成后,在状态栏的左下角,可以看到已连接到WSL: Ubuntu
在这里插入图片描述
在目录下新建main.c测试文件
在这里插入图片描述
现在当我将鼠标悬停在文件main.c上时,将获得正确的 Linux 路径。
在这里插入图片描述
此时打开终端配置文件settings.json,发现系统自动帮我们添加了一行。此时默认终端为Ubuntu18.04子系统的bash
在这里插入图片描述
但是如果我还想使用wsl中的其他终端,我们可以修改settings.json文件,可以参考:配置VScode终端

首先在wsl中查看bash的路径
在这里插入图片描述
修改settings.json文件,如下,保存后会发现箭头所指向的bash已经按照我们修改的变换图标和颜色
在这里插入图片描述
修改后的文件代码

{
    "KeilAssistant.MDK.Uv4Path": "E:\\keil\\??\\UV4\\UV4.exe",
    "C_Cpp.updateChannel": "Insiders",
    "files.autoGuessEncoding": true,
    "http.proxySupport": "off",
    "workbench.iconTheme": "material-icon-theme",
    "cmake.configureOnOpen": true,
    "workbench.editorAssociations": {
        "*.ipynb": "jupyter-notebook"
    },
    "notebook.cellToolbarLocation": {
        "default": "right",
        "jupyter-notebook": "left"
    },
    //"terminal.integrated.shell.windows": "C:\\WINDOWS\\System32\\cmd.exe",
    //"terminal.integrated.defaultProfile.windows": "Command Prompt",
    //"terminal.integrated.defaultProfile.windows": "PowerShell",

        "terminal.integrated.profiles.windows": {
            "PowerShell": {
              "source": "PowerShell",
              //"path": "C:\\WINDOWS\\System32\\WindowsPowerShell\\v1.0\\powershell.exe",
              "color": "terminal.ansiBlue"
            },

            "gitBash": {
                "path": "E:\\Git\\Git\\bin\\bash.exe",
                "color": "terminal.ansiYellow"
            },

            "cmd": {
                "path": "C:\\WINDOWS\\System32\\cmd.exe",
                "color": "terminal.ansiRed",
                "icon": "account",
                //"workbench.action.terminal.changeColor":"terminal.ansiYellow"
            }
          },

        "terminal.integrated.profiles.linux": {
            "Ubuntu-bash": {
                "path": "/bin/bash",
                "color": "terminal.ansiGreen",
                "icon": "thumbsup",
                //"workbench.action.terminal.changeColor":"terminal.ansiYellow"
            }  
          },

        "terminal.integrated.defaultProfile.windows": "PowerShell",
        "terminal.integrated.tabs.location": "right",
        "terminal.integrated.defaultProfile.linux": "Ubuntu-bash"
        
}

如果要在 WSL 中打开另一个文件夹,请打开“文件”菜单并选择“打开文件夹”。您将获得适用于 Linux 文件系统而非 Windows 文件系统的最小文件和文件夹导航器。
在这里插入图片描述
如果您想切换回 Windows,请选择Show Local选项,您将获得标准的 Windows File Open 对话框

结束WSL连接

可以在 WSL 中结束会话,然后使用File > Close Remote Connection返回到本地运行 VS Code

更改wsl安装位置

因为wsl默认是安装在C盘下,我这里目录为

C:\Users\xuyuan\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu18.04onWindows_79rhkp1fndgsc\LocalState

在这里插入图片描述
如果想更换wsl的安装目录,首先需要下载一个工具:LxRunOffline,下载路径为:LxRunOffline下载链接,下载文件LxRunOffline-vxxxx.zip 然后解压到某个一个目录中,之后我们需要设置环境变量,使用这个东西去移动我们的子系统,所以不可以删除这个东西,注意不要下源代码,下载编译过后发布的
在这里插入图片描述
在这里插入图片描述
下载后右击”此电脑“->属性->高级系统设置,在高级面板中选择环境变量。选择系统变量中的Path变量,点击编辑按钮。点击新建,并把刚刚LxRunOffline的解压地址粘贴到新的项目中。切记这个目录里必须包含LxRunOffline.exe文件
在这里插入图片描述
然后重启电脑,打开命令行工具,输入LxRunOffline,如果显示下面的提示证明已经安装成功
在这里插入图片描述
打开命令行,输入LxRunOffline list 查看我们的子系统版本,我安装的是ubuntu18.04,例如显示这样的界面
在这里插入图片描述
记下我们的版本号,然后输入LxRunOffline move -n {version} -d {dir}。在这里{version}填写我们刚才查到的版本号,{dir}改为我们需要移动到的目录,例如我要把Ubuntu-18.04移动到我新建的文件夹E:\wsl\WinLinux下,那么我需要输入

LxRunOffline move -n Ubuntu-18.04 -d E:\wsl\WinLinux

执行完报错,普通用户管理员都不行
在这里插入图片描述
于是我不得不去下载另一版本,按照前面一样,设置环境变量,重启电脑还是不行
在这里插入图片描述
查了半天发现wsl本身就有备份还原的功能,这里我们使用到export 、unregister和import几个选项就可以实现迁移

1、终止正在运行的分发或虚拟机

wsl --shutdown

2、对需要迁移的分发或虚拟机导出(我安装的版本是Ubuntu-18.04)

wsl --export Ubuntu-18.04 E:\wsl\wsl-Ubuntu-18.04

3、卸载分发版或虚拟机(如果是要重装系统或换机器安装,这一步可以省略,但是要将上一步导出的文件保存好)

wsl --unregister Ubuntu-18.04

4、导入新的分发版或虚拟机,最后的选项“–version 2”可以省略,则采用默认版本导入。如果导出的是WSL2,而这里设置的是“–version 1”,还可以将其版本降为WSL1

wsl --import Ubuntu-18.04 E:\wsl\WinLinux E:\wsl\wsl-Ubuntu-18.04 --version 2

这样就实现了子系统的迁移 ,注意文件存放的路径一定不能错
在这里插入图片描述
迁移后如下图
在这里插入图片描述
在这里插入图片描述
此时再去之前默认C盘安装目录下查看已经为空
在这里插入图片描述

总结

注意:VM的版本低于VMware Workstation 15.5.5,在使用WSL2后,将无法继续使用虚拟机
在这里插入图片描述
在这里插入图片描述
若想继续使用虚拟机,需要禁用 Hyper-V,禁用后将不能再使用WSL2
在这里插入图片描述

更多操作请阅读:WSL中的远程开发

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一只嵌入式爱好者

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值