Skip to content

Termux Capability Matrix

AceGuru-mjh edited this page Oct 1, 2026 · 4 revisions

Termux 能力对照矩阵

🖥️ 终端 & Linux · 🏠 首页 › Termux-Capability-Matrix

Home Version Kotlin Modules Tools License

Termux-Capability-Matrix

📑 本页目录

platform/terminal 与 Termux(app + termux-packages + proot-distro + termux-api)的逐项对照。 来源 docs/terminal/TERMUX_CAPABILITY_MATRIX.md(15 节 150+ 项),本页是 Wiki 化精选。 图例:✅ COVERED · 🟡 PARTIAL · ❌ MISSING · 💀 死层 · 🏗️ T82 已补 · 📋 有意不做 · ⛔ 平台限制。

1. 终端模拟

能力 状态 说明
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

2. PTY / 进程 / 信号

能力 状态 说明
真 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/多字节保留

3. 执行环境(PRoot Ubuntu vs Termux native prefix)

能力 状态 说明
完整 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)已改为内置交付

4. 包管理与工具链

能力 状态 说明
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

5. 网络

能力 状态 说明
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 / 端口转发 ❌→📋 暴露面,需安全评审

6. Agent-First 能力(我方超出 Termux)

能力 状态 说明
结构化观察 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

7. 有意不做(NOT silently skipped,7 项)

  1. 会话跨 App 死亡保活(需 supervisor service + 进程死亡矩阵,本环境无法验证);
  2. guest 内 sshd(暴露面);
  3. X11 / VNC GUI(独立产品面);
  4. 内置 rootfs(原为 APK 体积产品决策 —— 已于 T83 落地);
  5. ARM32(无 Ubuntu armhf base);
  6. 鼠标上报(需先有 UI 手势层);
  7. 物理 Gradle 模块拆分(尚无第二消费方)。

8. 死层判决(~5000 行,PR#55–#67 平行层)

死层 判决
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 任务。

9. 相关页面

footer

🏠 返回首页 · 📚 文档索引 · ❓ FAQ · 🔧 故障排查 · 🗺️ 路线图 · 🐛 提 Issue

Android Guru Agent · v1.4.4 · Kotlin 2.0.21 · Compose · PRoot · Room

Clone this wiki locally