解决 VS Code 部分扩展联网失败的问题

解决 VS Code 在 Remote - WSL 环境中因为代理设置错误而导致的扩展联网失败的问题

·

1 min read

一、现象

环境说明

  • Windows 11
  • WSL2
  • Ubuntu 20.04
  • VS Code 1.69.2
  • Clash for Windows 0.19.22 + TUN Mode

在 VS Code 中,通过 Remote - WSL 打开 Ubuntu 子系统中的项目,IntelliCode 扩展无法下载模型,WakaTime 扩展无法上传统计数据。

二、排查问题

  1. Clash for Windows 保持打开状态,并使用 TUN Mode;
  2. 在 VS Code 中打开 Windows 本地项目,IntelliCode 和 WakaTime 可以正常工作;
  3. 在 Ubuntu 子系统终端中,执行 curl windows.netcurl wakatime.com 正常返回结果;
  4. 在 VS Code 中打开 Ubuntu 子系统的远程项目,IntelliCode 和 WakaTime 无法正常工作;
  5. 关闭 Clash for Windows,在 VS Code 中打开 Ubuntu 子系统的远程项目,IntelliCode 和 WakaTime 正常工作;

三、猜测原因

Clash for Windows + TUN Mode 对 Ubuntu 子系统中的 vscode-server 没有起到代理的作用,但是 IntelliCode 和 WakaTime 在没有代理的情况下应该也可以正常工作,所以怀疑 vscode-server 被配置了错误的代理。

开启 Clash for Windows 之后,Windows 系统代理一般被设置为 127.0.0.1:7890,VS Code 会继承这个代理设置,Ubuntu 子系统中的 vscode-server 应该也继承了这个代理设置。但是 Ubuntu 子系统在 127.0.0.1:7890 上并没有代理服务,导致 vscode-server 联网失败。

四、解决方法

打开 VS Code 设置,并搜索 "proxy" 可以看到:

vscode_proxy_settings.png

VS Code 的代理设置,会从 "http_proxy" 和 "https_proxy" 环境变量中继承,所以在 Ubuntu 子系统中正确设置 "http_proxy" 和 "https_proxy" 环境变量应该可以解决问题。

在 Ubuntu 子系统的 ~/.bashrc 文件末尾加上下面代码:

# 获取 Host IP
WINDOWS_IP=$(ip route | grep default | awk '{print $3}')
PROXY_HTTP="http://${WINDOWS_IP}:7890"

# 设置环境变量
export http_proxy="${PROXY_HTTP}"
export https_proxy="${PROXY_HTTP}"

重新在 VS Code 中打开 Ubuntu 子系统的远程项目,发现 IntelliCode 和 WakaTime 仍然无法正常工作,经排除发现 Windows 防火墙阻止了 Ubuntu 子系统访问 Host IP。

在 Windows 防火墙中增加一条规则:

New-NetFirewallRule -DisplayName "WSL" -Direction Inbound -InterfaceAlias "vEthernet (WSL)" -Action Allow

另外,Clash for Windows 需要启用 Allow LAN。

至此,问题解决。

(END)