Skip to content

安装 ​

文档编写中

部分内容可能尚不完整。

ThinkTerm 为 macOS、Linux 和 Windows 发布,下载都在 发布页。iOS 和 Android 应用仍在开发中,尚未发布。

选哪种安装方式 ​

系统架构怎么装
macOSApple 芯片、Intel运行安装脚本,或者装 Homebrew cask
Linuxx86_64、arm64运行安装脚本,或者从发布页装 .deb、.rpm 或 AppImage
Windowsx64、arm64从发布页下载安装器或 zip;Windows 没有安装脚本
通过 SSH 连的服务器同上用 --server 运行安装脚本;见在服务器上安装

在 macOS 和 Linux 上:

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

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

系统要求 ​

系统需要
macOSmacOS 14 或更新,Apple 芯片或 Intel
Linuxx86_64 或 arm64。桌面版需要 glibc 2.35 或更新 —— Ubuntu 22.04、Debian 12、RHEL 10 或更新。服务器版需要 glibc 2.31 或更新,这样 Ubuntu 20.04、Debian 11 和 RHEL 9 也可以
WindowsWindows 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 自己在后台做的更新检查从不读取它,见 更新。

升级与卸载 ​

再跑一遍脚本就是升级。它不比较版本 —— 拿到哪个发布版,就装哪个,覆盖已有的 —— 所以配合 --version 也能把机器退回到旧版本。thinkterm update 和设置里的 安装更新 替你跑的就是这个脚本,细节见 更新。

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

服务器是个例外。在终端里安装服务器版、而 mux 服务端正在运行时,脚本会用 --daemonize --takeover 启动新的 thinkterm-mux-server,让正在运行的服务端把会话交给新构建,里面运行的东西都不会结束。交接失败会重试,最多三次。无法交接的服务端(比如来自还没有这个功能的版本)会照旧运行,脚本会如实说明,并打印手动切换的办法,那会结束它的会话。脚本只在终端里这样做。从桌面端更新的远端服务器,由客户端自己完成交接,见 更新远端 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 ​

bash
brew install --cask roversx/tap/thinkterm

这个 cask 安装的是 发布页 上的 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 和远程安装都会选它
.debthinkterm 和 thinkterm-server 两个包,在 Ubuntu 22.04 上构建
.rpmthinkterm 和 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 优先于你用户目录里的配置,所以一份副本可以随身带着自己的设置,见 配置。但跟着走的只有配置: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,也不需要服务文件。怎样启动它、怎样让它在你登出后继续运行,以及每种连接方式对主机有什么要求,见 远程。

第一次打开 ​

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

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

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

行按钮打开
Herdr 会话,有会话在运行时还会说明有几个 —— 仅 macOS 和 Linux导入设置 › 导入,定位到 Herdr
一个 WezTerm 配置文件导入设置设置 › 导入,定位到 WezTerm;见 配置
你在代码编辑器里打开过、但还不在本地 Space 里的文件夹选择项目设置 › 导入,定位到这些文件夹

某一行只有在对应的来源存在时才会出现。按钮会像 开始使用 一样保留你选的语言和外观,结束设置,并打开那个页面,来源已经选好。查找在这台电脑上进行;读取了什么见 隐私与安全。

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

新安装还会从一开始就把本地终端放在后台会话 server 里,所以退出 ThinkTerm 不会结束它们。这个设置是什么、怎样关掉,见 远程。

相关 ​

  • 更新 —— 已安装的副本如何保持最新
  • 远程 —— 为 SSH、Mosh 和 ThinkTerm Connect 准备主机
  • 配置 —— 各个系统上配置和数据放在哪里
  • 隐私与安全 —— ThinkTerm 会发送什么、保存什么