‹ Term

mosh 服务端

termoshv0.6.1

可直接替换 mosh-server 1.4.0。配合 Term,编程智能体的样子和表现与在电脑上一样;配合其他 mosh 客户端,它就是 mosh。在任何服务器上,空闲时内存只占 2–3 MB。

  1. 1智能体的回复整帧送到,不会只画一半。
  2. 2把 Term 切到浅色,智能体在会话中途就按新配色重画。
  3. 3往上一滑,滚过去的每一行都还在,不用 tmux。
  4. 4换了网络,会话照常继续——这是 mosh 本来就有的,termosh 一样保留。

直接替换 mosh-server 1.4.0

termosh 可以直接替换 mosh-server 1.4.0。凡是能用 mosh 的地方都能用 termosh,客户端什么都不用改。

01

同样的命令

启动命令、参数和环境变量(端口范围、超时、语言环境)都一样。任何 mosh 客户端都按启动 mosh-server 的方式启动它。

02

同样的协议

同样的加密 UDP 协议和握手,逐字节一致,所以漫游、预测回显和重连的表现和以前完全一样。

03

同样的测试结果

mosh 1.4.0 自带一套端到端测试。termosh 跑出的结果与 mosh-server 本身完全相同:24 项通过,外加上游标记为预期失败的 2 项。

04

自己的代码

用 Rust 从头写成,没有用 mosh 的任何代码:mosh 采用 GPL v3 许可证,用了就得公开 Term 的源代码,而 Term 不是开源软件。没有用它的代码,也就不存在版权问题。Term 的 mosh 客户端也是同一套从头写的实现。

谁能得到什么

termosh 原样使用 mosh 协议,所以任何 mosh 客户端都能连上它。额外的能力由 Term 画出来;其他客户端得到的是一个普通的 mosh 会话,和服务端仍是 mosh-server 时一模一样。

Term + termosh 其他客户端 + termosh 任意客户端 + mosh-server
切换 Wi-Fi 与移动网络、锁屏、弱信号都不断
内存(一个空闲会话) 2.2 MB 2.2 MB 3.8 MB
编程智能体跟随你的深浅色切换 同 mosh —
整帧刷新,回复不会画一半 同 mosh —
可点按的链接 同 mosh —
波浪线、点线、虚线、双下划线 同 mosh —
程序要求的光标形状 同 mosh —
往回翻看输出,不用 tmux 同 mosh —
其余全部:智能体即开即用、Shift+Enter 换行、长行随尺寸重新折行、tmux 复制到手机等 → 同 mosh —

「同 mosh」表示客户端显示的和配合 mosh-server 时一样:什么都不会坏,也没有额外的。

配合 Term

为会话另一端的编程智能体而设计。

跟随你的主题

会话中途把 Term 切到深色或浅色,Claude Code、Codex 立刻按新配色重画。

智能体即开即用

智能体启动时问的几个问题当场就有回答,不用干等,也不会关掉功能凑合着启动。

整帧刷新

每一帧画完整了才整帧发出,不闪烁,回复不会只画一半。

可点按的链接

程序打印的链接到手机上仍是链接,点一下就能打开或复制。

每一种下划线

错误下的红色波浪线、提示下的点线,样式和颜色都完整送达。

对的光标

在 vim 里输入时是细竖线,移动时是方块,按程序的要求来。

往回翻,不用 tmux

普通 mosh 没有回滚历史。用 termosh,每一行滚出屏幕的输出都会进 Term 的历史——构建日志、智能体的长回复,连带进度条的 <code>apt upgrade</code> 输出也在——往上一翻就能看到。

历史接得回来

强制退出 Term,或手机放下一阵子:会话恢复时,最近的输出又回到回滚历史里,连你不在时智能体打印的内容也在。

用真机截图逐项对比普通 mosh →

安装

termosh 装在服务器上,替代 mosh-server。每台主机一条命令,不需要 root,主目录以外什么都不改。

