opencode在Ubuntu下无法复制?原来不是我一个人被困扰

1 阅读2分钟

说真的,这个 bug 把我搞烦躁了。你想想,很多时候需要使用命令行操作,复制不了,一个个的敲命令,实在费时间……

Bug是这样:我在PVE开了一个Ubuntu虚拟机,在虚拟机里面跑opencode。在终端里选中 opencode的输出文字,弹了个提示说"copied to clipboard",然后我 Ctrl+V 粘贴,出来的还是上一次的旧内容。

一开始怀疑自己操作有问题。试了右键菜单、试了鼠标选中、试了快捷键,反复的复制,全都一样。显示复制成功了,但剪贴板里永远是第一次复制的内容。

后来网上搜了一下,发现这不是个案,好多人都在反馈:

• GhostTY — Issue(#15907):Ghostty + SSH + tmux 下复制失败,显示"copied to clipboard"但实际没复制。 •Ubuntu 24.04 — Issue(#15604):Ubuntu 24.04 + GNOME Terminal 下复制/粘贴问题,甚至装了xclip后内容类型被误识别。 •搜索clipboard+copy+bug标签,有15+个相关issue,确实是个真实存在的问题 •有一个相关的PR #17465(double/triple click copy selection)在3月14日刚提交,官方也一直没有修。

查了一圈资料,大概搞清楚怎么回事了。

opencode 的剪贴板复制逻辑:先试试终端的 OSC52 转义序列,不行的话调用系统工具 xsel,再不行还有内置的fallback 二进制。

问题出在调用系统工具这步。

大多数 Ubuntu 最小化安装,系统里根本不装 xsel 这类东西。opencode 尝试调用它,失败了,虽然内置了 fallback 二进制,但在 SSH 远程环境下 OSC52 能不能用完全看本地终端给不给面子——很多终端模拟器对 OSC52 的支持并不完整。

所以表面上显示复制成功,实际上内容可能根本没进到你能用的剪贴板里。

说白了就是:系统工具缺失 + SSH 环境 OSC52 支持不完整 = 以为复制了但实际并没有。

解决方法其实就一行命令:

sudo apt install xsel

如果你用的是 Wayland 桌面环境:

sudo apt install wl-clipboard

装完之后,opencode 的复制功能马上就能用了,不需要改任何配置。

还有个坑:如果在 tmux 里跑 opencode,tmux 默认会拦截 OSC52 序列,导致复制功能完全失效。

解决方法是在 ~/.tmux.conf 里加一行:

set -g allow-passthrough on

然后 tmux source-file ~/.tmux.conf 重新加载配置。

这个问题的本质是 opencode 没有做好容错——检测到剪贴板工具不存在的时候,至少应该给个警告,而不是假装复制成功了事。毕竟用户看到"已复制成功"的提示,正常人都会以为真的复制进去了。

如果你也被这个问题困扰过,希望这篇文章能帮你省点时间。