打开 WSL2 内的项目时,VSCode 终端行为异常

Ton*_*Nam 5 visual-studio-code wsl2

您可以通过 VSCode 在 WSL2 中打开一个旨在在 Linux 中构建的项目,这真是太好了。但是终端的行为不同,如果我在 WSL2 上运行相同的命令。这是我为复制我的问题所做的步骤:

  1. 打开 Ubuntu WSL2。这只是打开一个运行 ubuntu 的终端
  2. 导航到我要打开的项目 cd ~/myapp
  3. 使用 vscode 打开该项目 vscodecode .在 linux 环境中打开。在左下角,它显示“WSL:Ubuntu”。我在 linux 上打开项目的方式真的很酷,就像我在哪里使用 linux 计算机一样。
  4. 我打开终端并运行此命令powershell.exe 'echo "hello-world"'。我收到以下错误:

<3>init: (5450) ERROR: UtilConnectToInteropServer:300: 连接失败 2

如果我打开 WSL2 并运行相同的命令,powershell.exe 'echo "hello-world"'它就可以工作。如果使用 vscode 终端,它就不起作用。奇怪的是它曾经有效。如果我重新启动计算机,它将开始在 vscode 上工作并最终停止工作。解决方案是使用单独的 WSL2 终端。但是如果我可以使用 vscode 集成终端就好了。

另一种解决方案是不使用 powershell。但我需要使用 powershell,因为 WSL2 不支持 USB。我正在构建一个 esp32 项目。构建后,我需要将代码闪存到我的微控制器。我必须通过 Windows 执行此操作,这就是我使用 powershell 的原因。我也可以在 Windows 上构建我的项目,但我已经将所有项目配置为在 linux 上进行编译和智能感知。

Ton*_*Nam 14

终于成功了。我将此添加到~/.zshrc. 如果您使用 bash 将其添加到~/.bashrc

fix_wsl2_interop() {
    for i in $(pstree -np -s $$ | grep -o -E '[0-9]+'); do
        if [[ -e "/run/WSL/${i}_interop" ]]; then
            export WSL_INTEROP=/run/WSL/${i}_interop
        fi
    done
}
Run Code Online (Sandbox Code Playgroud)

如果它停止工作,我就调用该函数。

我从这个链接得到了这个解决方案:https ://github.com/microsoft/WSL/issues/5065