2121 年俺 Windows 快乐编程的正确姿势

2021-05-19 22:21:08 +08:00
 inhzus

TLDR:hyper-v + virtual switch + Windows terminal ssh + x410

由于楼主日常开发 C++ 服务端,对 linux 环境强需求。读书时电脑只安装 arch Linux 非常方便,工作后在公司 mbp 用 docker 解决。去年年底买了台电脑玩游戏之余,捣鼓了一些开发环境解决方案,总算找到了最完美的办法,分享给 v 友。

已知使用 WSL2 的种种问题如下

我的解决方法:

  1. hyper-v 创建虚拟机;

  2. hyper-v 中创建一个虚拟的 internal switch,给 host 和虚拟机都绑定静态 ip,再 nat 给这个交换机联网;

  3. hyper-v 的虚拟机原生可以开机自启,比 vmware 方便、轻量多了;

  4. 部署 openssh server,Windows terminal 加一个配置默认 ssh 至虚拟机;达到了和 wsl 一样的打开 terminal 就可以使用;

  5. 买了个 x410 软件,类似于 vcxsrv,但是对高分屏的支持更好,界面也更友好;这样也支持了使用 gui 的软件,clion 、google chrome 用起来比 wslg 流畅很多!

唯一的问题只剩下文件共享不如 wsl 方便,但是既然开发环境都已经搬上虚拟机了,Windows 里边也就不要再放开发相关的东西了吧,极少情况需要的时候用 sftp 客户端也并不麻烦🐶

6905 次点击
所在节点    Windows
32 条回复
inhzus
2021-05-19 22:41:11 +08:00
1. 自从卸载了 wsl2,楼主 docker desktop 启动不起来的问题也解决了

2. 用 x410 这类软件当然有个问题是还要再安装中文输入法,我开发过程中不会输入中文,所以忽略;

