跳到主要内容
ansicode
终端

GNU screen —— ANSI 转义码支持情况

GNU screen 是最早的终端复用器 —— 1987 年由 Oliver Laumann 在柏林工业大学首次发布,1989 年改为 BSD 许可,1995 年进入 GNU 项目。它比 tmux 早 20 年,至今仍预装在每个主流发行版以及 macOS 的 `/usr/bin/screen`。复用器规范的 terminfo 条目 `screen-256color`(及更早的 `screen`)即得名于此;每个现代复用器(包括 tmux)出于兼容历来都别名为 `screen-256color`。

2026 年的 ANSI 转义图景比 tmux 粗糙,因为上游发布节奏极慢:screen 4.x 从 2003 用到 2024 年,screen 5.0.0(2024 年 4 月)是 21 年来第一个加入 24 位真彩色解析的版本,而 macOS Sonoma 的 `/usr/bin/screen` 至今仍是 2006 年的 v4.00.03 —— 它会把每条 `\x1b[38;2;…m` 静默降级到最接近的 16 色索引。OSC 8 超链接、扩展下划线(SGR 4:3–4:5)、删除线(SGR 9)、焦点事件、Sixel 与 Kitty 图形协议都被 screen 5.0 剥除 —— 它们永远到不了外层终端。在 2026 年若需要现代复用器,请选 tmux;只有当宿主无法安装新软件(旧服务器、受限基础镜像)或你明确依赖 screen 的 `screenrc` 生态时,才选 screen。

最近更新

特性支持情况

