-
Notifications
You must be signed in to change notification settings - Fork 2
Termux Capability Matrix
AceGuru-mjh edited this page Oct 1, 2026
·
4 revisions
📑 本页目录
platform/terminal与 Termux(app + termux-packages + proot-distro + termux-api)的逐项对照。 来源docs/terminal/TERMUX_CAPABILITY_MATRIX.md(15 节 150+ 项),本页是 Wiki 化精选。 图例:✅ COVERED · 🟡 PARTIAL · ❌ MISSING · 💀 死层 · 🏗️ T82 已补 · 📋 有意不做 · ⛔ 平台限制。
| 能力 | 状态 | 说明 |
|---|---|---|
| VT100/xterm CSI(cursor/erase/scroll/DECSTBM) | ✅ | 自有 TerminalCore,保留自有实现(Termux 用 jackpal fork) |
| SGR 8/16/256/truecolor + 属性 | ✅ |
applySgr(bold/dim/italic/underline/blink/inverse/strike) |
| Alt screen(47/1047/1049)+ cursor save | ✅ | switchAlternateScreen |
| UTF-8 / 宽字符 / 组合字符 | ✅ |
Utf8Decoder + UnicodeWidth
|
| Scrollback | 🟡→🏗️ | 保留 1000 行但曾无 API 可读取;T82 暴露 scrollbackLines()
|
| DEC 特殊图形字符集 | ❌→🏗️ | 被 C.UTF-8 缓解,T82 加 G0 DEC graphics map |
| 鼠标跟踪(1000/1002/1006) | ❌→📋 | Agent 价值低,TUI 靠按键足够 |
| OSC 52 剪贴板 | ❌→🏗️ | T82 解析 + drain API |
| Bell 事件 | ✅ |
drainBell() 序号(只增,连续多声不丢),UI 振动 30ms(vibrateOnBell,默认开) |
| 窗口标题上屏(OSC 0/1/2) | ✅ | tab 优先显示标题,次行显示 #id 后端
|
| 双击选词 | ✅ |
TerminalGrid.wordRangeAt()(分隔符含 -_. /:~,一次可选中路径片段) |
| 保持常亮 | ✅ |
keepScreenOn(默认关),离屏 DisposableEffect 必还原 |
| DECCKM 应用光标键 | ❌→🏗️ | 此前输入恒为 CSI,T82 修 |
| F1–F12 | ❌→🏗️ | T82 全 F 键映射 |
| 括号粘贴(2004) | 🟡→🏗️ | 仅解析不发包裹,T82 加 PASTE 写类型 |
| Resize + SIGWINCH | ✅ | native TIOCSWINSZ
|
| 能力 | 状态 | 说明 |
|---|---|---|
| 真 forkpty + session leader | ✅ |
pty_session.cpp,20 会话并发 host 验证 |
进程组信号 kill(-PGID)
|
✅ |
killProcessGroup(tcgetpgrp + session group + ESRCH fallback) |
| 只给前台命令发信号 | ❌→🏗️ | 曾同时命中 fg 与 shell(一次取消报废会话);T82 signalForegroundGroup + 工具 scope=JOB
|
| 每命令真实退出码 | ❌→🏗️ | 曾在 prompt-regex 返回时合成 exitCode=0(每个 job 都是假码);T82 OSC 633 marker 协议
|
| Zombie reaping | ✅ | 有界 WNOHANG 循环 |
| Timeout → TERM→grace→KILL | ✅ |
TimeoutController 三阶段,不再 group-kill shell |
| Ctrl-C/D/Z | ✅ | 0x03/0x04/0x1A 经 PTY,ISIG 内核态投递 |
| 会话跨 App 重启存活 | ❌→📋 | 恢复是诚实 tombstone(EXITED/BROKEN),PTY fd 是进程本地;设计草案 TerminalSupervisorService
|
| 二进制安全 stdin/stdout | ✅ | P70 byte channels,NUL/多字节保留 |
| 能力 | 状态 | 说明 |
|---|---|---|
| 完整 Linux userspace | ✅ | 真实 Ubuntu 24.04.4 rootfs(校验和锁定 + 原子激活);架构选择不同(PRoot vs native),CLI/dev 能力等价 |
| guest 内 /proc /dev /sys | ❌→🏗️ | 裸 -r 使 ps 看到空 /proc;T82 SystemBindProfile.STANDARD
|
| 共享存储(等价 termux-setup-storage) | ❌→🏗️ | T82 SharedStorageBridge(无权限时诚实不 bind) |
| 持久 home | ✅ | T75 home bind,存活于 rootfs 升级 |
| 每任务隔离 workspace | ✅ | T75 LinuxWorkspaceManager(按会话目录 + 引用计数)——超出基线
|
| apt ↔ 交互终端共享同一 fs/db | ✅ | 构造级共享(LinuxExecutionContextFactory) |
| 32-bit ARM | ⛔ | Ubuntu Base 无 armhf,诚实失败 UNSUPPORTED_ARCHITECTURE
|
| 离线/内置 rootfs | ❌→✅ | 原为网络单源;v1.2.0(T83)已改为内置交付 |
| 能力 | 状态 | 说明 |
|---|---|---|
| apt install/remove/update/upgrade/search/info | ✅ |
UbuntuAptPackageManager 10 ops、结构化 25 错误码、双锁、磁盘预检 |
| installed 列表 | ❌→🏗️ | 曾是诚实 stub;T82 真实 dpkg-query 解析 |
| 镜像源切换 | ❌→🏗️ | T82 AptMirrorRegistry(official / TUNA / USTC / Aliyun) |
| 基础包集 | ✅ |
21 essential(curl/wget/git/python3…)+ 10 recommended;T82 加 locales + tzdata
|
| 工具链 probe | ✅ |
LinuxCapabilityProbe 15 项真实探测 + TTL 缓存 |
| 一发式"确保工具链" | ❌→🏗️ | T82 terminal.linux.capabilities ensure(probe → install → verify) |
| locale / 时区 | 🟡→🏗️ | 曾只有 C.UTF-8、UTC 兜底;T82 注入 locale.gen + tzdata |
| 能力 | 状态 | 说明 |
|---|---|---|
| curl/wget/openssl + ca-certs | ✅ | essential |
| guest 内 DNS | 🟡→🏗️ | 曾是 8.8.8.8 兜底(CN 网络会失效);T82 由 app DI 注入 LinkProperties DNS |
| 代理 | ❌→🏗️ | T82 ProxyConfig → http_proxy/https_proxy/all_proxy/no_proxy
|
| 网络诊断 | ✅ |
terminal.linux.network 4 维 probe(DNS/HTTP/HTTPS/APT)——超出基线
|
| ssh 客户端 | 🟡 | recommended 包,Agent 可装 |
| ssh server / 端口转发 | ❌→📋 | 暴露面,需安全评审 |
| 能力 | 状态 | 说明 |
|---|---|---|
| 结构化观察 API | ✅ | 4 模式(semantic / screen / raw / event)+ 游标 + 有界缓冲 |
| Wait engine | ✅ | 条件驱动,9 条件,事件驱动 |
| 机器可读工具契约 | ✅ |
20+ terminal.* 工具带 JSON schema |
| 事件日志/审计 | ✅ | 有界 500 事件 + bus |
| 崩溃恢复诚实 | ✅ | 不伪造 RUNNING |
| 健康/诊断编排 | ✅ | 6+1 维 health + 单轮 repair + 生命周期 coordinator |
| P60 冻结公共 SDK | 💀→🏗️ |
api/TerminalApi.kt 曾零实现;T82 TerminalSdk 适配器使其成真 |
| 一次性结构化 exec | 🟡→🏗️ |
exec 包 + terminal.exec:{stdout, stderr, exit_code, duration_ms, truncated}(snake_case),双层防线(head 64K + tail 64K 环形) |
| guest ↔ Android 桥(termux-api 等价) | ❌→🏗️ | T82 apexctl 文件队列桥(基于 home bind),已接线 clipboard / device-info / battery |
- 会话跨 App 死亡保活(需 supervisor service + 进程死亡矩阵,本环境无法验证);
- guest 内 sshd(暴露面);
- X11 / VNC GUI(独立产品面);
- 内置 rootfs(原为 APK 体积产品决策 —— 已于 T83 落地);
- ARM32(无 Ubuntu armhf base);
- 鼠标上报(需先有 UI 手势层);
- 物理 Gradle 模块拆分(尚无第二消费方)。
| 死层 | 判决 |
|---|---|
process2(293 行) |
💀 不接线,能力由生产路径交付(marker 退出码 + native fg 信号) |
observation2(281 行,测试用) |
保留(接线 = 重写受保护的生产组件) |
reliability2 + RecoveryCoordinator(438 行) |
保留(生产恢复是 RuntimeRecoveryService) |
InputLayer2(303 行) |
保留(TtyMode 不接线是正确的 —— 程序自己拥有 termios) |
LinuxRuntimeContract(517 行) |
保留为契约文档(T82 实现的是能力 GuestFilesystem) |
| environment adaptive stack(~1600 行) | 保留(生产路径 = LinuxCapabilityProbe + EnvironmentRepairService) |
api/TerminalApi(332 行) |
🏗️ 唯一例外:T82 以适配器落地 |
Note
判决原则:不接线、不删除(T81 判决)—— 能力由生产路径实现,删除是独立的 hygiene 任务。
-
MCP 生态总览
新 - (沙箱 MCP · 官方 Hub · 逆向 Host · 门控语义)
- 终端运行时
- 终端 API 契约
- SDK 边界
- Termux 能力矩阵
- Ubuntu rootfs 供给
- Ubuntu 生命周期
- PRoot 二进制溯源
- VT100/ANSI 模拟器
- 终端性能
- 终端迁移
- 原生层 C++/JNI