Windows 版为测试版。已在 Windows Server 2025 x64 上测试:连接、输入、调整大小、回滚历史、UTF-8 与中日韩文字、干净退出。尚未在 Windows 10/11 桌面版、ARM64 上测试,也未在经过 Windows 防火墙的真实网络上测试。

  1. 在服务器上运行安装脚本

    Linux任何发行版,x86_64 或 ARM64。完全静态编译,Alpine、较老的企业版系统、BusyBox 系统也能用。会按发布的校验和核对,装到 ~/.local/bin。

    macOSApple 芯片或 Intel 都行。Mac 需要打开远程登录(系统设置 › 通用 › 共享),因为 Term 通过 SSH 启动服务端。

    WindowsWindows 10 1809 及以上,x64,需要运行 OpenSSH Server,并以 cmd.exe 为默认 shell(默认就是)。在 PowerShell 里:下载、核对哈希、解压到用户目录,再让 mosh 的 UDP 端口通过 Windows 防火墙(需管理员 PowerShell;服务器前面如有云防火墙,也要放行同样的端口)。

    在服务器上
    curl -fsSL https://term.const.net/termosh/install.sh | sh
    Windows在服务器上 · PowerShell
    iwr https://term.const.net/termosh/0.6.1/termosh-0.6.1-windows-x86_64.zip -OutFile termosh.zip
    (Get-FileHash termosh.zip).Hash      # compare with its line in SHA256SUMS
    Expand-Archive termosh.zip $env:USERPROFILE\termosh -Force
    New-NetFirewallRule -DisplayName termosh -Direction Inbound -Protocol UDP -LocalPort 60000-61000 -Action Allow
  2. 让 Term 使用它

    编辑主机,在连接方式里选 Mosh,打开 Mosh 选项,把安装脚本最后打印的路径填进 mosh-server 命令。

    编辑主机:在连接里选 Mosh,打开 Mosh 选项,把 termosh.exe 的完整路径填进 mosh-server 命令,如下所示。需要 Term 26.7.0 及以上。

    mosh-server 命令~/.local/bin/termosh
    mosh-server 命令%USERPROFILE%\termosh\termosh.exe
  3. 连接

    就这些。这台主机的下一个会话就跑在 termosh 上。

    就这些。这台 Mac 的下一个会话就跑在 termosh 上。

    就这样。这台主机的下一个会话就跑在 termosh 上,shell 是 cmd.exe。

    确认
    ~/.local/bin/termosh --version   # termosh 0.6.1
    确认
    & $env:USERPROFILE\termosh\termosh.exe --version   # termosh 0.6.1
不想用管道交给 sh?手动安装
Linux在服务器上
v=0.6.1; a=$(uname -m)    # x86_64 or aarch64
curl -fsSLO https://term.const.net/termosh/$v/termosh-$v-linux-$a.gz
curl -fsSLO https://term.const.net/termosh/$v/SHA256SUMS
sha256sum -c SHA256SUMS --ignore-missing
gunzip termosh-$v-linux-$a.gz
mkdir -p ~/.local/bin && install -m 755 termosh-$v-linux-$a ~/.local/bin/termosh
macOS在服务器上
v=0.6.1; a=$(uname -m)    # arm64 or x86_64
curl -fsSLO https://term.const.net/termosh/$v/termosh-$v-macos-$a.gz
curl -fsSLO https://term.const.net/termosh/$v/SHA256SUMS
shasum -a 256 -c SHA256SUMS --ignore-missing
gunzip termosh-$v-macos-$a.gz
mkdir -p ~/.local/bin && install -m 755 termosh-$v-macos-$a ~/.local/bin/termosh

给所有 mosh 客户端用

既然其他客户端得到的就是普通的 mosh,termosh 完全可以做所有 mosh 客户端启动的服务端。Term 拿到额外的能力,其他客户端照常工作。

Linux在服务器上 · root
curl -fsSL https://term.const.net/termosh/install.sh | sudo TERMOSH_INSTALL_DIR=/usr/local/bin sh
sudo ln -sf /usr/local/bin/termosh /usr/local/bin/mosh-server

