Termio server
一台机器上跑着什么,才让会话比应用活得久——termiod 怎么装、怎么保活、怎么原地升级,以及出问题时怎么查。
每个会话都跑在 termiod —— Termio server —— 里,跑在拥有它的那台机器上,本机的会话也
一样。Mac 应用、iOS 应用和命令行都只是观察者:它们连上一个会话,再断开。会话不属于
你当时正在看的那个窗口。
这正是退出 Termio 不会杀掉你的 Agent 的原因。
它是什么
termiod 是会话的宿主,不是窗口管理器。它持有 PTY、保存回滚缓冲,并在有观察者连上来时
给它一份快照。本机的观察者通过 Unix socket 找到它;远程则由应用开一条 SSH 管道,连到对
面那台机器上同一个二进制。一套协议,两种走法——这就是 VPS 上的会话用起来和本机一样的
原因。
窗格、拆分和布局是应用的事,永远不是 server 的事。
装到一台机器上
有两种装法,都把同一个二进制放进 ~/.local/bin,都不需要 root,也不需要包管理器。
在 Linux 机器上直接装
curl -fsSL https://www.termio.sh/install | sh它按机器的架构(x86_64 或 aarch64)下载 termiod、termio 命令行工具和 termio-tailnet,
用发布时的校验和核对,装好后用 systemd --user 让守护进程一直运行。这些构建是静态链接的,
所以不挑发行版。
接着它用内置的 Tailscale 把 server 加入你的 tailnet,并打印一条登录链接。用你的 Mac 和 iPhone 所用的 Tailscale 账号登录。这台机器不需要装 Tailscale。登录后,安装脚本会打印一条配对链接和 一个二维码。在 Mac 上把链接粘贴到设置 ▸ 远程主机 ▸ + ▸ 与设备配对…,或者用 iPhone 应用 扫码。之后就不再经过 SSH。
再跑一次就是原地升级,会话在升级过程中继续运行。选项写在 sh -s -- 后面:
| 选项 | 作用 |
|---|---|
--version 0.63.0 | 安装指定版本,而不是最新版。 |
--no-service | 只装二进制,守护进程由你自己启动。 |
--no-tailscale | 不加入 tailnet。 |
--tailscale-auth-key-file FILE | 用一次性的 auth key 加入 tailnet,不走浏览器登录。 |
--dry-run | 只打印要做的事,不做任何改动。 |
从 Mac 通过 SSH 装
在设置 ▸ 远程主机里添加一台机器并按设置,就会通过 SSH 把二进制复制过去并启动它。
termio server deploy # 在本机安装或更新,然后校验
termio -H mybox server deploy # 同样的事,走你自己的 SSH 配置deploy 是一次调和:无论机器处于什么状态,跑完都落到同一个状态。Termio 读
~/.ssh/config 找主机,所以一台你已经能 ssh 上去的机器不需要任何新配置。参见
设备。
-H(--host)对每一条 termio 命令都有效,不只是 deploy:
termio -H mybox server status、termio -H mybox session attach api。
让它一直活着
termio server service install # macOS 用 launchd,Linux 用 systemd --user没有 service 时,server 只活到你这次登录结束。装上之后,它会在崩溃后和重启后自己回来—— 这正是一台你只从远程访问的机器所需要的。
内置 Tailscale
server 可以用内置的 Tailscale 作为一台独立设备加入你的 tailnet,设备名为 termio。这台机器
不需要装 Tailscale。
termio server tailscale on # 第一次会打印登录链接
termio pair --qr # 连上之后,打印配对链接和二维码只有登录它的那个 Tailscale 账号能连进来,而且每台 Mac 或 iPhone 仍然需要配对链接。这个设置在 重启和开关机后保留。
如果你的 tailnet 开启了 HTTPS 证书,客户端通过 https://termio.<tailnet>.ts.net 访问 server;
没开的话,就用它在 tailnet 上的地址加 8790 端口,Tailscale 本身已经对这条连接加密。
| 命令 | 作用 |
|---|---|
termio server tailscale on --hostname NAME | 换一个设备名。 |
termio server tailscale on --auth-key-file FILE | 用一次性的 auth key 登录,不走浏览器。 |
termio server tailscale status | 显示是否已连上,以及客户端从哪里访问它。 |
termio server tailscale off | 离开 tailnet,直到再次 on。设备保持登录。 |
termio server tailscale logout | 让设备退出 Tailscale 登录,并关闭内置 Tailscale。 |
升级而不丢会话
新版本会原地替换正在运行的那个:进程保留自己的 pid 和 PTY,会话完全察觉不到。
termio server handoff应用自我更新时走的也是这条路——这就是 Termio 更新不会让你损失正在跑的 Agent 的原因。 每种情况见什么会留下来,包括 handoff 覆盖不了的那些。
查看它
三条命令几乎能回答所有「是我的问题还是 Termio 的问题」:
| 命令 | 它告诉你什么 |
|---|---|
termio server status | 这台机器上有什么:二进制、它的版本,以及 socket 上是否真的有守护进程在应答。 |
termio session ls --all | 宿主正持有的会话——加 --host <box> 可以问另一台机器。 |
termio server logs | 没有观察者连着的时候,server 记下了什么。-f 跟随输出,--path 打印文件路径,方便附进 bug 报告。 |
termiod 就是 server 进程本身,它只负责运行。本页的每一条命令都属于
termio 命令行工具,应用和安装脚本会把它放到你的 PATH 上。
停掉它
termio server stop当还有命令在跑、或还有观察者连着时,它会拒绝,所以一次手滑的 stop 不会连带毁掉 Agent
的工作。会话在它的进程结束时结束,或者在你关掉它时结束。