【dev on wsl2】wsl2 with vscode简单配置

2023-10-27

wsl2 with vscode简单配置

正文开始@Assassin

1. 安装wsl2:

1.1 安装方式选择:

安装wsl2一般来说有三种方式:

  • cmd/powershell 命令行安装(建议管理员模式)
  • microsoft store 安装
  • microsoft 官网安装

ps: win + R调出运行框,输入"winver" 查看 Windows 版本及内部版本号

① 命令行安装wsl的先决条件是必须运行 Windows 10 版本 2004 及更高版本(内部版本 19041 及更高版本)或 Windows 11。 命令行安装默认会装在C盘。

② Microsoft Store最恶心的就是可能会打不开,我的就打不开-_-|,目前还没找到合适的解决方法。微软商店安装默认会安装到C盘。

③ Microsoft官网下载,目前来说,这是唯一不会出差错的方法,不过下载速度太慢了,我挂了代理也还是很慢,速度不到500KB/s。可以自行选择安装的路径。

由于我的电脑版本满足命令行安装的最低要求,故采用命令行的方式进行安装:
在这里插入图片描述

1.2 命令行安装:

环境准备:

以管理员权限启动powershell/cmd,然后输入以下命令启用虚拟机平台:

Enable-WindowsOptionalFeature -Online -FeatureName VirtualMachinePlatform

在这里插入图片描述

以管理员权限启动powershell/cmd,然后输入以下命令启用linux子系统功能:

Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux

在这里插入图片描述
wsl --install默认会安装wsl1,使用以下命令设置wsl2为默认下载版本:

wsl --set-default-version 2

ps:以下命令也是同样的功能:

# 启用 WSL
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
# 启用 VMP
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
# wsl --install默认会安装wsl1,使用以下命令设置wsl2为默认下载版本
wsl --set-default-version 2

若出现报错,下载wsl2内核更新包并安装。


更为直观便捷的方法是直接在"windows功能"中启用标记的功能,也是同样的效果:
在这里插入图片描述
三种方式任选其一即可。


用管理员模式打开 cmd/powershell,使用命令行进行wsl2的安装:

wsl --install

执行上述命令会默认下载ubuntu,若想指定版本安装,可以执行如下命令:

wsl --install -d <DistroName>

查看当前linux可用发行版列表:

wsl --list --online

在这里插入图片描述
以下载Debian作为演示:
在这里插入图片描述
这中间有个小插曲,好像并没有下载成功,wsl -l -v列出来的信息没有debian,使用wsl也会报错,提示未在BIOS中启用虚拟化:
在这里插入图片描述
google了一番之后,可以初步确定是我本机上使用了VMware虚拟机的缘故,之前使用docker的时候也是因为Hyper-v不能打开虚拟机,因为Vmware自带虚拟化内核,二者会产生一定的冲突,于是我就把Hyper-v关闭了。

解决方法如下:

开启Hyper-v : 在cmd/powershell中执行以下命令行(建议管理员模式):

bcdedit /set hypervisorlaunchtype auto

切换之后reboot重启电脑应该就ok了

ps:
关闭Hyper-v : 在cmd/powershell中执行以下命令行(建议管理员模式):

bcdedit /set hypervisorlaunchtype off

若要使用虚拟机需要关闭Hyper-v。


开启了Hyper-v之后就能正常启动Debian了,完事儿
在这里插入图片描述
正常使用Debian操作系统:
在这里插入图片描述
更改wsl版本:
要是安装了wsl1,可以通过wsl --set-version更换发行版的版本:

wsl --set-version <distribution name> <versionNumber>

distribution name为发行版的名称,versionNumber为版本。
比如如果下载了Ubuntu-20.04 wsl1,可以执行以下命令更改到wsl2:

wsl --set-version Ubuntu-20.04 2

设置默认linux发行版:
我主机上默认的linux发行版是带 * 的Ubuntu-20.04:
在这里插入图片描述
将默认linux发行版改为刚刚下载的Debian:

wsl --set-default Debian
#可简写为 wsl -s <Distribution Name>

在这里插入图片描述

2. 搭配vscode:

2.1 新建用户&&远程连接vscode

下面使用自己熟悉的ubuntu来进行演示。

一般来说,操作linux平台都不直接使用root用户,所以这里演示添加普通用户的操作。

添加普通用户:
wsl2中添加普通用户的操作与真正的linux环境还是有些不一样的,自己遇到了一些坑,比如我要新建一个名为xiaoming的普通用户:

root@KevinGeorge:~# useradd xiaoming
root@KevinGeorge:~# passwd xiaoming

