首页
/ Tabby 使用指南:面向现代时代的跨平台终端、SSH 与串口客户端全解析

Tabby 使用指南:面向现代时代的跨平台终端、SSH 与串口客户端全解析

2026-09-04 12:47:23作者:温艾琴Wonderful

Tabby(前身 Terminus)是 Windows、macOS 与 Linux 平台上一款功能高度可配置的终端模拟器,同时内置 SSH/串口客户端、完整快捷键体系、窗口分割与标签恢复能力。本文以官方韩文 README 为骨架,逐章覆盖其终端能力、SSH 客户端、串口终端、便携式(Portable)模式、插件与主题生态,并结合当前仓库的源码实现(配置默认值、串口服务、X11/跳板通道等)逐条佐证,帮助你建立从功能认知到源码定位的完整技术图景。

Tabby 终端功能界面截图,展示分屏、侧边标签栏与配置后的终端窗口

一、Tabby 是什么

Tabby 的定位是 Windows 标准终端(conhost)、PowerShell ISE、PuTTY 或 iTerm 的替代方案:它把本地终端、SSH 客户端、串口终端统一在一个应用里,并围绕"可配置"做深度设计——主题、配色、快捷键、多按键组合、窗口分割、会话恢复全部可以定制。

同时,README 明确划出了它的边界:Tabby 不是新的 shell,也不是 MinGW/Cygwin 的替代品,它并不轻量。如果内存占用是硬约束,可以考虑 Conemu 或 Alacritty 这类更轻的方案。从源码结构看,Tabby 是一个 Electron 应用:app/package.json 定义主进程构建,app/lib/app.ts 是 Electron 主进程入口,而终端、SSH、串口等能力以独立的 tabby-* 包(插件式子项目)组织在仓库根目录下。

二、终端功能

官方列出的终端能力包括:

  • VT220 终端 + 各类扩展
  • 多层嵌套的分屏窗口
  • 位于任意一侧的标签栏
  • 带全局唤起快捷键的可停靠窗口("Quake console" 风格)
  • 进度条检测
  • 进程完成时通知
  • 括号粘贴(bracketed paste)与多行粘贴警告
  • 字体连字(ligatures)
  • 自定义 shell 配置(custom shell profiles)
  • 右键粘贴/选择复制(PuTTY 风格)

这些特性都能在源码中找到对应的配置面。tabby-terminal/src/config.tsTerminalConfigProvider.defaults 定义了终端行为的默认值,例如:

terminal:
  frontend: xterm-webgl   # 渲染前端
  fontSize: 14
  bell: off               # 响铃方式
  bracketedPaste: true    # 括号粘贴
  ligatures: false        # 字体连字
  cursor: block
  cursorBlink: true
  rightClick: menu        # 右键行为;Windows 平台默认改为 clipboard
  warnOnMultilinePaste: true   # 多行粘贴警告
  detectProgress: true        # 进度检测
  scrollbackLines: 25000        # 回滚行数

值得注意的是平台差异:同一配置文件中 platformDefaultsmacOS/Windows/Linux 分别覆写字体与快捷键——macOS 默认 Menlo 字体且 copy⌘-C;Windows 默认 Consolas、rightClick: clipboardcopyOnSelect: true、复制为 Ctrl-Shift-C;Linux 默认 Liberation Mono、pasteOnMiddleClick: false(注释说明中键粘贴由操作系统处理)。这解释了为什么"右键粘贴"在 Windows 上是默认行为而在其他平台上不是。

渲染与标签管理位于 tabby-terminal/src/api/baseTerminalTab.component.ts,它基于 xterm 前端(普通 + WebGL 两种,见 tabby-terminal/src/frontends/xtermFrontend.ts 的引用)实现标签动画、工具栏与搜索面板;"分屏嵌套"则由 tabby-core/src/components/splitTab.component.ts 及配套的 splitTabDropZone/splitTabSpanner 等组件提供拖拽、分割、聚焦切换的 UI 基础。"可停靠窗口(Quake console)"的抽象在 tabby-core/src/services/docking.service.ts 中定义(dock() 与多屏枚举接口),Electron 端实现在 tabby-electron/src/services/docking.service.ts,配合全局快捷键实现随处唤起。

三、SSH 客户端

官方 README 列出的 SSH 能力:

  • 带连接管理器的 SSH2 客户端
  • X11 转发与端口转发
  • 自动跳板机(jump host)管理
  • 密钥代理转发(含 Pageant 与 Windows 自带 OpenSSH agent)
  • 登录脚本

