VS Code Remote WSL 中 Copilot 代理设置与网络问题排查
问题表现
如果你有以下问题之一:
![图片:Copilot 对话无输出]
- 对话没有输出
![图片:显示 fetch failed]
- 显示 fetch failed
![图片:模型名称不显示]
- 模型名称不显示
问题分析
查看 copilot chat 的 output 显示:
![图片:Output 显示 proxies 相关问题]
如果显示 proxies 相关问题,可以确定是 WSL 中运行的 vscode 调用了宿主机的 proxy 设置的问题。
这个选项似乎是默认开启的,会在 vscode 远程连接 wsl 开发中继承宿主机的 proxy 本地设置。问题就出在这里,如果你使用的是宿主机本机运行的代理程序,那么 proxy 的 ip 就会设置为 127.0.0.1,但是在 wsl 中想要访问宿主机的代理端口,ip 并不是 127.0.0.1(这会访问到 wsl 自己),而是需要通过如下方式查询宿主机 ip,然后访问到宿主机上的代理端口:
hostip=$(ip route show | grep -i default | awk '{ print $3}')
echo "$hostip"
我的输出:
172.25.48.1
因此 wsl 中要通过 172.25.48.1 ip 来访问宿主机上的端口。
| 组件 | 监听端口 | 说明 |
|---|---|---|
| WSL 2 / VS Code Remote | X | 应用 |
| Windows Host (宿主机) | X | 代理 |
| Default Proxy | 127.0.0.1 | 自环失败 |
| Correct Proxy | 172.25.48.1:Port X | 流量转发成功 |
问题解决
- 如果可以通过网络直连,直接关闭
http: Use Local Proxy Configuration. - 如果依然需要设置代理,完成 1 后,修改如下设置:
![图片:VS Code 代理设置界面]
注意:部分方案建议将 copilot 完全工作在宿主机上(即设置的
"GitHub.copilot": [ "ui" ]),但这会导致 copilot 无法修改 WSL 中的文件,agent 模式将失效。
WSL 和宿主机网络互访
上面已经说明了如何在 WSL 命令行中访问宿主机程序,那么我们可以将之应用到代理设置上,以下脚本解决了一个问题——在 wsl 命令行中如何利用宿主机代理软件?
#!/bin/sh
hostip=$(ip route show | grep -i default | awk )
wslip=$(hostname -I | awk )
port=7890
PROXY_HTTP=
PROXY_SOCKS5=
(){
http_proxy=
HTTP_PROXY=
https_proxy=
HTTPS_proxy=
ALL_PROXY=
all_proxy=
git config --global http.https://github.com.proxy
git config --global https.https://github.com.proxy
}
(){
http_proxy HTTP_PROXY https_proxy HTTPS_PROXY ALL_PROXY all_proxy
git config --global -- http.https://github.com.proxy
git config --global -- https.https://github.com.proxy
}
(){
resp=$(curl -I -s --connect-timeout 5 -m 5 -w -o /dev/null www.google.com)
[=200];
}
[=]
set_proxy
[=]
unset_proxy
[=]
test_setting