新建了xiaoming用户,并为其设置了密码,但是登录不成功,提示no such file or directory
在这里插入图片描述
ls -l查看 /home路径,发现家目录中并没有xiaoming用户:
在这里插入图片描述
于是使用man手册查看了一下useradd的选项,发现需要加上-m选项才能创建家目录,有点离谱:
在这里插入图片描述
彻底删除之前创建的xiaoming用户:

root@KevinGeorge:~# userdel -r xiaoming

在这里插入图片描述
带上-m选项创建xiaoming用户:
在这里插入图片描述
切换到xiaoming用户后发现没有用户的彩色控制台提示符(Color Prompt),原因应该是使用的shell是/bin/sh,而我们一般使用的shell是/bin/bash
在这里插入图片描述
还是得推倒重来,彻底删除xiaoming用户,重新带上-s /bin/bash指定一下bash:

root@KevinGeorge:~# useradd -m xiaoming -s /bin/bash
root@KevinGeorge:~# passwd xiaoming

再次切换就有了彩色提示符:
在这里插入图片描述
自此,可以使用vscode远程连接wsl2的普通用户了。
打开vscode,安装对应的remote远程连接插件:
在这里插入图片描述
在terminal中输入code .打开vscode:
在这里插入图片描述
远程连接到我的ubuntu20-04:
在这里插入图片描述
如果输入code .出现如下报错:原因是曾经用root用户使用过 code .命令,所以普通用户再次使用就会报 Permission denied
参考自xx大佬
在这里插入图片描述
可以执行命令删除该文件:

xiaoming@KevinGeorge:~$ sudo rm -f /tmp/remote-wsl-loc.txt

使用多用户进行操作时,还可能出现如下错误:提示 code not found
在这里插入图片描述
测试了一下,code应该只能由wsl的默认登录用户使用,现在的默认登录用户是xiaoming,所以NingHai用户无法正常使用,使用如下指令可以修改wsl的默认登录用户:

ubuntu2004 config --default-user NingHai

默认登录用户切换到NingHai,启动ubuntu自动登录NingHai用户,此时可以正常使用code .
在这里插入图片描述


2.2 配置C++开发环境:

在ubuntu上安装C/C++开发环境包:

下载安装包含大部分开发所需组件的 build-essential 组件包:

首先更新一下软件库:

xiaoming@KevinGeorge:~/cpp_code$ sudo apt update

在这里插入图片描述
安装C/C++编译调试工具集合:

sudo apt install build-essential

在这里插入图片描述
验证gcc/g++/gdb/make是否安装成功:
在这里插入图片描述
一些便于C++开发的插件也可以自行下载一下,基本上到这里就能够有一个很好的linux c++编辑+编译环境了:
在这里插入图片描述
至于vscode中使用ctrl+f5进行的编译和调试之类的操作,个人觉得没有必要去配置(.vscode文件夹中的tasks.json,launch.json,settings.json,c_cpp_properties.json),直接熟练使用linux中的命令行编译就很ok了,也比较贴合实际的linux开发环境。实在想有一个很好的调试环境建议visual studio,gdb也是很好的(如果会用的话)。

