WSL体验笔记

一直以来我希望在我的 Windows 笔记本上运行 Unix-like 的 shell 以配合我的 Archlinux 工作台式机。之前的解决方案是 Cygwin / MSYS2 / Git Bash 这些基于 MinTTY 的终端, 感觉都不太趁手, 最大的问题是运行起来很卡,命令补全功能的很弱,很难获得我在原生 Linux 系统上的体验。最近注意到 WSL (Windows Subsystem for Linux),安装体验了一下,结果非常令人满意,完全覆盖了我的需求,甚至还有意外收获。

WSL 2

安装步骤参考微软官方文档

基本上一步步下来没遇到什么问题,不同之处我选择发行版本是 Archlinux,这个在微软的官方商店是没有上架的,须自行去 GitHub 下载。

建议一步到位升级到 WSL 2,WSL 1 有不少功能限制。

ArchWSL

ArchWSL 项目地址 文档

用zip文件解压的方式安装,解压后得到一个Arch.exe,在 PowerShell 里面运行这个文件即可。注意要解压到有读写权限的文件夹中。之后就是一个新装的 ArchLinux 了,做该做的准备工作就行(添加用户,设置 sudo 权限,换 zsh 等等)

ArchWSL 是不支持原生的 systemd,若要体验,需安装替代程序,以运行 systemd 的脚本。暂未安装。

Windows Terminal

直接从微软官方商店安装,使用参考微软官方文档

安装好后,默认就给我们配置好了 WSL 的启动选项,还可以通过配置文件修改配色和开始路径,例如我的

1
2
3
4
5
6
7
8
{
"guid": "{a5a97cb8-8961-5535-816d-772efe0c6a3f}",
"colorScheme" : "One Half Dark",
"startingDirectory": "//wsl$/Arch/home/enigmaz/",
"hidden": false,
"name": "Arch",
"source": "Windows.Terminal.Wsl"
}

VS Code

VS Code 配合 WSL 使用是我本次体验获得意外之喜。

安装好 WSL 后我启动 VS Code,它自动检测到了我安装了 WSL 并询问我是否安装相关插件 Remote - WSL。开始我不知道这个插件是干啥用的,就去百度,找到知乎一篇文章 在 WSL 下启动 VSCode 。这篇文章写得比较早,说的实际上是在 WSL 中启动 VS Code,关于 Remote - WSL 插件的作用并没有介绍。

实际上这个插件更好用,它不需要在 WSL 端安装 VS Code 以及支持它运行所需的 X server 等等。我们只需要在 Windows 端的 VS Code 安装好插件,然后进到 WSL 的 shell 中,进入指定目录,输入

1
code .

第一次它会下载一个适用于 WSL 的 VS Code Server 端程序并安装,整个过程是自动的,然后启动 Windows 端的 VS Code,通过网络通讯,在 Windows 端的 VS Code里面编辑 WSL 端储存的代码,并且用 WSL 端工具链编译、调试代码。启动的终端也是直接打开的 WSL 的 shell 并且进入到代码目录。

有了这强大功能,以后在 Windows 上做一些开发就顺手多了,我可以把 Windows 上的 node / python / git 什么的都卸载了,直接用 WSL 里面的开发工具了,完全与我的工作电脑同步了。

注意问题

网络

WSL 目前还不支持 ipv6。

v2ray 代理的使用:可以在 WSL 里面单独实现一个 v2ray 实例使用,也可以将 Widnows 端的 v2ray 的代理地址绑定到 0.0.0.0 对局域网内机器可见,然后 WSL 设置代理地址为 Windows 端在局域网的 ip。如果 v2ray 端口不想暴露到局域网,需要获取 windows 在 WSL 的 ip

1
2
3
4
5
export PROXY_PORT=1081
export WINDOWS_NAMESERVER=`cat /etc/resolv.conf|grep nameserver|awk '{print $2}'`
export WIN_PROXY=http://$WINDOWS_NAMESERVER:$PROXY_PORT
export HTTP_PROXY=$WIN_PROXY
export HTTPS_PROXY=$WIN_PROXY

VS Code 代码目录

利用 Windows 端远程连接开发的时候,代码要放在 WSL 里面,不要用 WSL 挂载的 Windows 目录,不然 git 状态会有 bug。

ohmyzsh 字体

如果用 ohmyzsh,需要在 windows 上安装 (powerline)[https://github.com/powerline/fonts] 字体。