我是 RustDesk 的重度用户。自己搭了中继服务器,家里、公司、手机、笔记本全部接入,随时随地远程到任意一台机器,爽得很。
但现在碰到一个痛点。Claude Code 和 Codex 越用越重,在一台机器上跑起来的 session 不想断,换个地方就没法接着用。一开始我想搓个 session 同步工具,把多台设备的缓存对齐,但我的环境 Windows/macOS/Linux 混着来,不同系统下的 session 根本不通用,适配太麻烦,搭建同样的运行环境也是一个麻烦事。
那就换个思路,直接远程连回那台机器不就行了?
RustDesk 确实能远程打开终端。第一种方式是全桌面远程,打开桌面后再打开终端,用起来太重了,光是画面传输就吃掉不少带宽,线路差一点操作迟滞、画面模糊。第二种是 RustDesk 自带的“终端 (beta)”功能,直接开一个终端窗口。但这个窗口是个 Flutter 里嵌套的 xterm ,GUI 模拟的,不是真正的原生终端,所以不能 pipe 给本地命令,选中复制都不行,只能救急。
于是我想,能不能把 GUI 层彻底扔掉,让远端终端的画面直接在本地终端里渲染?
这就是 rustshell 的起点,整个代码库只有一个不到 600 行的 main.rs 。
https://github.com/minibear2021/rustshell
RustShell 是建立在 RustDesk 的完整协议栈之上的终端复用工具,ID 服务器、中继通道、端到端加密、SHA-256 认证,所有安全机制原封不动。所有已经接入 RustDesk 管理的设备可以零配置使用。唯一的变化是:打开的不再是 GUI 窗口,而是本地原生的 Terminal 。
因为终端的数据量相比桌面画面几乎可以忽略不计,响应速度提升了不止一个数量级。而本地终端的原生体验——字体、配色、快捷键、复制粘贴、管道操作全部原样保留。
想想一下这个场景:公司用 Windows ,家里开发机跑 Linux ,笔记本是 macOS 。你在公司午休时想接着改下昨天在家写的代码,终端敲一行 rustshell -i <设备 ID> -s <ID 服务器>,三秒连回自己的开发机,所有 session 原地复活,Claude Code 里 token 在疯狂燃烧。老板走过来看你屏幕狂闪,频频点头,直夸小伙子很认真嘛。