over~

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【dev on wsl2】wsl2 with vscode简单配置 的相关文章

  • 如何制作和应用SVN补丁?

    我想制作一个SVN类型的补丁文件httpd conf这样我就可以轻松地将其应用到其他主机上 If I do cd root diff Naur etc httpd conf httpd conf original etc httpd con
  • 在 Linux 中禁用历史记录 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 要在 Linux 环境中禁用历史记录 我执行了以下命令 export HISTFILESIZE 0 export HISTSIZE 0 u
  • 在Linux上编译C# + WPF以便在Windows上运行

    我有一个 C 应用程序 其中某些部分是使用 WPF 编写的 Mono 不支持 可以在 Linux 上编译这个应用程序吗 最终 该应用程序将在 Windows 上运行 但它是更大框架的一部分 并且我们的整个构建过程在 Linux 上运行 因此
  • 为什么我收到的数据包数据大小大于mss?

    我在两台 PC 上使用 ifconfig ethX mtu 300 修改了 MTU 并使用 netperf 测试网络 我用 WireShark 嗅探了 SYN 数据包中的 MSS 260 但我得到了一些大于 260 的数据包 为什么 嗅探器
  • 如何修复“iptables:没有该名称的链/目标/匹配”?

    我在我的 Linux 嵌入式系统上构建并安装了 iptables 如果我列出所有规则 则一切正常 iptables list Chain INPUT policy ACCEPT target prot opt source destinat
  • 拆分字符串以仅获取前 5 个字符

    我想去那个地点 var log src ap kernelmodule 10 001 100 但看起来我的代码必须处理 ap kernelmodule 10 002 100 ap kernelmodule 10 003 101 等 我想使用
  • 何时使用 pthread 条件变量?

    线程问题 看来 只有在其他线程调用 pthread cond notify 之前调用 pthread cond wait 时 条件变量才起作用 如果在等待之前发生通知 那么等待将被卡住 我的问题是 什么时候应该使用条件变量 调度程序可以抢占
  • 在 Linux 上更快地分叉大型进程?

    在现代 Linux 上达到与 Linux 相同效果的最快 最好的方法是什么 fork execve combo 从一个大的过程 我的问题是进程分叉大约 500MByte 大 并且一个简单的基准测试只能从进程中实现约 50 个分叉 秒 比较最
  • Android:ANT 构建失败,并显示 google-play-services-lib:“解析为没有项目的 project.properties 文件的路径”

    我正在尝试使用 ANT 构建我的应用程序 但在包含 google play services lib 库项目后 我惨遭失败 Step 1 我在 project properties 文件中设置了对库项目的引用 android library
  • 跟踪 Linux 程序中活跃使用的内存

    我想跟踪各种程序在特定状态下接触了多少内存 例如 假设我有一个图形程序 最小化时 它可能会使用更少的内存 因为它不会重新绘制窗口 这需要读取图像和字体并执行大量库函数 这些对象仍然可以在内存中访问 但实际上并没有被使用 类似的工具top它们
  • 如何检测并找出程序是否陷入死锁?

    这是一道面试题 如何检测并确定程序是否陷入死锁 是否有一些工具可用于在 Linux Unix 系统上执行此操作 我的想法 如果程序没有任何进展并且其状态为运行 则为死锁 但是 其他原因也可能导致此问题 开源工具有valgrind halgr
  • 通过特定分隔符删除字符串

    我的文件中有几列 其中第二列有 分隔符 我想删除第二列中的第一个 第三个和第四个字符串 并将第二个字符串留在该列中 但我有正常的分隔符空间 所以我不知道 input 22 16050075 A G 16050075 A G 22 16050
  • 如何使用 bash 锁定文件

    我有一个任务从远程服务器同步目录 rsync av email protected cdn cgi l email protection srv data srv data 为了使其定期运行并避免脚本 reEnter 问题 我使用 rsyn
  • 仅打印“docker-container ls -la”输出中的“Names”列

    发出时docker container ls la命令 输出如下所示 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES a67f0c2b1769 busybox tail f dev
  • 如何禁用 GNOME 桌面屏幕锁定? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 如何阻止 GNOME 桌面在几分钟空闲时间后锁定屏幕 我已经尝试过官方手册了在红帽 https access redhat com doc
  • Jenkins中找不到环境变量

    我想在詹金斯中设置很多变量 我试过把它们放进去 bashrc bash profile and profile of the jenkins用户 但 Jenkins 在构建发生时找不到它们 唯一有效的方法是将所有环境变量放入Jenkinsf
  • 无法从 jenkins 作为后台进程运行 nohup 命令

    更新 根据下面的讨论 我编辑了我的答案以获得更准确的描述 我正在尝试从詹金斯运行 nohup 命令 完整的命令是 nohup java jar home jar server process 0 35 jar prod gt gt var
  • sendfile64 只复制约2GB

    我需要使用 sendfile64 复制大约 16GB 的文件 到目前为止我所取得的成就是 include
  • 所有平台上的java

    如果您想用 java 为 Windows Mac 和 Linux 编写桌面应用程序 那么所有这些代码都相同吗 您只需更改 GUI 即可使 Windows 应用程序更像 Windows 等等 如果不深入细节 它是如何工作的 Java 的卖点之
  • 两种情况或 if 哪个更快? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我必须制作一个 非常 轻的脚本 它将接受用户的选项并调用脚本中的函数来执行一些任务 现在我可以使用 IF 和 CASE 选项 但我想知道两

