终端模拟器 Ghostty 发布 1.4.0 重大版本更新。此次升级带来显著的性能与内存优化,成为除 Kitty 外首个完整支持 Kitty 图形协议(含动画和相对定位)的终端。此外,新版本修复了多项关键安全漏洞,改进了 SSH 集成,并针对 macOS 和 GTK 平台进行了数百项跨平台修复与增强。
关键安全漏洞修复
本次更新修复了多个高危安全漏洞,官方建议所有用户尽快升级:
- 命令注入风险 (GHSA-4hwh-wx3w-3fqg):粘贴保护机制未正确识别回车符,导致在未使用括号粘贴模式的程序中,粘贴内容可能未经确认直接执行命令。该漏洞需用户交互触发。
- Kitty 图形协议滥用 (GHSA-mhff-mv4q-fp63):恶意图形命令可能导致崩溃、挂起、内存耗尽,或在特定条件下读写临时目录外文件。仅需显示恶意输出即可触发。
- tmux 控制模式攻击 (GHSA-hcr9-7hcr-mjm8, GHSA-hp9c-qp4q-cpw3):恶意终端输出可通过 tmux 控制模式导致 Ghostty 崩溃并关闭所有窗口,影响 1.3.0 和 1.3.1 版本。即使未安装 tmux 也可能受影响。
- 内存破坏与 shell 集成 (GHSA-w9q4-5jvv-mcv4, GHSA-2r63-vmw6-3m3c):特定清屏操作或精心构造的目录名可能导致内存破坏或 zsh/bash 发送任意转义序列(如静默替换剪贴板)。
- macOS 特有漏洞:包括通过 OSC 8 超链接执行任意命令 (GHSA-cw69-wm67-5pv8)、链接检测问题 (GHSA-mfw9-xcr3-7gfp)、拖放绕过粘贴保护 (GHSA-v8cw-fg4j-jcc4) 以及文件名控制字符导致的命令混淆 (GHSA-mxqx-236q-wrv7)。
Kitty 图形协议完整支持与性能飞跃
Ghostty 1.4 补齐了 Kitty 图形协议的最后拼图,实现 100% 规范覆盖:
- 动画与相对定位:支持 GIF 等动画图像的帧传输、合成及播放控制,终端不可见时自动暂停;支持图像相对定位,子图像可随父图像移动。
- 解析速度提升 16 倍:引入 SIMD 批量解析图像载荷。基准测试显示,在 x86_64 Linux 上处理 64 MiB 大型图像数据时,解析速度提升约 16 倍,绘图成本大幅降低。
- 行为一致性:修复了数十处行为差异,如图像随滚动区域文本同步滚动、重新传输 ID 替换旧图像、无效数据返回错误响应等。
内存优化:占用减少高达 90%
新版本引入透明的回滚历史压缩技术,显著降低资源消耗:
- 高效压缩:典型文本密集型历史的物理内存占用减少 70% 至 90%。压缩仅在终端空闲时运行,按需解压,不影响 I/O 吞吐量。
- 默认限制提升:得益于压缩,单终端默认回滚限制从 10 MB 提升至 50 MB,但实际物理内存占用通常仍低于旧的 10 MB 限制。
- 其他优化:macOS 上新空终端页面内存占用从 128 KiB 降至 16 KiB;清除回滚后内存立即归还系统;隐藏标签页释放 GPU 资源,20 个隐藏标签页的 GPU 内存从 385 MiB 降至 18 MiB。
全方面性能提升
Ghostty 1.4 在 I/O、渲染和处理速度上均实现显著增益:
- I/O 吞吐量:macOS 上采用多线程处理 pty 读取,端到端 I/O 吞吐量提升 25% 至 55%(M4 Max)。
- VT 处理加速:纯 ASCII 文本处理速度从 128 MB/s 跃升至 725 MB/s(5.7 倍);CJK 文本提升 3.4 倍;macOS 上 cat 150 MB 文件时间从 1.5 秒缩短至 566 毫秒。
- 渲染与交互:调整大小速度提升约 6 倍;渲染器每帧持有锁时间减少 2.7 至 11 倍;复制与搜索速度提升 1.5 至 8 倍;OSC 52 剪贴板解析速度提升约 30 倍。
- 启动与能耗:macOS 启动至可见窗口速度提升 15%,首帧渲染提升 27%;空闲时渲染器进入休眠以降低能耗。
平台特性与核心改进
macOS 兼容性
新增对 macOS 27 (Golden Gate) 的支持,修复了标题栏标签布局、原生标签栏玻璃风格融合、透明度设置下的显示问题及应用图标边框等问题。Ghostty 1.4 仍兼容 macOS 13 (Ventura) 及以上版本,但鉴于苹果已于 2025 年秋季停止对 macOS 13 的安全支持,官方计划在未来版本中弃用对该系统的支持。
GTK 渲染管线重构
GTK 应用采用全新渲染管线,不再依赖 GtkGLArea。渲染器在独立线程上使用 EGL 绘制并导出 DMABUF,引入三重缓冲以减少画面撕裂。在分数缩放(如 125%)下,文本和框线字符清晰锐利。新管线要求 GTK 4.18 和 libadwaita 1.7,Ubuntu 24.04 LTS 用户建议使用 Flatpak 包或旧版 Ghostty。
SSH 集成与分屏重组
新增 ghostty +ssh CLI 命令,作为 ssh 的无缝替代品,自动在远程主机安装 terminfo 并转发环境变量。GTK 版现支持通过拖拽手柄重组分屏,内容与进程随拖拽移动,行为与 macOS 1.3 引入的功能保持一致。
Kitty 剪贴板协议 (OSC 5522)
在 macOS 和 GTK 上实现 Kitty 剪贴板协议,支持程序读写图像、HTML 等多格式剪贴板数据,并提供粘贴事件识别。默认读取需用户授权,新增 clipboard-write-limit-bytes 配置限制单次写入大小(默认 64 MiB)。
行为变更与配置调整
- copy-on-select:重做配置项,接受
none,primary,clipboard,both。macOS 默认值改为none。clipboard现仅复制到系统剪贴板,若需同时复制到选择剪贴板和系统剪贴板请设为both。 - 快捷键调整:macOS 上
cmd+arrow_up/down恢复为jump_to_prompt;GTK 上ctrl+shift+page_up/down用于移动标签页。 - 配置更名:
scrollback-limit更名为scrollback-limit-bytes,新增scrollback-limit-lines按行数限制。 - 其他:新增
middle-click-action配置;升级至 Unicode 18;核心终端仿真新增软终端重置、扩展光标位置报告等序列支持。