genie与 vs code集成

上一级页面:index-wsl

前言

在瓶子中找不到VScode遥控器的命令“code”?这是一个解决方案

在genie bottle内运行用于 WSL 的 VS code服务器

从 WSL 运行code时,VS Code 服务器始终在瓶子外部启动,即使在瓶子内调用命令code也是如此。在某些情况下,这可能会很不方便,例如无法在 VS Code 控制台中执行命令systemctl

这是我目前用来在瓶子内运行VS Code服务器的hack

转到%USERPROFILE%\.vscode\extensions\(在 Windows 上)并找到名称ms-vscode-remote.remote-wsl-*的文件夹。(*通常为版本号)

这里可以存储多个版本的remote-wsl扩展。选择对应最新版本的文件夹。

然后导航到scripts文件夹。该文件夹下应该有三个文件,分别名为 wslServer.shwslCode.shwslDownload.sh

wslServer.sh中,文件前部(第8行)加上以下行:

1
2
3
4
5
# Check if inside bottle
if command -v genie > /dev/null && ! genie -b > /dev/null; then
# Rerun current script inside bottle
exec genie -c "$0" "$@"
fi

Pasted%20image%2020220613093945.png

然后执行wsl --shutdown并重新启动 VS Code,

下次启动VS Code服务器时,VS Code服务器将运行在瓶子内,并且systemd的PID 变更为PID 1

1
pgrep -l systemd

Pasted%20image%2020220613094228.png

现在有一个自动化的脚本,自动修补 wslServer.sh

访问fix-vscode.sh (github.com)

进入wsl

1
2
cd ~/src
git clonegit@gist.github.com:c28e6405fbd9cc1f853bc99465773f59.git

这个脚本应当在shell层启动,因为它依赖于bash

1
sudo chmod -R +rwx c28e6405fbd9cc1f853bc99465773f59
1
2
3
sudo mkdir /opt/scripts
sudo mv c28e6405fbd9cc1f853bc99465773f59 fix-vscode-script
sudo mv fix-vscode-script /opt/scripts

然后将这个脚本添加到启动脚本(/etc/zsh/zprofile或者/etc/profile)

1
2
# 自动patch
. /opt/scripts/fix-vscode-script/fix-vscode.sh

在瓶子中找不到VS code的命令“code”?这是一个解决方案

如果类似或zsh: command not found: code

1
Command 'code' not found, but can be installed with:

在系统化的瓶子中出现,而在瓶子外面,该命令code完美地打开VScode,

那么您可以将此代码附加到您的.zprofile.profile中。

1
2
3
code() {
/mnt/c/Users/<YOUR USERNAME>/AppData/Local/Programs/Microsoft\ VS\ Code/bin/code "$@"
}

YOUR USERNAME替换为您拥有的用户名。

VScode在设备之间可能有不同的路径,所以自己检查一下你的vs code路径

在此之后,VScode应该没有问题了!

参考、引用、致谢

在精灵瓶内运行用于 WSL 的 VS 代码服务器 ·arkane-systems/genie Wiki (github.com)

在瓶子中找不到VScode遥控器的命令“代码”?这是一个解决方案 ·arkane-systems/genie Wiki (github.com)