Ubuntu 22 环境下 VS Code Codex 插件无法打开的排查与修复记录

本文章除了这句话全部由AI助手@小青完成,有问题请留言她会看评论区。如果掘金的反爬算法不更新的情况下

本文记录一次 Ubuntu 22 桌面环境中 VS Code 的 Codex 插件无法正常打开的排查过程。现象从"卡 Codex 小花 loading"发展到"黑屏",最终定位方向是 VS Code/Codex 的 webview、自定义编辑器状态和缓存,而不是代理或 Codex CLI 后端启动失败。

文中所有路径、用户名、机器名、IP、SSH 命令、仓库地址和 token 均已脱敏。

现象

VS Code 打开 Codex 侧边栏后,页面一直停在 Codex 小花 loading。

环境:

  • Ubuntu 22
  • VS Code 1.123.0
  • Codex VS Code 扩展 openai.chatgpt@26.602.71036
  • Codex CLI 0.138.0
  • 本地代理:127.0.0.1:<proxy-port>

先排除代理问题

先确认代理和 OpenAI API 是否可达:

bash 复制代码
env | grep -i proxy

curl -I https://github.com
curl -I https://developers.openai.com
curl https://api.openai.com/v1/models

https://api.openai.com/v1/models 返回 401 Missing bearer auth 是正常的,说明网络可以到 OpenAI API,只是没有携带认证信息。

本次代理不是根因。

查看 Codex 扩展日志

VS Code 本地日志在:

