起因
最近我用 rust 写了个 shogi game. 考虑到性能优化及用户体验,控制台采用 raw mode 进行渲染。结果发现兼容性不是很好,在各种 shell/terminal 上表现不尽相同。而在字体渲染上,有一说一,除了 Windows Terminal 其余的都是辣鸡。
我(之前)平常最常用的 shell 是 Git Bash,但是正如前文所言,界面着实拉跨;而使用 Windows Terminal 打开 Git Bash 时,按退格键时又会出现闪烁现象。最终忍无可忍,于是把这些 bash/shell 全都拉出来批判一番:
- CMD: 费拉不堪
- Powershell:费拉不堪
- Gitbash: 费拉不堪
由于 Windows 上的 shell 人均费拉不堪,所以问了一位后端朋(dà)友(lǎo)有没有什么推荐:
结果发现人家对 shell 根本就不像我这么挑剔😂,不过也可能确实是受方向影响。因为毕竟后端首先在 Windows 方面上有成熟的 Goland IDE,确实一般情况下用不到控制台,用到终端的话一般就都是在服务器上了,而服务器则一般都是用的 Linux,所以通常没啥顾虑。而我等苦逼前端菜鸡还是要经常和各种 CLI 打交道的,所以最好还是去找一款优秀的终端软件。
然后最终选定了 WSL 2 + Windows Terminal + VSCode.
安装
如果 Windows 10 OS Version 大于 20262,可通过 wsl --install
安装。
虽然我有加入 Windows Insider 计划,不过系统还是用的 Stable,所以没有采取上述简化方式进行安装,而是采用的以下内容。
首先,以管理员权限打开 Powershell 并输入以下命令:
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
输入以下命令启用“虚拟机平台”功能,然后重启:
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
然后下载适用于 x64 计算机的 WSL2 Linux 内核更新包并安装,以将 WSL 1 更新至 WSL 2。
安装好后设置 WSL 2 为默认版本:
wsl --set-default-version 2
打开Microsoft Store,随便选择一种发行版并安装。这里我选的是大众喜闻乐见的 Ubuntu。安装完后启动,执行一些配置就 OK 了。
最后可以查看一下已安装的 WSL 发行版的版本信息:
wsl --list --verbose
顺便说一下,安装新的发行版的操作并不会使你旧的发行版被替换掉。如果你之前安装过 WSL 1 的 Linux 发行版,而又不想将其保留,也可以将其删除掉。比如,如果我想将之前的安装的 WSL 1 Debian 删除掉,可执行以下命令:
wsl --unregister debian
其余操作可以使用 wsl -h
或查看官方文档。
网络代理
设置代理
由于 WSL 2 是通过虚拟机的方式实现,所以不能像 WSL 1 时期那样直接使用 127.0.0.1
修改 WSL 内的网络代理。此时正确的处理方式应该是向 ~/.bashrc
添加如下内容:
hostip=$(cat /etc/resolv.conf | grep nameserver | awk '{ print $2 }')
port=7890 # 此处端口可根据个人情况进行更改
PROXY_HTTP="http://${hostip}:${port}"
export http_proxy="${PROXY_HTTP}"
export HTTP_PROXY="${PROXY_HTTP}"
export https_proxy="${PROXY_HTTP}"
export HTTPS_proxy="${PROXY_HTTP}"
取消防火墙
Windows 与 WSL 之间存在防火墙,请参照以下步骤取消勾选对应选项:
如果使用的是 Clash for Windows,请尝试开启 Clash for Windows 中主界面中的 Allow LAN 选项。
环境变量
在 WSL 2 中默认可获取到宿主机中的环境变量,这可能会导致某些错误,比如获取到一些没有意义的环境变量,导致环境混乱。
若要禁止在 WSL 2 中访问 Windows 环境变量,可以先创建/etc/wsl.conf
:
touch /etc/wsl.conf
然后修改其内容为:
[interop]
appendWindowsPath = false
常用软件的安装
接下来安装几个我常用的软件包,这部分没什么技术含量,仅供以后查阅方面使用。
首先更新软件源:
sudo apt update
然后安装:
# python
sudo apt install python3
ln -s /usr/bin/python3 /usr/bin/python
## node/npm
sudo apt install nodejs
sudo apt install npm
## yarn
sudo npm install -g yarn
## deno
sudo apt install unzip
curl -fsSL https://deno.land/x/install/install.sh | sh
## rust
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
# 建议选择 `default toolchain` 为 `nightly`
其他坑(先占位)
由于 WSL 2 用到了虚拟化平台功能,可能会导致其他虚拟机(如 VirtualBox)无法运行。目前我还没解决这个问题,啥时候用空解决了再更。
更新:解决方案:卸载 VirtualBox, 安装VMWare.