该终端在站点统一矩阵跟踪的 15 个特性上的表现。点击任意特性名可查看其在全部终端上的完整支持情况。

  • 8 种基础色(30–37 / 40–47)SGR 30–37 前景,40–47 背景。
    支持
  • 高亮(aixterm)色(90–97 / 100–107)aixterm SGR 扩展。
    支持
  • 256 色调色板(38;5;n / 48;5;n)xterm 256 色扩展。
    部分
  • 24 位真彩色(38;2;r;g;b)1670 万直接 RGB。设置 $COLORTERM=truecolor。
    部分
  • 斜体(SGR 3)斜体文本属性。
    部分
  • 扩展下划线(4:1–4:5)波浪/点/虚下划线样式。
    不支持
  • 删除线(SGR 9)文本中央的水平线。
    不支持
  • OSC 8 超链接内联可点击 URI。
    不支持
  • 备用屏幕(?1049h)全屏应用缓冲区。
    支持
  • 鼠标跟踪(SGR ?1006)鼠标点击/拖拽事件。
    部分
  • 括号粘贴(?2004)粘贴文本被 ESC[200~/ESC[201~ 包裹。
    部分
  • 焦点事件(?1004)获得焦点时 ESC[I,失去时 ESC[O。
    不支持
  • Sixel 图形DEC sixel 内联位图。
    不支持
  • Kitty 图形协议PNG/RGB 内联图像和动画。
    不支持
  • 同步输出(?2026)原子化帧更新,避免撕裂。
    不支持

在此终端可用的序列

该终端能完整处理的转义序列对应的权威参考页。每条均链接到完整页面,含字节形式、规范出处与多语言示例。

细节与版本说明

在生产中使用某序列前应知晓的、该终端特有的注意事项。

真彩色仅自 screen 5.0(2024 年 4 月)起 —— macOS 上仍未支持
GNU screen 5.0.0 是 21 年来第一个加入 `\x1b[38;2;r;g;b m` 与 `\x1b[48;2;r;g;b m` 解析器的版本。任何更早的版本(Ubuntu 22.04 LTS 自带 4.09.00、Debian Bookworm 自带 4.09.00、现有 macOS 系统全部自带 2006 年的 4.00.03)都会把真彩色 SGR 静默量化到最接近的 16 色 —— 也没有可切换的 `Tc`/`RGB` 能力开关让它生效。检测方法:`screen --version`(需 `5.0.0` 或以上)以及 `infocmp screen-256color | grep RGB`。可移植的绕行方法是:在你无法掌控 screen 版本的会话中,统一发送 256 索引色作为最大公约数。
OSC 8 超链接、扩展下划线、删除线 —— 全部被剥除
screen 的转义序列解析器是按原始的 VT100/VT220 手册加少量 1987 年后扩展手工编写的。任何更新的特性 —— OSC 8(2017)、SGR 4:3/4:4/4:5 扩展下划线(xterm 341,2018)、SGR 9 删除线 —— 都不被识别;相关字节在到达外层终端前就被丢弃,但可见的文本载荷(链接的锚文本、被划线 / 划除的词)仍会以普通样式打印。没有任何透传模式 —— 与 tmux 3.3+ 的 `allow-passthrough on` 不同,GNU screen 从不转发不认识的序列。如果你的程序在复用器里需要这些特性,请改用 tmux。
$TERM=screen-256color 与 terminfo 的爬坡
screen 启动 shell 时默认设置 `$TERM=screen-256color`(在 terminfo 数据库不含 256 色条目的较旧系统上为 `screen` —— 此时 `infocmp screen-256color` 会失败,需要 ncurses ≥ 5.0)。该条目声明 256 色、斜体(自 ncurses 6.0 起;更早版本没有),但从不声明 `RGB` / `Tc` 真彩色,也从不声明 `Smulx` 扩展下划线。可在每个 shell 中以 `TERM=screen-256color` 覆盖;也可在 `screenrc` 中用 `term screen-256color` 覆盖。需要检测 "正在任何复用器内运行" 的跨复用器程序应检查 `$STY`(screen 设置)或 `$TMUX`(tmux 设置),而不是 `$TERM`(容易误判 —— 出于兼容理由,几乎所有终端模拟器都会别名为 `screen-256color`)。
macOS /usr/bin/screen 来自 2006 年 —— 任何新特性请用 Homebrew 版本
Apple 自 macOS 10.5 Leopard 起就没再更新 `/usr/bin/screen`。截至 2026 年的 macOS Sonoma / Sequoia,`screen --version` 报告 `Screen version 4.00.03 (FAU) 23-Oct-06`。这个版本早于 ncurses 的 256 色条目,早于 UTF-8 成为默认,自然也早于 2024 年的真彩色发布。请用 Homebrew 的 `brew install screen` 安装当前 5.0.x,然后用 `/opt/homebrew/bin/screen` 替换 `$PATH` 中的 `/usr/bin/screen` 或为其设置别名。若不切换,你还会失去 `screen-256color` 的斜体支持 —— 依赖 terminfo `italic` 能力的程序会静默回退到普通文本。
括号粘贴、焦点事件、Sixel —— 一概不支持
DEC 私有模式 ?2004(括号粘贴)、?1004(焦点事件),以及 DCS sixel 封套都被 screen 解析后忽略。把多行 shell 提示符粘贴进 screen 仍会触发 Bash 自动补全 / 多行重放,因为没有 `\x1b[200~`/`\x1b[201~` 包装;依赖焦点事件自动保存的编辑器永远收不到事件;sixel 图像会打印成乱码的 C1 字节。和 OSC 8 不同,这些功能从未出现在 screen 项目路线图上 —— 要么太冷门(焦点事件),要么与 screen 的字符网格模型从根本上不兼容(sixel)。当你确知宿主是 screen 时,保守的发送策略是:跳过这些特性,优雅降级。
Detach / reattach 会保留内部状态 —— 包括 SGR
用 Ctrl-A d 分离 screen 会话并在稍后重新连接(可能来自另一个 SSH 会话,也可能连到完全不同的外层终端),screen 会把其持久化的字符网格 + SGR 状态重放给新的外层终端。这能工作是因为 screen 保存的是渲染后的网格,而不是原始字节流 —— 因此若你在 screen 5.0 上发送 24 位 `\x1b[38;2;255;0;0m`,稍后从非真彩色的外层终端重连,颜色会由 screen 自己的渲染器在重绘时量化,而不会丢失。同一持久化机制也意味着会话内执行的 `clear` 命令会跨越重连保留;瞬时字节(鼠标抖动报告、DA 响应)则在生成时立即应答,不会被重放。

参考资料

其他已有专页的终端