几乎所有发行版的 PATH 里 /usr/local/bin 都排在 /usr/bin 前面,所以 mosh 会先找到 termosh。撤销:sudo rm /usr/local/bin/mosh-server。

macOSmosh
mosh --server=~/.local/bin/termosh you@your-mac

在 Mac 上,不要替换 Homebrew 的 mosh-server,改为让客户端指向它。每个 mosh 客户端都有类似的服务端选项。

其他 mosh 客户端:把它们的服务端选项指向 termosh.exe。在 Windows 主机上,在 termosh 的修复发布前,它们可能要等整个会话结束,SSH 命令才返回;Term 不需要等。

内存

在同一台 Linux 服务器上并排测量,各开一个 80×24 的会话。

刚连上

mosh-server
3.8 MB
termosh
2.2 MB
无回滚
2.2 MB

输出 20 万行之后

mosh-server
3.9 MB
termosh
5.3 MB
无回滚
2.3 MB

全屏重画 30 次之后

mosh-server
3.9 MB
termosh
3.0 MB
无回滚
2.3 MB

空闲时,termosh 的内存只要 mosh-server 的一半多一点:它是一个自带一切的程序,不加载 mosh-server 依赖的那些共享库。占内存的是回滚历史:termosh 保留最近约 1000 行,每行按整行宽度存放,所以大量输出后它比 mosh-server 用得多——80 列时约 5 MB,160 列时约 9 MB——会话开多久都不再增长。用 TERMOSH_SCROLLBACK=0 termosh 启动,就一直在 2 MB 左右。在 macOS 上,一个会话空闲约 3 MB,大量输出后约 8–9 MB,与原版 mosh-server 的 8–10 MB 相当;请看活动监视器的“内存”一栏,而不是 ps 的 RSS——macOS 会把部分已释放的内存留在驻留集里,等需要时才回收。

网络

在七种模拟网络下与原版 mosh-server 对比,两者都连接 Term 自己的 mosh 客户端。数值越小越好。

按下一个键到字符出现在屏幕上的时间,单位毫秒。

网络mosh-servertermosh
同一机房 · ≈0 ms 10.5 1.0
家庭或办公网络 · 10 ms 23.2 13.2
高速宽带 · 30 ms 44.9 35.0
移动数据 · 100 ms 115 107
信号弱 · 100 ms,丢包 5% 114 104
慢速线路 · 150 ms,1 Mbit/s 241 156
跨越半个地球 · 300 ms 317 305

5000 行输出在屏幕上全部显示完的时间,单位毫秒。

网络mosh-servertermosh
同一机房 · ≈0 ms 31 26
家庭或办公网络 · 10 ms 43 36
高速宽带 · 30 ms 251 81
移动数据 · 100 ms 383 224
信号弱 · 100 ms,丢包 5% 136 213
慢速线路 · 150 ms,1 Mbit/s 518 324
跨越半个地球 · 300 ms 889 462

手机安静下来、输出仍在继续时,20 秒内发给手机的数据包数——数据越少,越省流量和电量。

网络mosh-servertermosh
同一机房 · ≈0 ms 925 6
家庭或办公网络 · 10 ms 893 6
高速宽带 · 30 ms 908 6
移动数据 · 100 ms 376 6
信号弱 · 100 ms,丢包 5% 376 7
慢速线路 · 150 ms,1 Mbit/s 248 6
跨越半个地球 · 300 ms 131 6

手机回来后屏幕追上最新内容的时间,单位毫秒。

网络mosh-servertermosh
同一机房 · ≈0 ms 946 22
家庭或办公网络 · 10 ms 951 33
高速宽带 · 30 ms 984 58
移动数据 · 100 ms 1,031 126
信号弱 · 100 ms,丢包 5% 1,031 126
慢速线路 · 150 ms,1 Mbit/s 1,063 182
跨越半个地球 · 300 ms 1,232 327