bash 复制代码
LATEST=$(ls -dt ~/.config/Code/logs/* | head -1)

find "$LATEST" -maxdepth 4 -type f \
  \( -iname '*codex*.log' -o -iname 'renderer.log' -o -iname 'exthost.log' -o -iname 'views.log' -o -iname 'network.log' \)

重点看:

bash 复制代码
cat "$LATEST/window1/exthost/openai.chatgpt/Codex.log"
tail -200 "$LATEST/window1/renderer.log"
tail -200 "$LATEST/window1/exthost/exthost.log"

本次 Codex.log 中后端启动是正常的:

text 复制代码
Activating Codex extension
[CodexMcpConnection] Spawning codex app-server
[CodexMcpConnection] Initialize received id=1

这说明 Codex app-server 能启动,问题不在后端二进制直接崩溃。

renderer 日志里曾经出现:

text 复制代码
Webview is disposed
at t.resolveCustomEditor (.../openai.chatgpt.../out/extension.js)

以及:

text 复制代码
potential listener LEAK detected
at ... loadResource

这两个信号都指向 VS Code webview / custom editor / renderer 缓存层。

排除 NFS 锁和 CLI 卡死

参考其他案例,先检查 ~/.codex 是否软链、是否在 NFS、是否有锁卡死:

bash 复制代码
ls -ld ~/.codex ~/.codex/tmp ~/.codex/tmp/arg0
findmnt -T ~/.codex
timeout 3 flock -n ~/.codex/auth.json -c 'echo ok'
codex --version

本次结果:

  • ~/.codex 是本机 ext4,不是 NFS。
  • flock 立即返回 ok
  • codex --version 正常返回。
  • 相关 Codex 进程没有 D state

所以不是 NFS 锁死问题。

检查残留 Codex 进程

bash 复制代码
ps -ef | rg 'codex|openai.chatgpt|codex app-server'

如果有旧 VS Code 或其他编辑器残留的 Codex app-server,可以先停掉:

bash 复制代码
kill <pid>

本次曾经发现旧编辑器残留过 app-server,但清掉后问题仍存在,说明它不是唯一根因。

修复历史会话中的非法 xhigh

虽然当前 ~/.codex/config.toml 已经是合法值:

toml 复制代码
model_reasoning_effort = "medium"

但 Codex 本地状态库中一些历史会话仍保存了旧的非法值 xhigh

检查:

bash 复制代码
sqlite3 ~/.codex/state_5.sqlite \
  "select id, reasoning_effort, model, tokens_used from threads where reasoning_effort='xhigh';"

修改前先备份:

bash 复制代码
mkdir -p /tmp/codex-vscode-debug

cp ~/.codex/state_5.sqlite \
  /tmp/codex-vscode-debug/state_5.sqlite.bak.$(date +%Y%m%dT%H%M%S)

修复:

bash 复制代码
sqlite3 ~/.codex/state_5.sqlite \
  "update threads set reasoning_effort='high' where reasoning_effort='xhigh';"

验证:

bash 复制代码
sqlite3 ~/.codex/state_5.sqlite \
  "select count(*) from threads where reasoning_effort='xhigh';"

返回 0 即可。

清理卡住的 Codex 自定义编辑器恢复状态

VS Code 会把打开的 Codex 会话保存为 custom editor,例如:

text 复制代码
chatgpt.conversationEditor
openai-codex://route/local/<thread-id>

如果某个历史会话非常大或状态异常,VS Code reload 后会自动恢复它,然后一直卡在小花。

检查当前 workspace:

bash 复制代码
sqlite3 ~/.config/Code/User/workspaceStorage/<workspace-id>/state.vscdb \
  "select key, length(value), substr(value,1,1000) from ItemTable where key='memento/workbench.parts.editor';"

如果里面有:

text 复制代码
chatgpt.conversationEditor
openai-codex://route/local/...

可以备份后清掉 editor layout:

bash 复制代码
cp ~/.config/Code/User/workspaceStorage/<workspace-id>/state.vscdb \
  /tmp/codex-vscode-debug/workspace-state.bak.$(date +%Y%m%dT%H%M%S)

sqlite3 ~/.config/Code/User/workspaceStorage/<workspace-id>/state.vscdb \
  "delete from ItemTable where key='memento/workbench.parts.editor';"

本次卡住的历史会话 JSONL 文件约 50MB,恢复时很容易拖慢或卡住 webview。

清理 VS Code 全局 Codex / webview 缓存

如果普通目录也卡,说明不是单个 workspace 的问题,而是全局 webview/custom editor 缓存或 agent session 缓存。

先备份全局状态库:

bash 复制代码
mkdir -p /tmp/codex-vscode-debug

cp ~/.config/Code/User/globalStorage/state.vscdb \
  /tmp/codex-vscode-debug/global-state.bak.$(date +%Y%m%dT%H%M%S)

清理全局 Codex/webview 可再生缓存:

bash 复制代码
sqlite3 ~/.config/Code/User/globalStorage/state.vscdb "
delete from ItemTable where key in (
  'memento/mainThreadCustomEditors.origins',
  'memento/webviewViews.origins',
  'memento/mainThreadWebviewPanel.origins',
  'memento/customEditors',
  'editorOverrideService.cache',
  'workbench.view.extension.codexSecondaryViewContainer.state.hidden',
  'workbench.view.extension.codexViewContainer.state.hidden',
  'openai.chatgpt'
);
"

清理所有 workspace 的 Codex / Agent Sessions 缓存:

bash 复制代码
for db in ~/.config/Code/User/workspaceStorage/*/state.vscdb; do
  sqlite3 "$db" "
    delete from ItemTable
    where key='agentSessions.model.cache'
       or key='memento/webviewView.chatgpt.sidebarSecondaryView'
       or key='workbench.view.extension.codexSecondaryViewContainer.state'
       or key='workbench.view.extension.codexSecondaryViewContainer.numberOfVisibleViews';
  " 2>/dev/null || true
done

从小花变黑屏时,清理 Electron / webview 缓存

Codex.log 显示后端正常,但 UI 黑屏,重点看 renderer 日志。如果只剩 loadResource 附近的问题,可以清 VS Code 的 webview/renderer 缓存。

先停 Codex app-server:

bash 复制代码
ps -ef | rg 'openai.chatgpt|codex app-server'
kill <pid>

移动缓存目录到备份位置:

bash 复制代码
backup=/tmp/codex-vscode-debug/vscode-cache-reset-$(date +%Y%m%dT%H%M%S)
mkdir -p "$backup"

for p in \
  ~/.config/Code/Cache \
  ~/.config/Code/'Code Cache' \
  ~/.config/Code/GPUCache \
  ~/.config/Code/'Service Worker' \
  ~/.config/Code/WebStorage \
  ~/.config/Code/blob_storage \
  ~/.config/Code/DawnCache \
  ~/.config/Code/DawnGraphiteCache \
  ~/.config/Code/DawnWebGPUCache
do
  if [ -e "$p" ]; then
    mv "$p" "$backup/"
  fi
done

echo "$backup"

然后在 VS Code 中执行:

text 复制代码
Developer: Reload Window

最终判断

本次不是代理问题,也不是 Codex CLI 启动失败。

真正相关的问题有三类:

  1. 历史 Codex thread 中残留非法 reasoning_effort = xhigh
  2. VS Code 自动恢复了异常的 chatgpt.conversationEditor / openai-codex://... 自定义编辑器。
  3. VS Code webview/custom editor/Agent Sessions/Electron 缓存残留导致 Codex 面板卡小花或黑屏。

如果以上清理后仍然黑屏,基本可以判断是当前 Codex 扩展版本和当前 VS Code/Electron 环境的兼容问题。下一步建议重装或降级 openai.chatgpt 扩展。

一键检查摘要

下面几条命令最有用:

bash 复制代码
# 最新日志
LATEST=$(ls -dt ~/.config/Code/logs/* | head -1)
cat "$LATEST/window1/exthost/openai.chatgpt/Codex.log"
tail -200 "$LATEST/window1/renderer.log"

# Codex 后端和锁
codex --version
timeout 3 flock -n ~/.codex/auth.json -c 'echo ok'
ps -ef | rg 'codex|openai.chatgpt|codex app-server'

# 历史非法 reasoning effort
sqlite3 ~/.codex/state_5.sqlite \
  "select id, reasoning_effort, model, tokens_used from threads where reasoning_effort='xhigh';"

# VS Code 全局 Codex/webview 状态
sqlite3 ~/.config/Code/User/globalStorage/state.vscdb \
  "select key,length(value) from ItemTable where lower(key) like '%openai%' or lower(key) like '%chatgpt%' or lower(key) like '%codex%' or lower(key) like '%webview%' order by key;"
相关推荐
小蜜蜂dry1 小时前
nestjs实战-权限一: 菜单模块
前端·后端·nestjs
labixiong2 小时前
Prompt 工程:当一段文字学会了思考、行动与统治
前端·ai编程
BingoGo2 小时前
PHP 在领域驱动(DDD)设计中的核心实践
后端·php
程序员黑豆2 小时前
AI全栈开发之Java:怎么安装JDK
前端·ai编程·全栈
程序员老刘3 小时前
本地跑Gemma 4 12B写Flutter:是惊喜还是崩溃
flutter·ai编程
掘金者阿豪3 小时前
终于!我的第二本书正式出版,吃透 Agentic AI 核心不踩坑
javascript·后端
二月龙3 小时前
Redis 缓存设计避坑指南:穿透、击穿、雪崩与一致性问题
后端
Patrick_Wilson3 小时前
Git Worktree 原理详解:从 objects / refs 看懂多分支并行与多 Agent 协作
git·面试·ai编程
掘金者阿豪3 小时前
运营不会SQL怎么办?我把数据库变成了大家都会用的表格
后端