一、问题本质
你遇到的现象是:
text
Reconnecting 1/5
Reconnecting 2/5
...
Reconnecting 5/5
然后 Codex 才开始工作
这通常不是 /resume、旧会话或 VS Code 本身的问题,而是 Codex 初始化时网络连接不稳定,尤其是 WebSocket / 代理环境没有正确生效。
最常见原因是:
- Codex 没有正确走代理;
- VS Code 插件进程没有继承代理环境变量;
- Codex 优先尝试 WebSocket,失败后才回退到 HTTP;
- Windows / Ubuntu 的环境变量继承机制不同。
二、Windows 解决方法
1. 用 setx 设置持久代理环境变量
在 PowerShell 中执行:
powershell
setx HTTP_PROXY http://127.0.0.1:7890
setx HTTPS_PROXY http://127.0.0.1:7890
如果你的代理端口不是 7890,需要改成你自己的端口,比如:
powershell
setx HTTP_PROXY http://127.0.0.1:7897
setx HTTPS_PROXY http://127.0.0.1:7897
2. 这个设置是否永久?
是的。
setx 设置的是当前 Windows 用户的持久环境变量。
也就是说,设置后:
- 新打开的 PowerShell 会生效;
- 新打开的 CMD 会生效;
- 新打开的 VS Code 会生效;
- VS Code 中的 Codex 插件会生效;
- CLI 版 Codex 会生效。
但注意:
已经打开的终端、VS Code 不会立即生效。
执行 setx 后,需要:
- 关闭 VS Code;
- 关闭所有 PowerShell / CMD;
- 重新打开 VS Code 或终端。
3. 查看是否生效
PowerShell 中执行:
powershell
echo $env:HTTP_PROXY
echo $env:HTTPS_PROXY
如果输出类似:
text
http://127.0.0.1:7890
http://127.0.0.1:7890
说明已经生效。
4. 删除 Windows 中的代理环境变量
如果以后不想让 Codex 或其他程序默认走代理,可以执行:
powershell
[Environment]::SetEnvironmentVariable("HTTP_PROXY", $null, "User")
[Environment]::SetEnvironmentVariable("HTTPS_PROXY", $null, "User")
然后重新打开 VS Code / 终端。
5. Windows 方法总结
Windows 上最简单、最有效的方法就是:
powershell
setx HTTP_PROXY http://127.0.0.1:7890
setx HTTPS_PROXY http://127.0.0.1:7890
然后重启 VS Code。
你已经验证:这个方法可以完全解决 VS Code 和 CLI 中 Codex 的 reconnecting 问题。
三、Ubuntu 解决方法
Ubuntu 和 Windows 的最大区别是:
Ubuntu 中环境变量主要由"启动当前程序的父进程"传递。
所以如果你只在终端里设置了代理,那么只有从这个终端启动的程序才能继承这些变量。
这就是为什么你之前需要:
bash
code .
从终端启动 VS Code。
因为这样 VS Code 是终端的子进程,它可以继承终端里的代理环境变量。
四、Ubuntu 方法一:只让终端和 code . 启动的 VS Code 生效
这是最推荐、最简单的方法。
编辑 ~/.bashrc:
bash
nano ~/.bashrc
在文件末尾加入:
bash
export HTTP_PROXY=http://127.0.0.1:7890
export HTTPS_PROXY=http://127.0.0.1:7890
export http_proxy=http://127.0.0.1:7890
export https_proxy=http://127.0.0.1:7890
export NO_PROXY=localhost,127.0.0.1,::1
export no_proxy=localhost,127.0.0.1,::1
保存后执行:
bash
source ~/.bashrc
然后在项目目录启动 VS Code:
bash
code .
这样:
- 终端里的 Codex CLI 会走代理;
- 通过
code .打开的 VS Code 会走代理; - VS Code 里的 Codex 插件也会走代理。
为什么 Ubuntu 需要 code .?
因为你把环境变量写在了:
bash
~/.bashrc
而 .bashrc 主要是给交互式 shell 用的。
也就是说,只有你打开终端时,.bashrc 才会被加载。
如果你直接点击 Ubuntu 桌面图标打开 VS Code,VS Code 不一定会读取 .bashrc,所以 Codex 插件可能拿不到代理变量。
因此:
bash
code .
是一个很稳的启动方式。
五、Ubuntu 方法二:让桌面图标启动 VS Code 也生效
如果你不想每次都通过终端 code . 打开 VS Code,可以使用用户级环境变量配置。
创建目录:
bash
mkdir -p ~/.config/environment.d
创建配置文件:
bash
nano ~/.config/environment.d/proxy.conf
写入:
ini
HTTP_PROXY=http://127.0.0.1:7890
HTTPS_PROXY=http://127.0.0.1:7890
http_proxy=http://127.0.0.1:7890
https_proxy=http://127.0.0.1:7890
NO_PROXY=localhost,127.0.0.1,::1
no_proxy=localhost,127.0.0.1,::1
保存后,注销 Ubuntu 用户并重新登录,或者直接重启系统。
之后,从桌面图标启动 VS Code,也更有可能让 Codex 插件继承代理变量。
六、Ubuntu 方法三:系统级全局代理环境变量
也可以写入:
bash
sudo nano /etc/environment
加入:
ini
HTTP_PROXY="http://127.0.0.1:7890"
HTTPS_PROXY="http://127.0.0.1:7890"
http_proxy="http://127.0.0.1:7890"
https_proxy="http://127.0.0.1:7890"
NO_PROXY="localhost,127.0.0.1,::1"
no_proxy="localhost,127.0.0.1,::1"
然后注销重登或重启。
但这个方法不建议优先使用,因为它影响范围更大,可能影响:
aptgit- Python
- Docker
- 系统服务
- 其他开发工具
除非你明确希望整个 Ubuntu 系统都默认走这个代理。
七、Ubuntu 中如何查看是否生效
在终端中执行:
bash
echo $HTTP_PROXY
echo $HTTPS_PROXY
echo $http_proxy
echo $https_proxy
如果输出:
text
http://127.0.0.1:7890
http://127.0.0.1:7890
http://127.0.0.1:7890
http://127.0.0.1:7890
说明终端环境变量已经生效。
如果想确认 VS Code 是否继承,可以在 VS Code 的 integrated terminal 里执行同样命令。
八、Windows 和 Ubuntu 的核心区别
| 项目 | Windows | Ubuntu |
|---|---|---|
| 推荐方法 | setx |
写入 ~/.bashrc 或 ~/.config/environment.d/proxy.conf |
| 是否永久 | 是 | 取决于写在哪里 |
| 是否影响当前终端 | 否,需要重开 | source ~/.bashrc 后当前终端可生效 |
| VS Code 是否自动继承 | 通常会 | 不一定 |
| 是否需要从终端启动 VS Code | 通常不需要 | 如果只写 .bashrc,需要 code . |
| 图标启动 VS Code 是否生效 | 一般生效 | 不一定 |
| 推荐实践 | setx 后重启 VS Code |
.bashrc + code .,或 environment.d + 重启 |
九、推荐配置组合
Windows 推荐
powershell
setx HTTP_PROXY http://127.0.0.1:7890
setx HTTPS_PROXY http://127.0.0.1:7890
然后重启 VS Code 和终端。
Ubuntu 推荐一:你继续用 code .
bash
nano ~/.bashrc
加入:
bash
export HTTP_PROXY=http://127.0.0.1:7890
export HTTPS_PROXY=http://127.0.0.1:7890
export http_proxy=http://127.0.0.1:7890
export https_proxy=http://127.0.0.1:7890
export NO_PROXY=localhost,127.0.0.1,::1
export no_proxy=localhost,127.0.0.1,::1
然后:
bash
source ~/.bashrc
code .
这是最稳、最可控的方法。
Ubuntu 推荐二:想从图标启动 VS Code
bash
mkdir -p ~/.config/environment.d
nano ~/.config/environment.d/proxy.conf
写入:
ini
HTTP_PROXY=http://127.0.0.1:7890
HTTPS_PROXY=http://127.0.0.1:7890
http_proxy=http://127.0.0.1:7890
https_proxy=http://127.0.0.1:7890
NO_PROXY=localhost,127.0.0.1,::1
no_proxy=localhost,127.0.0.1,::1
然后注销重登或重启。
十、最终建议
你的 Windows 已经通过 setx 完全解决了 Codex reconnecting 问题。
Ubuntu 上建议采用:
bash
~/.bashrc + code .
也就是:
- 把代理环境变量写入
~/.bashrc; - 每次从终端进入项目目录;
- 用
code .启动 VS Code。
这是最符合 Ubuntu 环境变量机制的方式,也是最不容易影响系统其他程序的方式。