Tabby SSH 客户端界面截图,展示左侧连接管理器与右侧 SSH 终端会话

配置面在 tabby-ssh/src/config.ts

ssh:
  warnOnClose: false      # 关闭会话时是否警告
  winSCPPath: null        # WinSCP 路径(Windows 上传/下载集成)
  agentType: auto         # agent 转发类型(auto/pageant/openssh 等)
  agentPath: null
  x11Display: null        # X11 转发目标显示,缺省回退到 $DISPLAY
  knownHosts: []
  verifyHostKeys: true    # 默认校验主机密钥

会话层基于 russh 实现。从 tabby-ssh/src/session/ssh.ts 的源码结构看:jumpChannel 字段承载跳板机通道(transport = await russh.SshTransport.newSshChannel(this.jumpChannel.take())),即连接链路上任一节点可以是 jump host;X11 转发通过 x11ChannelOpen$ 事件订阅后把转发流接回本地 displaySpecthis.config.store.ssh.x11Display || process.env.DISPLAY ?? 'localhost:0'),与默认值 x11Display: null 的回退行为一致。shell 通道在 tabby-ssh/src/session/shell.ts 中按 profile.options.x11 决定是否开启 X11 请求。连接管理(保存的连接、登录脚本、端口转发)的 UI 位于 tabby-ssh/src/components/ 下的连接编辑器与设置组件。此外仓库还提供 tabby-ssh/src/sshImporters.ts,用于从已有工具导入 SSH 配置。

四、串口(Serial)终端

官方特性清单:

  • 连接保存(保存串口配置为 profile)
  • Readline 输入支持
  • 可选的按十六进制字节输入与 hexdump 输出
  • 换行转换
  • 自动重连

串口能力由独立的 tabby-serial 子包实现。其核心服务 tabby-serial/src/services/serial.service.ts 展示了两个值得注意的实现细节:

  1. 双绑定(binding)策略detectBinding() 在 Web 平台返回 WebSerialAPI 绑定(WSABinding),桌面平台则用 @serialport/bindings-cppautoDetect()。也就是说桌面端依赖 native 串口驱动,Web 端依赖浏览器 Web Serial API。
  2. 快捷连接语法quickConnect(query) 支持 COM3@115200 这种"端口@波特率"的查询形式(默认 115200),生成一个 type: 'serial' 的 profile 后立即开新标签页。

默认快捷键在 tabby-serial/src/config.ts 中定义:serial: ['Alt-K'] 全局唤起串口连接对话框。端口枚举失败时 listPorts() 会记录错误并返回空数组而不是抛出,保证 UI 不崩溃。串口设置表单(波特率、数据位、换行转换、hex 输入/输出等)位于 tabby-serial/src/components/serialProfileSettings.component.ts

五、便携式(Portable)模式

README 的说明非常简短:在 Tabby.exe 所在目录创建 data 文件夹,Tabby 就会以便携应用的方式运行(配置与数据全部写入该目录而非系统用户数据目录)。

这段行为在主进程启动早期实现,代码量虽小但逻辑清晰,见 app/lib/portable.ts

const appPath = path.dirname(electron.app.getPath('exe'))
const portableData = path.join(appPath, 'data')
if (fs.existsSync(portableData)) {
    console.log('reset user data to ' + portableData)
    electron.app.setPath('userData', portableData)
}

即:检查 exe 旁是否存在 data 目录,存在则把 Electron 的 userData 路径整体重定向过去。由此可推论:便携模式下配置文件、插件、SSH 连接、vault 全部落在 Tabby.exe 同级/data 内,移动整个目录即可迁移全部状态;该目录不存在时行为与正常安装版完全一致。

六、插件

插件与主题可以直接在 Tabby 的设置界面内安装(插件管理器服务位于 tabby-plugin-manager/src/services/pluginManager.service.ts,插件在 app/src/plugins.ts 中被加载,黑名单逻辑见 app/src/pluginBlacklist.ts)。

README 中列出的常用社区插件及其用途(以文档列出的描述为准):

  • clickable-links — 让终端中的路径与 URL 可点击
  • docker — 连接到 Docker 容器
  • title-control — 通过前缀/后缀/字符串替换修改终端标签标题
  • quick-cmds — 向一个或所有终端标签发送快捷命令
  • save-output — 把终端输出记录到文件
  • sync-config — 将配置同步到 Gist 或 Gitee
  • clippy — 官方示例插件("总来烦你"的那种)
  • workspace-manager — 基于给定配置生成自定义工作区 profile
  • search-in-browser — 用系统默认浏览器打开 Tabby 中选中的文本搜索
  • sftp-tab — 类似 SecureCRT,为 SSH 连接打开 SFTP 标签
  • web-auth-handler — 应用内 Web 认证弹窗(主要为 warpgate 浏览器认证)
  • mcp-server — 面向 Cursor、Windsurf 等 MCP 客户端的 Model Context Protocol 服务器集成