3. 这样的开发环境大概用了一个月,日常 vim + clion + bash 操作非常方便,今天正好看到有讨论 linux de,联想到于是分享出来(楼主开发环境下也不用再折腾双系统 linux 的桌面配置了,工作之后再也没精力折腾之前的 i3 config,简简单单开发
kekxv
2021-05-19 23:29:18 +08:00
我用 clion + bazel + bazel remote + mingw64 也很方便
ch2
2021-05-19 23:36:32 +08:00
我的 docker desktop 跟 WSL2 是兼容的,但是不需要那玩意,直接用 WSL2 里的 docker 就行了
Hyper-V 也是不如 WSL2 方便的,两个同时都用了很久,最终放弃了 Hyper-V
ClericPy
2021-05-19 23:45:34 +08:00
现在主力基本 manjaro 了, Windows 上基本只打游戏, 偶尔需要 Linux 环境, 其实 multipass 挺香的...

Hyper-V 跟我好几个安卓虚拟机(Vbox) 冲突, 至于 WSL 当年用过一年多, 后来实在不喜欢就被我净化服务批处理一块给清理掉了.
nightwitch
2021-05-20 00:54:50 +08:00
windows 家庭版默认不带 hyperv,溜了溜了
falcon05
2021-05-20 01:07:42 +08:00
希望 2121 年的时候还能这么快乐
hanxiV2EX
2021-05-20 01:23:55 +08:00
顺便给你一个建议,如果平时不是使用 vim 的话,可以试试 vscode 的 remote 功能,很强大。
BeautifulSoap
2021-05-20 01:38:15 +08:00
又是时候祭出我这帖子了,「终于找到给 wsl2 分配固定 ip 的方法」
https://v2ex.com/t/744955

我是和 lz 相反,基于 wsl2 开发已经很长时间了,我就是从完整 hyper-v 虚拟机迁移过来的,开发体验比完整 hyper-v 虚拟机好很多

lz 提出的问题,wsl2 没有静态 ip 这个我的帖子已经给出了个比较好的解决办法了

文件 io 性能这个,lz 都用 xserver 跑 linux 的 gui 了,这个 wsl2 也行的啊。这不就意味着用 wsl2 和你 hyper-v 一样也根本无需和宿主做文件交互了吗。而且用 wsl2 额外的好处是虽然 io 性能不太好,但是毕竟直接资源管理器就能文件交互,而且 wsl2 内部也能极其方便访问宿主,有时候搞几个文件是真非常方便。而且 wsl2 里随处运行 code 命令跑起 vscode 做编辑也是很舒服的,这些都是不用任何配置直接开箱即用的。Hyper-V 的话你装完系统后想达到同样体验配置起来很麻烦

然后还有一个 wsl2 的好处很多人都似乎没怎么注意过的,wsl2 配合 Docker for Windows 是真的绝配
因为 wsl2 里跑的所有发行版都是类似共用内存的。比如我在 wsl2 里装了 Ubuntu 和 Debian 两个发行版,然后我给 wsl2 设了 6G 内存占用上限,那么结果就是 Ubuntu 和 Debian 共用这 6G 内存的上限而不是每个发行版各占 6G 上限(即最大吃掉 12G 内存)。Docker for Windows 也是同理,启用 wsl2 backend 后实际上 docker 就是作为一个独立的 wsl2 发行版在跑的。Ubuntu+Docker 共用 6G 的内存上限,是真比各自跑单独虚拟机节约内存
而且 wsl2 backend 的 docker 不光能给 wsl2 内发行版用,还能给宿主 Windows 用。我 wsl2 内用 docker 做开发,然后 Windows 用 docker 跑 aria2 之类的下载服务,都只用装一个 docker 就行了
mason961125
2021-05-20 02:22:18 +08:00
+1 只不过日常用 VSCode 的 Remote SSH 进虚拟机,反正我是没感觉到和本地有什么区别。

即使 WSL2 是一个用 Hyper-V 实现的轻量级虚拟机,但是里面阉割了一大堆东西,搞了些莫名其妙的 hack,真的非常非常难受。

顺便吐槽一下 Hyper-V 的内存分配:开了动态内存,虚拟机内部获取到的内存信息是你设置的内存大小,即使你最大内存设置的比这个值要大的多,它也就只能获取这么多;不开动态内存,虚拟机启动之后直接给你占满你分配的值,而不是和 VMWare/VirtualBox 一样用多少分配多少。导致现在开机基本就是 12G 的内存使用量...不过我倒是能理解这个问题,毕竟 Hyper-V 作为一项在服务器上用的 hypervisor,宿主几乎是不需要多大内存的,Hyper-V 要关心的是 guest 之间的内存用量,即:动态内存是会动态的分配 /回收一个 guest 的内存给另一个 guest 用,宿主?你说啥我听不到...

另外,强推 VSCode 的 Remote SSH 插件。由于 Windows 10 已经自带了 OpenSSH,去服务中启用 OpenSSH Authentication Agent 添加 key,并且在 Windows 的用户目录中 .ssh/config 配置好,打开虚拟机简直和用本地完全没有区别。Remote SSH 相当于在 Windows 上跑一个渲染界面,虚拟机内部跑 vscode 的所有后端处理逻辑,和用本地的 VSCode 可以说没有任何差距。

Windows Terminal 里面配置一个直接 ssh 到虚拟机的 item,设置为默认 tab,打开就是虚拟机。
ho121
2021-05-20 07:28:51 +08:00
反过来不好么,linux + kvm + windows guest
jamesxu
2021-05-20 08:18:04 +08:00
我也折腾了半天,直接 vmware player + ubuntu 虚拟机,性能也 OK
inhzus
2021-05-20 08:26:52 +08:00
@ClericPy hyper-v 确实存在和虚拟机软件冲突的问题,不过去年 vmware workstation 16 已经可以并存了。我也不做移动端开发,确实没感觉到这个问题

@hanxiV2EX 浏览代码一直在用 vscode remote,确实好用!


@BeautifulSoap 之前看到你发的帖子了,确实是解决了~但我自己觉得不够干净…就又找其他办法折腾
docker 的需求我确实比较弱,偶尔在虚拟机里边跑一些 demo 已经够用了

@ho121 因为新电脑就是想把 3070 用起来玩游戏😂用 Linux 并不是主要目的
ktblack
2021-05-20 08:38:50 +08:00
也提供一个不一样的思路,像我自己做些小项目几个月的样子会换一套环境,这种情况我用的 docker-machine + virtualbox 每个项目创建一个 machine,相关的数据库、redis 全部装在里面,没启动的项目也不会相互影响。
justrand
2021-05-20 08:43:02 +08:00
目前我用:virtualbox + vagrant + Windows terminal ssh 这套 win10 下的开发方案,觉得很方便,至少做到,代码+IDE 放 win 环境里,运行结果放虚拟机里。
justrand
2021-05-20 08:45:15 +08:00
因为上面那套开发实在是太稳定和顺手了,一直没有折腾 wsl,等有空我也体验一下
Cloutain
2021-05-20 09:24:16 +08:00
Windows 下快乐编程的正确姿势就是只做 Windows 开发 ~~~
gam2046
2021-05-20 09:32:00 +08:00
各位大佬有没有遇到一些( c/cxx )开源项目使用 WSL2 编译会有一些奇奇怪怪的错误?最后我又专门开个虚拟机去编译。
edk24
2021-05-20 09:43:21 +08:00
ubuntu 20.04 + windows10 双系统, 工作用 linux, 娱乐换回 windows
qW7bo2FbzbC0
2021-05-20 09:50:06 +08:00
@BeautifulSoap #8 怎么配置内存占用上限?
wms
2021-05-20 10:07:20 +08:00
WSL2 不能访问串口

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/778002

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX