Codex Desktop 不断 Reconnecting 的代理环境变量处理

背景

如果 Codex Desktop 经常出现类似下面的状态:

text 复制代码
Reconnecting... 2/5
Reconnecting... 3/5
Reconnecting... 4/5

并且你平时依赖本机代理访问网络,那么问题可能不是 Codex 服务本身不稳定,而是 Codex Desktop 启动时没有继承代理环境变量,导致 WebSocket 连接没有正确走代理。

可以先在终端里检查:

bash 复制代码
codex doctor

如果看到 WebSocket timeout,且终端手动设置代理后可以通过,就可以考虑给 macOS 图形界面 App 设置代理环境变量。

设置代理环境变量

下面示例使用的代理端口是 127.0.0.1:7897。请根据你的代理软件实际端口修改,比如 Clash、Mihomo、Clash Verge、Surge 等。

bash 复制代码
launchctl setenv HTTP_PROXY http://127.0.0.1:7897
launchctl setenv HTTPS_PROXY http://127.0.0.1:7897
launchctl setenv ALL_PROXY socks5h://127.0.0.1:7897
launchctl setenv NO_PROXY "localhost,127.0.0.1,::1"

设置完成后,需要完全退出 Codex Desktop,再重新打开。

命令含义

HTTP_PROXY

bash 复制代码
launchctl setenv HTTP_PROXY http://127.0.0.1:7897

让支持 HTTP_PROXY 环境变量的程序,把 HTTP 请求转发到本机代理端口。

HTTPS_PROXY

bash 复制代码
launchctl setenv HTTPS_PROXY http://127.0.0.1:7897

让支持 HTTPS_PROXY 环境变量的程序,也通过本机代理端口转发 HTTPS 请求。

这里变量名虽然是 HTTPS_PROXY,但值通常仍然写成 http://...,表示使用 HTTP 代理协议转发 HTTPS 流量。

ALL_PROXY

bash 复制代码
launchctl setenv ALL_PROXY socks5h://127.0.0.1:7897

给不区分 HTTP/HTTPS 的程序设置通用代理。

socks5h:// 表示使用 SOCKS5 代理,并且域名解析也交给代理端处理。

注意:你的代理端口是否支持 SOCKS5,要看代理软件的实际配置。不是所有端口都同时支持 HTTP 和 SOCKS5。

NO_PROXY

bash 复制代码
launchctl setenv NO_PROXY "localhost,127.0.0.1,::1"

告诉程序访问本机地址时不要走代理。

常见本机地址包括:

  • localhost
  • 127.0.0.1
  • ::1

这些地址通常应该直连,否则可能影响本机服务访问。

恢复系统默认环境

如果你想撤销上面的设置,让 Codex Desktop 不再从 launchctl 继承这些代理变量,可以执行:

bash 复制代码
launchctl unsetenv HTTP_PROXY
launchctl unsetenv HTTPS_PROXY
launchctl unsetenv ALL_PROXY
launchctl unsetenv NO_PROXY

为了兼容部分程序读取小写变量,也可以一并清理小写版本:

bash 复制代码
launchctl unsetenv http_proxy
launchctl unsetenv https_proxy
launchctl unsetenv all_proxy
launchctl unsetenv no_proxy

执行完成后,同样需要完全退出 Codex Desktop,再重新打开。

查看当前是否已设置

可以用下面的命令查看当前 launchctl 环境变量:

bash 复制代码
launchctl getenv HTTP_PROXY
launchctl getenv HTTPS_PROXY
launchctl getenv ALL_PROXY
launchctl getenv NO_PROXY

如果命令没有输出,通常表示该变量当前没有设置。

注意事项

  • launchctl setenv 影响的是之后从 macOS 图形界面启动的 App。
  • 已经启动的 App 不会自动拿到新环境变量,需要完全退出后重开。
  • 代理端口要替换成你本机代理软件实际监听的端口。
  • 如果你的代理软件 HTTP 端口和 SOCKS5 端口不同,不要直接照抄同一个端口。
  • 这套命令不会修改 macOS 系统网络设置里的 Wi-Fi/以太网代理开关,只是设置 App 启动环境变量。
相关推荐
Asmewill11 小时前
LangGraph学习笔记五(Command+Send+Runtime)
前端
代码搬运媛11 小时前
【前端必知】浏览器原生 API 底层机制详解
前端
XovH11 小时前
Docker Compose 入门:一条命令启动多服务
后端
咔咔库奇11 小时前
js-执行上下文
开发语言·前端·javascript
咪饭只吃一小碗11 小时前
JS 打工记:同步搬砖、异步摸鱼,Promise 来救场
前端·javascript·面试
用户7138742290011 小时前
彻底搞懂浏览器客户端存储:从 localStorage 到完整存储体系
前端
Yeats_Liao11 小时前
6:部署Servlet-Java Web
java·后端·架构
bonechips11 小时前
告别 var,拥抱 let 和 const:JavaScript 变量声明完全指南
javascript·代码规范
掘金安东尼12 小时前
前端周刊第 467 期 🗂 本期精选目录
前端