这些改进需要 termosh 0.5.6 和 Term 26.7.2 或更高版本——App 自带的 mosh 客户端也是改进的一部分。termosh 0.5.6 对比 mosh-server 1.4.0,每格测 3 次取中位数。网络在同一台机器上模拟(Linux netem),真实线路会有自己的波动。原版更好的一种情况:信号弱时的大量输出。

下载 · v0.6.1

静态编译、去掉符号、gzip 压缩(Windows 为 zip)。在 Linux 和 macOS 上,安装脚本会替你选对的那一个。

平台文件大小
Linux · x86_64 termosh-0.6.1-linux-x86_64.gz sha256 864f6ce75c0ed80f… · 0.87 MB 0.87 MB
Linux · aarch64 termosh-0.6.1-linux-aarch64.gz sha256 2a417feb0795f6e7… · 0.81 MB 0.81 MB
macOS · arm64 termosh-0.6.1-macos-arm64.gz sha256 e75b57fb7170f50a… · 0.71 MB 0.71 MB
macOS · x86_64 termosh-0.6.1-macos-x86_64.gz sha256 282011c959d13a18… · 0.75 MB 0.75 MB
Windows(测试版) · x86_64 termosh-0.6.1-windows-x86_64.zip sha256 fd08203ef73c108a… · 0.77 MB 0.77 MB
发布于 2026-10-30 SHA256SUMS install.sh

0.6.1:链接很多的长会话不再让输入卡上好几秒;会话再长,emoji 的宽度也不会出错;大量输出时服务器更省 CPU。

更早的版本
  1. 0.6.02026-10-23

    弹出或收起键盘不再让 Term 的历史出现重复行;apt 的输出现在会进入回滚历史;图片输出中途被打断(如在 icat 时按 Ctrl+C)后,屏幕不再一片空白。

  2. 0.5.62026-10-17

    在 Term 里打字的回显快了约一倍,不比原版 mosh 慢;快速网络上不再偶尔卡顿一秒;持续输出时发出的数据包少得多。

  3. 0.5.52026-10-16

    编程智能体的状态报告按 Ghostty 的方式解读,一个子任务清除状态时不会再把其他的一并清掉。

  4. 0.5.42026-10-13

    Windows(测试版):连上之后服务端转入后台,和 Linux、macOS 上一样。

  5. 0.5.32026-10-13

    Windows:shell 退出时,会话随之结束。

  6. 0.5.22026-10-13

    大量输出之后,macOS 上的内存占用约减半。

  7. 0.5.12026-10-12

    瞬间涌出的大量输出(如 seq 1 200)每一行都会进入回滚历史。

  8. 0.5.02026-10-12

    mosh 也有回滚历史了:滚过去的输出进入 Term 的历史,重新连上时最近的输出也会回来。

校验下载的文件
sha256sum -c SHA256SUMS --ignore-missing   # macOS: shasum -a 256 -c … · Windows: Get-FileHash

小贴士

端口

termosh 使用和 mosh 相同的 UDP 端口 60000–61000。防火墙放行了 mosh,就放行了 termosh。

Term Pro

从 26.6.3 起 Mosh 属于 Term Pro,termosh 随之附带。额外的能力需要 Term 26.7.0 或更高版本。

最近的输出,只在内存里

为了提供回滚历史,termosh 在内存里保留最近约 1000 行输出——从不写磁盘——程序清空回滚时它也随之清空。80 列时每个会话约 3 MB,连上后的第一屏更新会大一些。用 TERMOSH_SCROLLBACK=0 termosh 启动即可关闭。

卸载

删除 ~/.local/bin/termosh,清空主机的 mosh-server 命令。下一个会话就回到 mosh-server。

缩短不了距离

300 ms 的线路上,按键回显仍要 300 ms 左右,换哪个服务端都一样。termosh 去掉的是 mosh 额外的等待,以及发给休眠手机的数据。

省略了什么

不写 utmp/wtmp,所以 who 和 last 里看不到 termosh 会话;-c 能用(和原版一样会设置 TERM),但不模拟颜色数;-v 能用,但不输出详细日志(要排查请设 TERMOSH_DEBUG)。其余都与 mosh-server 一致。