从仓库结构看,插件机制与子项目组织方式一致:tabby-sshtabby-serialtabby-linkifier 等本身就遵循"npm 包 + webpack.config.mjs + tsconfig.typings.json"的插件包模板,社区插件可复用同一套 API(tabby-core/src/api/ 下的 hostAppprofileProvidertoolbarButtonProvider 等接口)。

七、主题

README 列出的社区主题:

  • hype — 受 Hyper 启发的主题
  • relaxed — "给 Tabby 一些松弛感"的主题
  • gruvbox
  • windows10
  • altair

主题能力在仓库中同样有清晰落地:内置社区配色方案库位于 tabby-community-color-schemes/schemes/(数百个配色文件,如 Solarized Dark、Dracula、Nord、Gruvbox Dark、TokyoNight 等),由 tabby-community-color-schemes/src/colorSchemes.ts 聚合导出;主题的抽象接口在 tabby-core/src/api/theme.ts,主题应用服务在 tabby-core/src/services/themes.service.ts。终端配色与主题的衔接则由 terminal.colorScheme/lightColorScheme/customColorSchemes 配置项(见 tabby-terminal/src/config.ts)驱动,暗/亮两套方案随系统外观切换。

八、从源码到文档:推荐阅读路径

如果你希望把本文的功能描述与源码对应起来,建议按以下顺序深入:

  1. README.md 与本文对应的 README.ko-KR.md — 官方功能清单(本文各章节的原始出处)
  2. HACKING.md — 项目组织方式与非常简单的插件开发教程
  3. tabby-core/src/config.ts 与各子包 config.ts — 所有配置项默认值的单一事实来源
  4. tabby-terminal/src/session.tstabby-ssh/src/session/tabby-serial/src/session.ts — 三类会话的运行时实现
  5. app/lib/app.tsapp/lib/pluginManager.ts — Electron 主进程与插件装载

以上路径均以仓库根目录为起点,可直接在当前仓库中按相对路径定位,作为功能验证与二次开发的入口。

登录后查看全文
热门项目推荐
相关项目推荐

项目优选

收起
kernelkernel
deepin linux kernel
C
33
18
ops-transformerops-transformer
本项目是CANN提供的transformer类大模型算子库,实现网络在NPU上加速计算。
C++
1.12 K
2.72 K
ops-nnops-nn
本项目是CANN提供的神经网络类计算算子库,实现网络在NPU上加速计算。
C++
904
1.82 K
docsdocs
暂无描述
Markdown
889
5.78 K
pytorchpytorch
作为 Ascend for PyTorch 社区的核心组件,TorchNPU 是昇腾专为 PyTorch 打造的深度学习适配插件,使 PyTorch 框架能够直接调用昇腾 NPU,为开发者提供昇腾 AI 处理器的超强算力。
Python
854
1.34 K
kernelkernel
openEuler内核是openEuler操作系统的核心,既是系统性能与稳定性的基石,也是连接处理器、设备与服务的桥梁。
C
527
590
jiuwenswarmjiuwenswarm
JiuwenSwarm 是一款基于openJiuwen开发的智能AI Agent,它能够将大语言模型的强大能力,通过你日常使用的各类通讯应用,直接延伸至你的指尖。
Python
3.52 K
1.01 K
ops-mathops-math
本项目是CANN提供的数学类基础计算算子库,实现网络在NPU上加速计算。
C++
1.33 K
1.45 K
AscendNPU-IRAscendNPU-IR
AscendNPU-IR是基于MLIR(Multi-Level Intermediate Representation)构建的,面向昇腾亲和算子编译时使用的中间表示,提供昇腾完备表达能力,通过编译优化提升昇腾AI处理器计算效率,支持通过生态框架使能昇腾AI处理器与深度调优
C++
540
384
flutter_flutterflutter_flutter
本仓库是 Flutter SDK 与 Flutter Engine 的 OpenHarmony 适配版本,由 CPF-Flutter 团队维护。开发者可使用熟悉的 Flutter 技术栈开发 OpenHarmony 应用,3.35.7 及以后的适配版本可基于本仓库源码构建支持 OpenHarmony 的 Flutter Engine。
Dart
1.17 K
341