← 返回信息流
Agent SkillLINUX DO · AI·1 天前

Codex Desktop重连5次问题解法:配置代理环境变量

原标题:一招解决 codex 重新连接 5 次

速览

Codex Desktop新版默认使用WebSocket协议,若未正确读取系统代理环境变量,会导致连接超时并陷入5次重连循环。解决方法是手动编辑~/.codex/.env文件写入代理配置,或使用提供的macOS一键脚本自动检测并更新代理设置。

AI 深度解读

背景

在使用 Codex Desktop 这款桌面应用时,许多用户近期遇到了频繁的连接中断问题。具体表现为应用启动或运行过程中不断尝试重新连接,且几乎每次都在经历 5 次重试后才最终成功响应。这种机制导致用户需要等待大量无意义的时间,严重影响了使用体验。

经排查,这一现象源于 Codex Desktop 新版升级后默认采用的连接协议变更。新版本默认使用 WebSocket 协议进行通信。当连接失败时,日志中会明确显示 WebSocket 握手超时。其根本原因在于,Codex Desktop 作为独立的桌面应用程序,并不像浏览器那样能够自动读取并遵循操作系统的系统代理设置。如果应用启动时未显式读取环境变量中的 HTTP_PROXYHTTPS_PROXY,它会误判为直连模式,从而导致连接超时并陷入重连循环。

核心内容

解决该问题的核心思路是手动为 Codex Desktop 配置系统代理环境变量,使其能够正确通过代理服务器建立 WebSocket 连接。以下是具体的解决步骤和自动化方案:

1. 手动配置方案

以 macOS 系统为例,操作步骤如下:

  1. 查看系统代理信息: 在终端中输入以下命令,查看当前系统的代理端口和状态:

    scutil --proxy
    

    输出结果中会包含 HTTPProxyHTTPPort 等字段。例如,若显示 httphttps 的代理端口均为 6152,则代理地址为 127.0.0.1:6152

  2. 编辑环境变量文件: 找到或创建 Codex Desktop 的配置文件 ~/.codex/.env。在该文件中写入代理配置:

    HTTP_PROXY=http://127.0.0.1:<实际端口>
    HTTPS_PROXY=http://127.0.0.1:<实际端口>
    

    注意:请将 <实际端口> 替换为从 scutil --proxy 命令中获取的实际端口号。

  3. 重启应用: 保存文件后,完全退出 Codex Desktop 并重新打开,即可解决重连问题。

2. 使用 Prompt 辅助配置

如果用户不熟悉命令行操作,可以将以下 Prompt 发送给 Codex 应用,让其自动定位本机代理并生成配置:

帮我修复 Codex Desktop 一直 Reconnecting 的问题。

请定位我本机正在使用的代理端口和代理协议,然后创建或更新 ~/.codex/.env,写入以下代理配置。不要写死端口,请替换成实际端口;如果文件已经存在,保留其他配置。

HTTP_PROXY="http://127.0.0.1:<HTTP 或 mixed 端口>" HTTPS_PROXY="http://127.0.0.1:<HTTP 或 mixed 端口>"

写入后检查配置是否正确,并告诉我需要如何重启 Codex Desktop。

3. 自动化脚本方案

对于 macOS 用户,可以使用以下 Bash 脚本一键完成检测与配置。该脚本会自动读取系统代理设置,并更新 ~/.codex/.env 文件:

#!/bin/bash
# 检测 macOS 系统代理并更新 ~/.codex/.env

ENV_DIR="$HOME/.codex"
ENV_FILE="$ENV_DIR/.env"

# 读取系统代理配置
proxy_info=$(scutil --proxy)

http_enabled=$(echo "$proxy_info" | awk '/HTTPEnable/{print $3}')
http_host=$(echo "$proxy_info" | awk '/HTTPProxy/{print $3}')
http_port=$(echo "$proxy_info" | awk '/HTTPPort/{print $3}')

https_enabled=$(echo "$proxy_info" | awk '/HTTPSEnable/{print $3}')
https_host=$(echo "$proxy_info" | awk '/HTTPSProxy/{print $3}')
https_port=$(echo "$proxy_info" | awk '/HTTPSPort/{print $3}')

