---
title: "安装"
description: "安装脚本及其选项、每个发布下载包里有什么、服务器上的安装需要什么，以及第一次打开 ThinkTerm 时会发生什么。"
url: "https://docs.closex.org/zh/thinkterm/install.html"
markdown_url: "https://docs.closex.org/zh/thinkterm/install.md"
site: "CloseX Docs"
product: "ThinkTerm"
language: "zh-Hans"
last_updated: "2026-11-08T12:04:16.000Z"
alternates:
  en: "https://docs.closex.org/thinkterm/install.md"
  zh-Hans: "https://docs.closex.org/zh/thinkterm/install.md"
  ja: "https://docs.closex.org/ja/thinkterm/install.md"
---

# 安装

> **文档编写中**
> 部分内容可能尚不完整。

[第一次打开 ThinkTerm：先写出 hello.，然后出现 Welcome to ThinkTerm 页面](https://docs.closex.org/img/thinkterm/thinkterm_first_launch.mp4)

ThinkTerm 为 macOS、Linux 和 Windows 发布，下载都在 [发布页](https://github.com/RoversX/thinkterm/releases)。iOS 和 Android 应用仍在开发中，尚未发布。

## 选哪种安装方式

| 系统 | 架构 | 怎么装 |
|---|---|---|
| macOS | Apple 芯片、Intel | 运行[安装脚本](#安装脚本)，或者装 [Homebrew cask](#homebrew-on-macos) |
| Linux | x86_64、arm64 | 运行[安装脚本](#安装脚本)，或者从发布页装 [`.deb`、`.rpm` 或 AppImage](#linux) |
| Windows | x64、arm64 | 从发布页下载[安装器或 zip](#windows)；Windows 没有安装脚本 |
| 通过 SSH 连的服务器 | 同上 | 用 `--server` 运行安装脚本；见[在服务器上安装](#在服务器上安装) |

在 macOS 和 Linux 上：

```bash
curl -fsSL https://raw.githubusercontent.com/RoversX/thinkterm/main/install.sh | sh
```

脚本会问你是装桌面应用，还是只装服务器用的程序，之后也能自己更新自己。这一页剩下的都是细节：每种方式装了什么、脚本的选项，以及第一次打开时会看到什么。

## 系统要求

| 系统 | 需要 |
|---|---|
| macOS | macOS 14 或更新，Apple 芯片或 Intel |
| Linux | x86_64 或 arm64。桌面版需要 glibc 2.35 或更新 —— Ubuntu 22.04、Debian 12、RHEL 10 或更新。服务器版需要 glibc 2.31 或更新，这样 Ubuntu 20.04、Debian 11 和 RHEL 9 也可以 |
| Windows | Windows 10 1809 或更新，x64 或 arm64 |

Linux 构建链接的是 glibc，所以 Alpine 这类 musl 系统根本跑不起来。glibc 太旧则会以一种不那么明显的方式失败 —— 在加载时报一个关于符号版本的错误，而不是真正的原因 —— 所以安装脚本会先按要装的那个版本检查 glibc，并直接说明。两种情况的出路都是从源码构建。桌面版在 glibc 2.31 到 2.34 上被拒时，提示里会补一句：`--server` 可以在那里运行。glibc 低于 2.34 的主机，服务器版用的是另一个构建，内置了 OpenSSL（这些主机只有 OpenSSL 1.1）；脚本会自己选它，并如实说明。

## 安装脚本

```bash
curl -fsSL https://raw.githubusercontent.com/RoversX/thinkterm/main/install.sh | sh
```

脚本会为这台机器挑出对应的发布文件，下载下来，并与 GitHub 在文件上传时记录的 SHA-256 摘要比对。对不上的下载会被拒绝，什么都不会安装。如果 GitHub 没有这个文件的摘要，或者机器上既没有 `sha256sum` 也没有 `shasum`，脚本会直说这次下载没有校验，而不是一声不吭。

脚本从 GitHub 下载，只有 GitHub 慢的时候才转向镜像。它先花几秒测一下 GitHub，速度大约 300 KB/s 或更快就继续用它；否则同时测所有镜像，把 GitHub 和各镜像按测试结果从快到慢排序，没有响应测试的排在最后。某个来源卡住、或几秒内一直低于这个速度，就换下一个，下一个会接着已经下载的字节继续，而不是从头再来。传输中断时，来源支持的话会从断点续传。整个文件最后还要校验；如果接续的字节有错，新来源会先完整下载一次，才会被放弃。所有来源都失败时，那些曾有进展的来源按同样的顺序再试一轮，这一轮允许慢，只要不卡住。脚本结束时，下载了一半的文件会被删掉，所以两次运行之间不会续传。

只有在有摘要可以核对时才会用镜像 —— GitHub 的摘要，或下面说的发布版已签名文件清单里的摘要 —— 镜像发来的文件也要与之一致才会安装。`GITHUB_TOKEN` 从不发给镜像。`--mirror direct` 让下载只走 GitHub；`--mirror` 后面跟某个镜像的主机名，则先试那一个，再回到 GitHub。

每个发布版还带着一份已签名的文件清单 `thinkterm-release.txt`，签名在旁边，名为 `thinkterm-release.txt.sig`。GitHub 的发布版查询没有回应、而你又用 `--version` 指定了发布版时，脚本改从这份清单取摘要，取之前先用脚本里内置的密钥核对签名；这需要一个能验证签名的 `ssh-keygen`。没有任何清单能通过验证时，脚本会说明它不用镜像、直接试 GitHub 的归档，而因为没有摘要可以比对，这次下载不会被校验；清单的签名不对则直接终止安装。要知道哪个是最新发布版，仍然需要 GitHub 的查询。

它只为当前用户安装，不需要 root，也不需要包管理器：

- **Linux** —— 程序放进 `~/.local/bin`，桌面版还会在 `~/.local/share` 下加一个启动器条目和图标。
- **macOS** —— 已签名的 `ThinkTerm.app` 放进 `/Applications`，你对 `/Applications` 没有写权限时放进 `~/Applications`；命令行工具以链接的形式放进 `~/.local/bin`。这些链接指向应用内部而不是把文件复制出来，所以仍在应用签名的覆盖之下。

bash、zsh 和 fish 的补全也装在 `~/.local/share` 下。旁边还会留一份安装记录，之后 `thinkterm update` 和 `设置 › 软件更新` 正是靠它知道自己可以替换这些文件。

你的 shell 启动文件不会被改动。`~/.local/bin` 不在 `PATH` 里时，脚本会打印需要添加的那一行 —— 在 Debian 和 Ubuntu 上，它要到下次登录才会进入 `PATH`，而且前提是那时这个目录已经存在 —— 它还会打印开启 shell 集成的那一行（可选），shell 集成提供提示符标记，并让 ThinkTerm 能跟上 shell 的当前目录。

两种变体都会在 `thinkterm` 旁边放一个 `wezterm` 命令，给那些在 `TERM_PROGRAM` 显示 WezTerm 时会去找它的工具用。如果机器上同时装了 WezTerm 本身，运行的是哪个 `wezterm`，取决于 `PATH` 里哪个目录排在前面。

### 桌面版还是服务器版

| 变体 | 包含 |
|---|---|
| `--desktop` | 应用、命令行工具、TUI 和会话 server |
| `--server` | 除应用以外的全部。在 Linux 上连图形库都不需要 |

脚本从不根据机器去猜：一台无界面的机器也许仍然想要 TUI，一台桌面机也可能是别人的 SSH 目标。在终端里运行且两个参数都没给时，它会询问；在完全没有终端的环境里运行（比如配置脚本），则必须给出参数。

两者互斥。装其中一个会删掉另一个的文件，所以把一台机器从服务器版换成桌面版，就是加上 `--desktop` 再跑一遍同一条命令 —— 会加上应用、其余保持不变；反过来则会删掉应用和它的启动器。

### 选项

| 选项 | 作用 |
|---|---|
| `--desktop`、`--server` | 选择变体 |
| `--version X` | 安装发布版 `X` 而不是最新版 |
| `--prefix DIR` | 装到 `DIR` 下而不是 `~/.local`，程序放在 `DIR/bin` |
| `--app-dir DIR` | 仅 macOS：把 `ThinkTerm.app` 放到 `DIR` |
| `--from FILE` | 安装一个已经下载好的归档，不再联网获取；只有给了 `--sha256` 才会校验 |
| `--dry-run` | 说明将要做什么，在动磁盘之前停下 |
| `--sha256 HASH` | 配合 `--from`：用这个 SHA-256 核对归档，对不上就什么都不安装 |
| `--mirror M` | 归档从哪里下载。`auto`（默认）先用 GitHub，GitHub 慢时再给镜像排序；`direct` 只用 GitHub；填镜像的主机名则先试那一个，再回到 GitHub |

选项通过 `sh -s --` 传给脚本：

```bash
curl -fsSL https://raw.githubusercontent.com/RoversX/thinkterm/main/install.sh | sh -s -- --server
```

使用 `--from` 时不会查询发布版，也不做 SHA-256 校验，除非你用 `--sha256` 给出期望的摘要（对不上就什么都不安装）：脚本直接安装你给它的文件。它记录的版本来自 `--version`，否则来自归档本身 —— 文件名，或者里面的文件夹名。两者都读不出版本的归档会被记为 `unknown`，并给出警告；用 `--version` 指明版本即可。

如果设置了 `GITHUB_TOKEN`，脚本发出的请求会带上它，以解除 GitHub 对匿名请求的限流。它从不会发给镜像。ThinkTerm 自己在后台做的更新检查从不读取它，见 [更新](https://docs.closex.org/zh/thinkterm/updates.md)。

### 升级与卸载

再跑一遍脚本就是升级。它不比较版本 —— 拿到哪个发布版，就装哪个，覆盖已有的 —— 所以配合 `--version` 也能把机器退回到旧版本。`thinkterm update` 和设置里的 `安装更新` 替你跑的就是这个脚本，细节见 [更新](https://docs.closex.org/zh/thinkterm/updates.md)。

文件是原地替换的，所以已经在运行的东西继续用它启动时的版本。哪些还在用旧版本运行，安装结束时会列出来。

服务器是个例外。在终端里安装服务器版、而 mux 服务端正在运行时，脚本会用 `--daemonize --takeover` 启动新的 `thinkterm-mux-server`，让正在运行的服务端把会话交给新构建，里面运行的东西都不会结束。交接失败会重试，最多三次。无法交接的服务端（比如来自还没有这个功能的版本）会照旧运行，脚本会如实说明，并打印手动切换的办法，那会结束它的会话。脚本只在终端里这样做。从桌面端更新的远端服务器，由客户端自己完成交接，见 [更新远端 server](https://docs.closex.org/zh/thinkterm/updates.md#更新远端-server)；桌面应用则在下次启动时自己把会话 server 交接过去，因为在应用开着时把它换掉会把它断开。

脚本会边做边报告。在能原地重绘一行的终端里，它先打出字标，然后逐步显示 —— 检测机器、查询发布版、下载、校验、解包、安装 —— 干活时有转圈，下载有一条进度条，每一步以对勾结束。输出被管道或记录下来、或者 `TERM=dumb` 时，只输出普通的行。只有在输出是终端、且没有设置 `NO_COLOR` 时才使用颜色，警告和失败信息走标准错误。区域设置不是 UTF-8 时，对勾、箭头和进度条会换成 ASCII。

安装完成后，脚本把剩下要你做的事列在 `Next` 下面，最要紧的在前。标 `!` 的会让 ThinkTerm 或其中一部分在处理之前没法用：`~/.local/bin` 不在 `PATH` 里、`PATH` 上有另一个 `thinkterm` 排在前面、在 Linux 上桌面应用缺少库、`~/.local` 里的服务器版装在一个它不会更新的桌面应用旁边（见[在服务器上安装](#在服务器上安装)），或者没能交接会话的 mux 服务端仍在跑旧版本。标 `·` 的是值得知道的事：安装之前就在运行的 mux 服务端仍是旧版本（在它重启之前，新版的应用或命令行工具可能拒绝与它通信）、ThinkTerm 开着、新版本下次启动才用、（服务器版）怎么启动会话 server，以及在 Linux 上，它通常在你退出 SSH 登录后继续运行，万一没有，备用办法是 `loginctl enable-linger $USER`（有些系统只允许管理员运行它），还有可选的 shell 集成那一行。要粘贴的命令就打印在要求它的那一项下面。

最后一行写着 `Ready.` 和该运行什么 —— `thinkterm`，服务器版是 `thinkterm tui` —— 缺少库时则写 `Installed.`，并说明桌面应用需要上面列出的库。如果你在带屏幕的机器上、在终端里运行，而 ThinkTerm 还没打开，脚本会问 `Open ThinkTerm now? [Y/n]`，不用你自己再敲；通过 SSH 运行时不会问。

没有卸载程序。脚本会打印它安装的每一个文件，卸载就是把它们删掉。

### Linux 上缺少的库

包管理器会把应用需要的库一并装上，压缩包做不到。对桌面版，脚本会问系统应用还缺哪些库，并为每一个给出 `apt`、`dnf` 和 `zypper` 下提供它的包名。它只警告不终止：命令行工具和会话 server 不需要这些库，库装好之后应用就能启动。

## 在 macOS 上用 Homebrew {#homebrew-on-macos}

```bash
brew install --cask roversx/tap/thinkterm
```

这个 cask 安装的是 [发布页](https://github.com/RoversX/thinkterm/releases) 上的 macOS 发布版。

## 一个发布版里有什么

每个发布版还带着 `thinkterm-release.txt`，列出发布版里每个文件的 SHA-256 摘要和大小，用 ThinkTerm 的发布密钥签名；签名是 `thinkterm-release.txt.sig`。GitHub 自己的查询失败时，[安装脚本](#安装脚本)和通过 SSH 更新服务器的客户端会退而用它。

### macOS

每种架构一个 zip，`arm64` 和 `x86_64`，里面是已签名并经过公证的 `ThinkTerm.app`。安装脚本的两种变体用的都是这个 zip。

你也可以自己解压，把应用拖进"应用程序"。手动放置的副本 ThinkTerm 仍然可以更新：`安装更新` 会在原位置替换它，并把命令行工具放到 `~/.local/bin`，此后它就和脚本安装的一样管理。

### Linux

| 下载 | 是什么 |
|---|---|
| `thinkterm-<version>-linux-<arch>.tar.gz` | 桌面版，安装脚本装的就是它 |
| `thinkterm-server-<version>-linux-<arch>.tar.gz` | 服务器版 |
| `thinkterm-server-<version>-linux-<arch>.tar.xz` | 服务器版，下载更小。发布版里有、机器上又有 `xz` 时，安装脚本取的是这个 |
| `thinkterm-server-<version>-linux-<arch>-glibc2.31.tar.gz`，以及同名的 `.tar.xz` | 给 glibc 低于 2.34 的主机用的服务器版，在 Ubuntu 20.04 上构建，内置 OpenSSL。glibc 为 2.31 到 2.33 时，安装脚本、`thinkterm update` 和远程安装都会选它 |
| `.deb` | `thinkterm` 和 `thinkterm-server` 两个包，在 Ubuntu 22.04 上构建 |
| `.rpm` | `thinkterm` 和 `thinkterm-server` 两个包，在 Fedora 上构建 |
| `.AppImage` | 单个文件的桌面应用，在 Ubuntu 22.04 上构建 |

每一种都有 x86_64 和 arm64 两个版本。

`.deb` 和 `.rpm` 包不能与 WezTerm 的包同时安装，因为两者都提供 `wezterm` 命令；桌面包和服务器包之间也互斥。包通过包管理器更新，AppImage 通过 AppImageUpdate 更新；ThinkTerm 会把你指向它们，而不是替换它们的文件。

### Windows

Windows 没有安装脚本。发布版里有 x64 的安装器和 zip，以及 arm64 的同样两种，后者在 arm64 上原生运行。arm64 的文件名带 `-arm64`，x64 的文件名不变。x64 安装器也能装在 arm64 版 Windows 上，此时 ThinkTerm 在模拟下运行；arm64 安装器才是原生的。

**安装器** `ThinkTerm-<version>-setup.exe`（arm64 是 `ThinkTerm-<version>-arm64-setup.exe`）会请求管理员权限，安装到 Program Files。它把 ThinkTerm 的目录加入系统 `PATH`，在资源管理器里为文件夹、文件夹空白处和驱动器加上 `Open ThinkTerm here` 菜单项，并可选创建桌面快捷方式。在 ThinkTerm 里更新时，会下载适合 ThinkTerm 当前运行架构的下一版安装器；GitHub 记录了 SHA-256 摘要时就用它核对，没有记录时会提示这次下载没有校验，然后照常继续；并在 Windows 的权限提示之后运行它，然后等它结束。安装器不会关闭 ThinkTerm：它把旧构建的每个程序和库原名挪到一边，把新文件放到原位，安装失败时再挪回去。ThinkTerm 继续运行旧构建直到重启，到那时它的会话 server 再把终端交给新构建。

**zip** `ThinkTerm-windows-<version>.zip`（arm64 是 `ThinkTerm-windows-arm64-<version>.zip`）解压到哪里就在哪里运行，不会往 `PATH` 或资源管理器里加任何东西。可执行文件旁边的 `thinkterm.lua` 优先于你用户目录里的配置，所以一份副本可以随身带着自己的设置，见 [配置](https://docs.closex.org/zh/thinkterm/configuration.md)。但跟着走的只有配置：Space、主机以及 ThinkTerm 的其余数据，仍然保存在你的用户目录里。更新时，把新的 zip 解压到原处即可。

## 在服务器上安装

一台通过 SSH 访问的机器，只有在使用 ThinkTerm Connect 时才需要装 ThinkTerm —— 那是让会话在主机上持续运行的常驻连接。服务器版就够了：

```bash
curl -fsSL https://raw.githubusercontent.com/RoversX/thinkterm/main/install.sh | sh -s -- --server
```

在 macOS 上，服务器版把应用包放在 `~/.local/libexec`，不进"应用程序"也不进启动台 —— 需要的是里面的程序，而不是一个程序坞图标。在 Linux 上，如果你更愿意用 `apt` 或 `dnf` 管理这台机器，`thinkterm-server` 包起的是同样的作用。

如果机器上已经有从别处装的桌面应用 —— 发行版的包，或装在别的前缀下的 —— 服务器版不会动它，它仍是自己的版本。由于 `~/.local/bin` 通常排在 `PATH` 前面，应用的启动器可能找到服务器版安装里没有 GUI 的 `thinkterm`，从而失灵。脚本在问你要哪个变体时会提到这个应用，并在最后用一个 `!` 项说明；如果机器的 glibc 能运行桌面版，这一项会打印出把桌面版装到 `~/.local` 的命令，让两者保持一致。旁边没有 GUI 的 `thinkterm` 被要求打开窗口时，会回答 `this ThinkTerm has no GUI to start`，并指向 `thinkterm tui`。ThinkTerm 构建的包从 `/usr/bin` 启动应用，所以 `~/.local` 里的服务器版不会取代它们。

会话 server 不需要 root，也不需要服务文件。怎样启动它、怎样让它在你登出后继续运行，以及每种连接方式对主机有什么要求，见 [远程](https://docs.closex.org/zh/thinkterm/remote.md)。

## 第一次打开

应用第一次打开时，设置会作为主窗口里的一个标签页出现。开头是一段手写 *hello.* 的短动画，大约五秒后页面才可以用；在那之前它不响应操作，动画也不能跳过。

页面 `欢迎使用 ThinkTerm` 上有两个选择：`语言` 和 `外观`（`跟随系统`、`浅色` 或 `深色`）。每一项选中即生效，所以你能先看到效果再决定。`开始使用` 保留这些选择；`跳过`（或按 Esc 键）则恢复这个页面打开时 ThinkTerm 原本的设置。无论哪种，这个页面都不会再出现。页面上还明明白白写着一句：*你打开的一切都不会离开这台设备。*

如果这台电脑上有可以带过来的东西，选择区和按钮之间会出现一张 `在这台电脑上找到` 卡片，下面每一项各占一行：

| 行 | 按钮 | 打开 |
|---|---|---|
| Herdr 会话，有会话在运行时还会说明有几个 —— 仅 macOS 和 Linux | `导入` | `设置 › 导入`，定位到 Herdr |
| 一个 WezTerm 配置文件 | `导入设置` | `设置 › 导入`，定位到 WezTerm；见 [配置](https://docs.closex.org/zh/thinkterm/configuration.md#从-wezterm-导入) |
| 你在代码编辑器里打开过、但还不在本地 Space 里的文件夹 | `选择项目` | `设置 › 导入`，定位到这些文件夹 |

某一行只有在对应的来源存在时才会出现。按钮会像 `开始使用` 一样保留你选的语言和外观，结束设置，并打开那个页面，来源已经选好。查找在这台电脑上进行；读取了什么见 [隐私与安全](https://docs.closex.org/zh/thinkterm/privacy.md)。

两项之后都可以在 `设置 › 通用 › 语言` 和 `设置 › 外观` 里修改。

新安装还会从一开始就把本地终端放在后台会话 server 里，所以退出 ThinkTerm 不会结束它们。这个设置是什么、怎样关掉，见 [远程](https://docs.closex.org/zh/thinkterm/remote.md)。

## 相关

- [更新](https://docs.closex.org/zh/thinkterm/updates.md) —— 已安装的副本如何保持最新
- [远程](https://docs.closex.org/zh/thinkterm/remote.md) —— 为 SSH、Mosh 和 ThinkTerm Connect 准备主机
- [配置](https://docs.closex.org/zh/thinkterm/configuration.md) —— 各个系统上配置和数据放在哪里
- [隐私与安全](https://docs.closex.org/zh/thinkterm/privacy.md) —— ThinkTerm 会发送什么、保存什么