随机推荐

  • 4.mybatis 高级结果查询

    商品订单模型 一个用户可以下n个订单 一个订单只能属于一个用户 一个订单可以有多个订单详情 订单和订单详情是一对多的关系 一个订单中可以有多个商品 一个商品也可以属于多个订单 订单和商品多对多的关系 关联查询几个需要注意的细节 1 超过三个
  • 计算机管理中的用户和组里的名称和全名有什么不同

    用户名是登录使用的 全名就是一个注释 组决定了用户的权限 计算机上 System 组的权限最高 用户中 Administrators 组的权限最高 Users 组居中 Guests 组最低 根据权限的逐渐降低 用户可访问的文件 可更改的设置
  • JAVA项目:后台管理页面——显示数据库中所有信息+删除和编辑(MySQL)

    此DEMO包含以下功能 后台管理界面 删除 修改 显示数据库里所有数据 修改编辑界面 表格检验 修改数据库里的值 后台管理界面 头像为默认头像 视频暂未上传 backstageUI jsp
  • get传递数组参数

    get请求时传递的参数有一个是数组时 要做序列化处理 下面是不需要用插件就可以解决的方法 axios有一个方法 paramsSerializer 可以处理params的数组 下面举例 vue文件里请求时传的是三个参数 methods 发送请
  • MotionBuilder调整骨骼大小尺寸

    需要先选中骨骼太能调整尺寸大小
  • 交通事故致因分析

    1 挖掘背景 随着时代的发展 我们的出行变的越来越便利的同时 也带来的越发严重的交通安全事故 我国的经济高速发展 全国汽车保有量 交通道路 人口等都在不断的增加 同时道路交通安全事故也进入高发期 分析事故发生的原因 找到事故发生的内在规律
  • 幂等的这几个问题没有考虑到,你恐怕是在写Bug吧!

    免费视频福利推荐 2T免费学习视频 内含精选高频面试题 SSM Spring全家桶 微服务 MySQL MyCat 集群 分布式 高并发 中间件 Linux 网络 多线程 Jenkins Nexus Docker ELK等等免费学习视频 持
  • Python 操作MySql数据库(封装、优雅)

    Python 记录操作MySql数据库 封装 优雅 前言 封装代码 进行测试 结果展示 前言 学了pymysql第三方库 pip install pymysql 来操作MySql数据库后 浅记一下对MySql进行 关于我的MySql之优雅封
  • ValueError: shape mismatch: objects cannot be broadcast to a single shape 画条形图bar报错

    ValueError shape mismatch objects cannot be broadcast to a single shape plt bar x y 可能是条形图的x和y的数组长度不同造成的 需要修改数据 保持一致
  • 前端手机号码校验

    vue前端手机号码校验
  • zxing设置条码两边空白(EncodeHintType.MARGIN)无效的分析

    最新项目需要使用到zxing生成条码 条码格式为CODE128 CODE128的规则可参考 点击打开链接 当调用 MultiFormatWriter encode str BarcodeFormat CODE 128 mwidth mHei
  • 对CocosCreatorr的Draw call的理解

    Draw call比较直观的描述应该是 在CPU不改变渲染数据的情况下 openGL的一次渲染 opengGL的一次渲染 CPU调用图形绘制接口来使GPU执行渲染操作 渲染流程是CPU和GPU并行工作的过程 CPU和GPU之间通过一系列的缓
  • 小米便签开源项目本地环境搭建

    基于Android Studio 和Gradle 的小米便签配置和安装 一 Android Studio的中文社区 官网 下载最新的Android Studio 点击开始传送http www android studio org 可参考下文
  • 让异步的多个ajax顺序执行的方法

    就是说等第一个ajax传回来后再执行第二个ajax跟其他的js代码 ajax type POST url http xxx xxx aspx data success function msg 试了几次 除了在 那里 执行接下来的代码外 要
  • CSDN 编程竞赛第15期题解

    CSDN 编程竞赛第15期题解 1 求并集 由小到大输出两个单向有序链表的并集 如链表 A 1 gt 2 gt 5 gt 7 链表 B 3 gt 5 gt 7 gt 8 输出 1 gt 2 gt 3 gt 5 gt 7 gt 8 inclu
  • day01Git

    1 Git介绍 1 1版本控制 理解 无论是代码编写 还是文档编写 我们都会遇到对文档内容反复修改的情况 1 2开发中存在的问题 理解 程序员小明负责的模块就要完成了 就在即将提交发布之前的一瞬间 电脑突然蓝屏 硬盘光荣下岗 几个月来的努力
  • 【前端】Vue项目:旅游App-(16)home+hooks:窗口滚动到底部动态加载新数据、抽取到hook

    文章目录 目标 过程与代码 监听窗口的滚动 窗口上事件监听的移除 封装到一个hook 回调函数法 不推荐 返回值法 推荐 效果 总代码 修改或添加的文件 hooks的useScroll home content 参考 本项目博客总结 前端
  • C++QT入门

    C QT 文章目录 C QT 1 QT概述 1 1 什么是QT 1 2 QT的发展史 1 3 支持的平台 1 4 QT版本 1 5 Qt 的下载与安装 1 6 QT的优点 1 7 成功案例 2 创建QT项目 2 1 使用向导创建 2 2 手
  • vue2尚品汇学到得新知识

    vue滚动条 写到router路由中 回到最顶部 scrollBehavior to from savedPosition return y 0 2 引入一个模块后 先在路由router中 import然后再在注册路由写信息 path后看看
  • 【dev on wsl2】wsl2 with vscode简单配置

    wsl2 with vscode简单配置 正文开始 Assassin 目录 wsl2 with vscode简单配置 1 安装wsl2 1 1 安装方式选择 1 2 命令行安装 2 搭配vscode 2 1 新建用户 远程连接vscode