[App Sharing] 我用C/C++写了一个终端Nutty,支持 SSH,邀请大家来体验
Tofloor
poster avatar
xjs951425301
deepin
8 hours ago
Author

大家好,我写了一个终端模拟器,叫 Nutty

先放官网:

https://nutty.net.cn

支持 Windows、macOS 和 Linux。

截屏2026-07-26 23.11.38.png

为什么又做了一个终端?

我平时工作基本离不开终端。

本地开发开几个终端,编码、codex、跑本地测试都在这几个终端里完成;通常如果外出,还会用ssh去连接开发测试环境。

远程连接的时候,通常我还要用SFTP传文件,配端口转发,还会用到 rzsz 快速传文件。

我找了很多终端,也有不少做得非常成熟。但我自己用下来,总有一些地方不太顺手:

  • 有的功能很全,但界面比较复杂;
  • 有的终端体验不错,但 SSH、SFTP 和端口转发都没有内嵌在里面;
  • 有的基于 Electron,但内存占用太高了,我个人还是更喜欢原生应用的手感。

Nutty 使用 C / C++ 开发。主要用到了 SDL3、ImGui、libvterm、libssh2。

目前已经做了什么?

先列一下现在能用的功能:

  • 本地终端,搜索、文本选择等基本功能;
  • SSH、SFTP、隧道转发、跳板机;
  • SSH 主机管理和搜索;
  • 多标签页、水平、垂直分屏;
  • 标签页快速过滤和标记;
  • 多终端同步输入;
  • Zmodem,也就是 rzsz
  • Sixel 图片协议;
  • 会话恢复;
  • 主题、字体和快捷键配置。

性能

性能时我做这个终端的主要原因之一,所以放将它放在第一位。我深度优化libvterm 和 渲染性能。从目前benchmark 脚本输出性能来看,是超过了ghostty、iterm2、alacritty、wezterm、windterm。

测试机器为:MacBook Air M4 16G。

目前瓶颈在dd 命令到 pty 的输出上。

字符换行模式下带宽 字符不换行模式下带宽
232M/s 272M/s

image.png

image.png

SSH 和本地终端放在一起

Nutty 里可以同时开本地 Shell 和远程 SSH,不需要本地终端一个软件、SSH 再开另一个软件。

SSH 主机可以集中管理,支持搜索、密码、私钥、跳板机和 TOTP。已经配置好的连接可以直接打开新标签,也可以复制会话。

image.png

image.png

标签可以设置颜色。

搜索高亮

之前一直使用konsole,它搜索非常好用,可以高亮当前屏幕上匹配的内容,我觉得非常好用,因此我把它引入了进来。

image.png

SFTP 可以在两台服务器之间传文件

普通的 SFTP 上传下载肯定是有的,这里主要说一下跨服务器传输。

以前需要把服务器 A 的文件传到服务器 B,我一般先下载到本地再上传到目标服务器去,用着非常不爽。

所以我让Nutty可以直接选择服务器 A 上的文件,再选择服务器 B 和目标目录,在两个 SFTP 会话之间完成传输。

image.png

这个功能可能比较小众,但对我来说非常实用,也是我自己写 Nutty 的原因之一。

Sixel

Nutty 支持 Sixel,可以在终端里直接显示图片。

image.png

图片会跟着终端历史一起滚动,TUI 全屏程序也可以正常使用。

端口转发和 Zmodem

Nutty 内置了 SSH 端口转发,可以直接建立 Tunnel。

另外也支持 Zmodem。如果中间套了好几层跳板机,还是 rzsz 最省事。

最后

Nutty 基本是跟着我自己的工作需求写出来的。

我遇到一个不顺手的地方,就想改掉;需要在两个服务器之间传文件,就做了 SFTP 跨服务器传输;每天要开很多窗口,就做了标签和分屏;远程看图麻烦,就把 Sixel 加了进来。

现在它还算不上一个非常成熟的终端,但主要功能已经可以满足我的日常使用了。

如果大家愿意体验,欢迎把遇到的问题、使用环境和复现方式告诉我。

Reply Favorite View the author
All Replies

No replies yet