# 构建代理 URL
http_proxy=""
https_proxy=""

if [[ "$http_enabled" == "1" && -n "$http_host" && -n "$http_port" ]]; then
    http_proxy="http://${http_host}:${http_port}"
fi

if [[ "$https_enabled" == "1" && -n "$https_host" && -n "$https_port" ]]; then
    https_proxy="http://${https_host}:${https_port}"
fi

# 如果 HTTP 代理和 HTTPS 代理都没有
if [[ -z "$http_proxy" && -z "$https_proxy" ]]; then
    echo "❌ 未检测到系统代理,当前无代理设置。"
    exit 0
fi

# HTTPS 未单独设置时,复用 HTTP 代理
if [[ -n "$http_proxy" && -z "$https_proxy" ]]; then
    https_proxy="$http_proxy"
fi

echo "✅ 检测到系统代理:"
[[ -n "$http_proxy" ]]  && echo "   HTTP_PROXY=$http_proxy"
[[ -n "$https_proxy" ]] && echo "   HTTPS_PROXY=$https_proxy"

# 确保目录存在
mkdir -p "$ENV_DIR"

# 如果 .env 文件不存在,直接创建
if [[ ! -f "$ENV_FILE" ]]; then
    {
        [[ -n "$http_proxy" ]]  && echo "HTTP_PROXY=$http_proxy"
        [[ -n "$https_proxy" ]] && echo "HTTPS_PROXY=$https_proxy"
    } > "$ENV_FILE"
    echo "📄 已创建 $ENV_FILE 并写入代理配置。"
    exit 0
fi

# 文件已存在,更新或追加
update_or_append() {
    local key="$1" value="$2"
    if grep -q "^${key}=" "$ENV_FILE"; then
        sed -i '' "s|^${key}=.*|${key}=${value}|" "$ENV_FILE"
        echo "🔄 已更新 ${key}"
    else
        echo "${key}=${value}" >> "$ENV_FILE"
        echo "➕ 已追加 ${key}"
    fi
}

[[ -n "$http_proxy" ]]  && update_or_append "HTTP_PROXY" "$http_proxy"
[[ -n "$https_proxy" ]] && update_or_append "HTTPS_PROXY" "$https_proxy"

echo "✅ $ENV_FILE 已更新完成。"

关键要点

  • 问题根源:Codex Desktop 新版默认使用 WebSocket 协议,且作为桌面应用不会自动继承系统代理设置,导致直连超时。
  • 错误表现:应用界面显示不断重连,日志中出现 WebSocket 握手超时,通常经过 5 次重试后成功。
  • 解决方案核心:在 ~/.codex/.env 文件中显式配置 HTTP_PROXYHTTPS_PROXY 环境变量。
  • 配置方法
    • 手动:通过 scutil --proxy 获取端口,手动编辑 .env 文件。
    • AI 辅助:使用特定 Prompt 让 Codex 自动识别并生成配置。
    • 脚本自动化:使用提供的 Bash 脚本自动读取系统代理并更新配置文件(仅限 macOS)。
  • 必要步骤:修改配置文件后,必须完全退出并重新启动 Codex Desktop 才能使配置生效。

意义与影响

这一问题的解决揭示了桌面端 AI 工具在代理环境下的一个普遍痛点:即桌面应用与操作系统网络设置之间的隔离性。与浏览器或移动端应用不同,许多桌面原生应用(Native Apps)在启动时不会自动查询系统的代理配置,这要求用户具备一定的手动配置能力,或者应用开发者需要在设计之初就考虑代理自动发现机制。

对于 Codex Desktop 用户而言,掌握这一配置技巧不仅能消除等待重连的焦虑,提升工作效率,也提供了一个通过环境变量控制应用网络行为的通用范式。此外,提供的自动化脚本和 Prompt 方案,展示了如何利用 AI 和脚本工具简化繁琐的系统配置任务,体现了“用 AI 解决 AI 工具本身问题”的实用主义思路。

查看原文 →linux.do