1. Mac 终端 tmux 里跑 Codex,Ctrl+V 为什么会让会话假死
如果你在 Mac 上用 tmux 会话跑 Codex CLI,从 DataGrip 复制一段 SQL 后顺手按了 Ctrl+V,然后发现终端没反应、Enter 不生效、Ctrl+C 也中断不了,整个 pane 像被冻住一样——这不是你的 tmux 坏了,也不是 Codex 崩了,而是 Codex 的 TUI 在 Mac → tmux → 终端这条链路里,对 Ctrl+V 触发的剪贴板内容做了一次异常判断。
典型报错长这样:
Failed to paste image: clipboard unavailable: X11 server connection timed out because it was unreachable看到paste image和X11 server这两个词,很多人第一反应是「我明明复制的是 SQL,哪来的图片」「Mac 上哪来的 X11」。这正是问题的关键:你复制的是文本,但 GUI 应用往系统剪贴板写内容时,往往不只写纯文本,还会附带富文本、HTML、RTF 等多种格式。Codex 在 tmux 这种非原生 GUI 的终端环境里,可能没有把这次输入当成普通文本粘贴,而是误走了附件或图片的 clipboard 检测分支,于是报出Failed to paste image。一旦这条处理链出错,当前 TUI 会话的输入状态就乱了,表现为 Ctrl+V 无输入、Enter 失效、Ctrl+C 无法中断,看起来就是假死。
这篇面向三类人:一是在 Mac 终端 + tmux 里用 Codex CLI 的开发者;二是刚把 Codex 模型通道切到 TaoToken、还在配 Base URL 的人;三是遇到这个报错想快速恢复会话、又不想丢上下文的人。下面先讲清楚 TaoToken 在这件事里的角色边界,再给可复制的配置、验证步骤和排障命令。
2. TaoToken 只负责给 Key 和 Base URL,不碰剪贴板
先把边界说清楚,避免你排错方向跑偏。TaoToken 在这个场景里只做一件事:给你的 Codex 提供模型请求通道,也就是一个 API Key 和一个 Base URL。它不参与终端剪贴板处理,不会读你的系统剪贴板,也不会因为剪贴板里有富文本就报错。所以Failed to paste image这个错,跟 TaoToken 的 Key 有没有配好没有因果关系。
如果你正把 Codex 的模型通道改到 TaoToken,流程是这样的:先去官网注册并创建 Key,地址是 https://taotoken.net/?utm_source=taotoken_aicg_blog_end ,注册后在控制台创建 API Key。然后把 Codex 的 Base URL 填成:
https://taotoken.net/api这里有两个容易踩的坑。第一,Base URL 不要带/v1,填https://taotoken.net/api就行,多写/v1可能导致请求路径拼接错误。第二,不要填带 UTM 参数的官网地址,官网地址是给人看的落地页,API 请求要的是纯接口域名。Key 的创建入口在控制台的 API Keys 页面,接入细节可以对照接入文档。
需要区分的是:TaoToken 解决的是「模型请求能不能通」,剪贴板假死解决的是「终端输入状态怎么恢复」。两件事分开处理,不要混在一起排查。
3. 可复制配置:Codex 接 TaoToken 与粘贴方式调整
3.1 配置 Codex 的 Base URL 和 Key
Codex CLI 的配置通常通过环境变量或配置文件注入。以环境变量方式为例,你可以在 shell 配置里这样写:
export OPENAI_API_KEY="你的TaoToken Key" export OPENAI_BASE_URL="https://taotoken.net/api"如果你用的是 Codex 自己的配置文件(不同版本路径略有差异,常见在~/.codex/下),把 base_url 和 api_key 填成对应值即可。核心就两点:Key 用 TaoToken 控制台创建的,Base URL 用https://taotoken.net/api,不带/v1。
配置完成后,建议先在一个普通终端(不进 tmux)里发一个小请求,确认通道能通,再进 tmux 做粘贴操作。这样能把「通道问题」和「剪贴板问题」彻底分开。
3.2 粘贴方式:优先 Command+V 或右键
在这个场景里,最直接的规避办法就是别用 Ctrl+V。改用 Command+V,或者用鼠标右键菜单里的粘贴。实测下来,同样一段从 DataGrip 复制的 SQL,Command+V 能正常进 Codex,Ctrl+V 就可能触发那次异常的 clipboard 检测。
如果你必须从 GUI 应用复制内容,建议加一步「洗格式」:先粘到纯文本编辑器(比如 TextEdit 切到纯文本模式、或者pbpaste管道),再重新复制一次,最后用 Command+V 粘进 Codex。这样剪贴板里只剩纯文本,富文本和 HTML 格式被剥掉,Codex 就不会误判成图片或附件。
3.3 大段内容走文件,不走剪贴板
大段 SQL、脚本、日志,最稳的方式是根本不用剪贴板。先保存成文件,再让 Codex 读取文件内容。比如:
cat ./query.sql或者在 Codex 里直接引用文件路径让它读。这样既避开了剪贴板格式问题,也避开了终端粘贴长度限制和转义问题。对于几百行的 SQL,这比粘贴靠谱得多。
4. 验证请求与恢复假死会话
4.1 验证 TaoToken 通道是否正常
拿到 Key 后,先在 Codex 里发一个小请求,比如让它解释一句简单代码,确认请求能正常返回。如果这一步就报错,先查 Key 和 Base URL,别急着怀疑剪贴板。确认通道通了,再回到 tmux 里用 Command+V 粘贴,观察是否还会触发clipboard unavailable那类报错。
4.2 已经卡住时怎么救
如果 Ctrl+V 已经按下、会话已经假死,按优先级从轻到重处理。
方法一,直接在 tmux 里杀掉当前 pane:
Ctrl+b x按提示确认即可。这是最快的方式,代价是当前 pane 里的会话上下文丢失。
方法二,从另一个终端定位并杀掉指定 pane。先列出所有 pane:
tmux list-panes -a -F '#S:#I.#P #{pane_current_command} #{pane_pid}'输出里能看到会话名、窗口号、面板号、当前命令和 pid。找到那个跑 Codex 的 pane,然后:
tmux kill-pane -t test-session:0.0把test-session:0.0换成你实际的会话名:窗口.面板。
方法三,直接杀 Codex 进程:
ps -ef | grep codex kill -9 <pid>把<pid>换成上一步查到的进程号。这种方式不依赖 tmux 命令,适合 tmux 本身也响应慢的情况。
三种方式按场景选:只想快速恢复用方法一;想精确杀某个 pane 用方法二;tmux 命令也不灵了用方法三。
5. 本篇常见错排查
5.1 报错里出现 X11 server connection timed out
这个报错容易让人以为要装 X11 或者配 DISPLAY。实际上在 Mac + tmux + Codex 这个组合里,它更多是 Codex 剪贴板检测逻辑走错分支后的连带输出,不是真的在连 X11 服务器。不要顺着 X11 去装环境,先按粘贴方式调整处理。
5.2 Base URL 填了带 /v1 或带 UTM 的地址
如果请求报 404 或路径错误,先检查 Base URL。正确值是https://taotoken.net/api,不带/v1,也不要用带 UTM 参数的官网落地页地址。官网地址用于注册和查看文档,API 请求用纯接口地址。
5.3 换了 Command+V 还是偶尔假死
检查复制来源。DataGrip、浏览器、飞书、Notion 这类应用写入剪贴板的格式比较杂。加一步「先粘到纯文本编辑器再复制」通常能解决。如果还不行,直接走文件读取方案。
5.4 杀掉 pane 后 Codex 配置丢了
杀 pane 或杀进程不会影响你的配置文件和环境变量,重新开 tmux 会话、重新启动 Codex 即可。Key 和 Base URL 如果写在 shell 配置里,新会话会自动加载。
5.5 分不清是通道问题还是剪贴板问题
判断方法很简单:在普通终端(不进 tmux)里发请求。如果普通终端能通、tmux 里 Ctrl+V 才出问题,那就是剪贴板链路问题;如果普通终端也报错,先查 Key 和 Base URL。把这两类问题分开,排查效率会高很多。
6. 把通道和粘贴分开处理,各归各
回到最开始那个场景:Mac 终端、tmux 会话、Codex CLI、从 DataGrip 复制 SQL、按了 Ctrl+V、报Failed to paste image: clipboard unavailable、然后会话假死。结论是这不是 tmux 故障,也不是真在贴图片,而是 Codex TUI 在 tmux 链路里对剪贴板内容误判,导致输入状态异常。
处理上分两条线。通道线:如果你要把 Codex 模型通道切到 TaoToken,去 https://taotoken.net/?utm_source=taotoken_aicg_blog_end 注册、创建 Key,Base URL 填https://taotoken.net/api,不带/v1。粘贴线:优先 Command+V 或右键,GUI 来源先洗成纯文本,大段内容走文件,卡住了用Ctrl+b x、tmux kill-pane或kill -9恢复。
如果你正在做长期编码或 Agent 类任务,需要更稳定的调用额度,可以了解 Coding Plan;想先验证模型对话效果,可以从模型对话入口试起;Key 的创建和管理在 API Keys 页面,接入细节对照接入文档。通道归通道,剪贴板归剪贴板,分开处理,这个假死问题就不会再卡住你的节奏。