リモート
ドキュメント作成中
一部の内容はまだ不完全な場合があります。
ThinkTerm のリモートワークスペースは、ローカルと同じ感触で使えることを目指しています。セッションを保持するのは目の前のウィンドウではなくマルチプレクササーバーなので、ノート PC を閉じても、別のマシンへ移っても、ネットワークが切れても、作業が終わることはありません。同じマルチプレクササーバーはローカルの端末も保持できるため、以下の内容の多くはネットワーク越しのマシンだけの話ではありません。

SSH ホスト帳
ThinkTerm は独自のホスト一覧を、システムの SSH 設定とは別に保持します。その隣に、~/.ssh/config で定義されたホストが読み取り専用のビューとして表示されます — ThinkTerm はこのファイルを読みますが、書き込むことはありません。
ThinkTerm 自身の一覧では、ホストごとにユーザー名、鍵ファイル、任意の SSH オプション、既定のワークスペース、そして保存パスワードを記録できます。OS 判定は既定で有効になっており、接続したホストがどのディストリビューションで動いているかを報告できます。
リモートホストのページ
一覧は リモートホスト のページにあり、サイドバー下端のボタンか Remote Hosts... コマンドで開きます。Space メニューの リモートホストを追加… は、空のホストを開いた状態でこのページを開きます。検索欄が空のあいだは、先頭のカードが ThinkTerm Connect を説明し、サーバーを追加 ボタンがあります。自分のホストが ホスト の下に先に並びます。続いて Tailscale グループに tailnet のマシンが並び(内蔵 tailnet を参照)、その後に ~/.ssh/config のホストが SSH 設定から(n) のグループにまとまります。このグループは折りたためて、検索中は自動的に開きます。検索欄はホストの名前、アドレス、ユーザーに一致します。
各カードには名前の下に接続先が示されます。ThinkTerm Connect のホストはサーバーの姿で青く描かれ、アドレスだけが書かれます。それ以外のカードには接続方法 — SSH または Mosh — も書かれ、Connect へ向かうボタンが付きます。自分のホストには Connect に切り替え(その場で切り替わります)、~/.ssh/config のホストには Connect で追加(そこから内容を入れた新しいホストを開きます)です。
自分のホストを選ぶと、一覧の隣のエディターで開きます。エディターの左端をドラッグすると幅を変えられ、幅は記憶されます。グループは上から次の順です。
| グループ | 項目 |
|---|---|
接続 | 名前、ネットワーク、ホスト、ポート(新しいホストでは 22)、その他のアドレス、ユーザー |
接続方法 | 3 枚のカードから 1 つ選びます: ThinkTerm Connect、SSH、Mosh |
認証 | パスワード、Identity ファイル |
セッション | ワークスペース、OS を検出、ファイルパネルを自動で接続、通常の SSH でのみ表示される リモートのプログラムを識別、Mosh を選んだときの Mosh サーバーコマンド |
詳細設定 | そのほかの SSH オプション。+ オプションを追加 で 1 つずつ加える |
新しいホストは ThinkTerm Connect(おすすめ の印付き)で始まり、OS を検出、ファイルパネルを自動で接続、リモートのプログラムを識別 がオンです。ファイルパネルを自動で接続 は、この項目ができる前に保存したホストではオフです。オンにすると、ファイルパネルは、そのホストのターミナルが隣にある時点で、接続 を待たずに接続します — SFTP 経由のリモートファイルを参照してください。
ネットワーク は システム か 内蔵 Tailnet です。内蔵 tailnet を参照してください。その他のアドレス には、そのホストが応答するほかの場所 — LAN 内の名前、Tailscale の名前、ポート転送した公開アドレス — をカンマか空白で区切って並べます。それぞれ ホスト か ホスト:ポート の形で、ポートを省くと ポート が使われます。接続は ホスト から始め、続いてほかのアドレスを 0.3 秒ずつずらして試します。前のものが失敗したら、すぐ次を試します。最初に応答したものが接続を担い、ThinkTerm はその接続でサインインを 1 回だけ行います。ホスト鍵はどのアドレスが応答しても ホスト に対して照合され、記録にある鍵と違う鍵を示すアドレスは、別のマシンとして飛ばされます。つながったアドレスは、以後 1 時間、次の接続で最初に試されます。
保存済みのホストでは、ネットワーク、接続方法 の選択、3 つのスイッチ(OS を検出、ファイルパネルを自動で接続、リモートのプログラムを識別)は、クリックした時点で保存されます。入力した内容は 保存 を待ち、キャンセル しても、行った選択は残ります。保存済みのホストのエディター上部には 接続 があり、新しいホストには 保存 と 保存して開く(保存してから接続)があります。ホストはネットワーク、アドレス、ユーザー、ポートで識別されるため、この 4 つがまったく同じ 2 つ目のホストは拒否され、既存のホストを編集するよう案内されます。すでに保存されているホストと同じになるネットワークへの切り替えも同様です。
カードのメニューには 接続、ホストを編集…、複製、「名前」を削除 があります。複製 は元のホストの内容 — パスワードとオプションも含めて — を入れた新しいホストを開きますが、アドレスだけは異なる必要があるので写しません。名前は元の名前に copy を付けたものです。削除には 完全に削除 でもう一度クリックが要ります。ホストのスレッドと、そこからミラーされた Space も一緒に削除されるからです。これらの Space はこのデバイスから取り除かれるだけで、サーバーには残り、ホストを追加し直せば戻ってきます。~/.ssh/config のホストには ThinkTerm のものとして編集や削除できるものがないので、メニューには 接続 しかありません。
ThinkTerm Connect のホストの名前を変えたり、別のネットワークへ移したりしても、その Space は失われません。Space はホストの新しい名前に付いていきます。古い接続がまだ生きているあいだは、それが終わるまで古い名前の側に残ります。
3 つの接続方法
ホストは次のいずれかの方法で開けます。エディターの 接続方法 で選びます。
通常の SSH — 直接のセッションです。接続が切れればセッションも終わります。
Mosh — ネットワークの切り替えやスリープに耐えるローミング型の UDP セッションです。ThinkTerm は既定で mosh-server new -s -l LANG=en_US.UTF-8 によりリモート側を起動します。このコマンドはホストごとに変更でき、リモートマシン上の mosh-server が通常と異なる場所にある場合に必要になります。
ThinkTerm Connect — 常駐するマルチプレクサで、新しいホストの初期値です。完全なワークスペースが得られるのはこの方法だけです。サーバーがセッションツリーを保持するため、複数のクライアントが同時に接続して同じ構造を見ることができ、あるクライアントが離脱してもすべてはそのまま動き続けます。
ホストに必要なもの
通常の SSH には SSH サーバーがあれば十分です。
Mosh には両端に Mosh が必要で、ThinkTerm はどちらも同梱していません。ThinkTerm は SSH でログインし、ホストの Mosh サーバーコマンド で mosh-server を起動してから、サーバーの応答をもとにこのマシンで mosh-client を実行します。自分ではそれができないとき — 保存したパスワードがない、ホスト鍵の確認が要る、コマンドが失敗した — は、端末で mosh コマンドを実行する方法に切り替え、問われたことにあなたが答えられるようにします。この代替手段が引き継ぐのはホストのポートと鍵ファイルだけで、ほかの SSH オプションや保存したパスワードは渡りません。いずれにしても、ホストには mosh-server が、このマシンには Mosh のクライアントが入っている必要があります。
ThinkTerm Connect には、ホストに ThinkTerm が必要です。サーバー版で足り、root も要りません。
curl -fsSL https://raw.githubusercontent.com/RoversX/thinkterm/main/install.sh | sh -s -- --serverサービスの設定は要りません。接続するとホストで thinkterm cli --prefer-mux proxy が実行され — まず ~/.local/bin のもの、次に PATH 上の thinkterm が使われます — サーバーがまだ動いていなければ、それが thinkterm-mux-server --daemonize を起動します。誰かが接続する前に、同じコマンドで自分で起動しておくこともできます。
ThinkTerm がまだ入っていないホストも行き止まりではありません。接続時にまず ~/.local/bin/thinkterm を探し、次に PATH 上の thinkterm か wezterm を探します。どれも見つからなければ、接続ウィンドウがその旨を表示して Install it? [y/N] と尋ね(この表示は翻訳されず、英語のままです)、実行するコマンドを示します。これはこのバージョンのインストーラーを GitHub から取得し、ホストで ssh のユーザーとして、root なしで ~/.local の下に入れるものです。y と答えるとインストールしてから接続します。それ以外なら、自分で実行できるようコマンドを表示し、リモートホストのページから接続していた場合は、今回に限りそのホストを通常の SSH で開きます。ホストは Connect のホストのままで、次の接続でもまた尋ねられます。何もインストールできないときは、尋ねる代わりに理由が表示されます。このアプリが開発ビルドである、そのバージョンのリリースがまだ GitHub にない、あるいはホストがリリースを受け付けられない(x86-64 と ARM64 以外の CPU の Linux、musl libc、リリースが要求するより古い glibc)の場合です。
Linux のホストでは、最後の SSH セッションからログアウトするとサーバーも一緒に終わることがあります。セッションが残したプロセスをシステムがどう扱う設定になっているか次第です。動かし続けるためにインストーラーが勧めているのは loginctl enable-linger $USER です。
両端は同じバージョンで動いている必要があります。違う場合は ThinkTerm がこちら側から直すことを提案します。リモートサーバーを更新する を参照してください。サーバー版について詳しくは インストール にあります。
内蔵 tailnet
ThinkTerm は Tailscale アプリなしで、自分で Tailscale のネットワークに参加できます。参加すると tailnet のマシンがリモートホストに並び、内蔵 Tailnet に設定したホストはそれを通して接続します。macOS と Linux で使えます。それ以外では Tailscale グループは表示されず、ネットワーク には、このシステムでは内蔵 Tailnet を使用できないと表示されます。
オンにする。 オフのあいだ、Tailscale グループには tailnet のマシンに接続 というカードがあり、オンにする ボタンが付いています。押すとホストのエディターの代わりに Tailscale パネルが開きます。グループ見出しの右端の歯車からはいつでも開けますし、設定で Tailscale を検索すると見つかる Tailscale → リモートホスト からも開けます。見出しには今の状態が オフ、接続中…、ログインが必要、接続済み、未接続、別のプロセスが使用中 のいずれかで表示されます。
ログインする。 初めて参加するコンピュータは ログインが必要 と表示されます。ログイン を押すと承認用のリンクがブラウザで開き、このコンピュータが tailnet に加わります。パネルの ログイン グループには、別のデバイスで承認するための ログインリンクを開く と リンクをコピー、そして tailnet で作ったキーを使う 認証キー(ブラウザの代わりに) もあります。
| パネル | 項目 |
|---|---|
| ヘッダー | tailnet をオン・オフするスイッチ |
状態 | 接続済み · 名前 · アドレス、またはつながらない理由 |
ログイン | 承認待ちのリンクと、認証キー(ブラウザの代わりに) |
接続 | コントロールサーバー(空欄なら Tailscale 本家、Headscale なら HTTPS の URL)と tailnet での名前(空欄なら thinkterm- にマシンの鍵の 4 文字を付けたもの) |
ログアウト | tailnet から抜け、このコンピュータの ID と認証キーを消去します。消すものがあるときだけ表示されます |
各項目は、そこから離れたときに保存されます。コントロールサーバーや名前を変えるとノードが再起動し、tailnet を通っている接続は終わります。スイッチをオフにすると tailnet から抜けますが、コンピュータの ID は残るので、またオンにすれば同じマシンです。ログアウト のあとの参加は新しいマシンとして扱われ、古いほうは tailnet 側で削除するまで一覧に残ります。
マシン。 オンラインのものが先に、続いて名前順に並びます。カードにはデバイスのアイコン(メーカーのマークか、Linux ならディストリビューションのロゴ)、名前、そしてそれが何で、オンラインかどうか(Mac · オンライン のように)が示されます。ホストとして保存済みのマシンをクリックすると、ほかのカードと同じようにそのホストが選ばれてエディターが開き、ダブルクリックで接続します。保存していないマシンをクリックすると、名前とアドレスを入れた新しいホストのエディターが、ネットワーク を 内蔵 Tailnet にして開き、カーソルは ユーザー に置かれます。保存 すれば、ほかと同じホストになります。保存済みのホストは、そのアドレス(または その他のアドレス のどれか)がマシンの名前、tailnet 上のフルネーム、または tailnet のアドレスと一致すると、そのマシンを表します。
ホストを tailnet に置く。 ネットワーク で 内蔵 Tailnet を選びます。Tailscale がオンになるまでは、理由を添えてグレーアウトされています。すでに tailnet にあるホストでは、そのまま表示されます。選ぶと、ホストのすべてのアドレス — ホスト と その他のアドレス — が tailnet を通して接続され、失敗してもシステムのネットワークには回りません。名前は tailnet のマシン一覧だけで引かれ、DNS は使われないので、マシンの名前、フルネーム、tailnet のアドレスのいずれかを使ってください。Mosh はシステムのネットワークを使うため、Mosh のホストを tailnet に置くことも、tailnet のホストを Mosh にすることもできません。詳細設定 に ProxyCommand や BindAddress があるホストも使えません。同じアドレスでも、ネットワークが違えば別々の 2 つのホストです。
動く場所。 ノードは thinkterm-tailnet という独立したプログラムとして動きます。tailnet がオンのあいだ、そのマシンのセッションサーバーが起動し、止まれば起動し直します。サーバーが終わるか、tailnet をオフにすると、これも終わります。オンにしたときセッションサーバーが動いていなければ、ThinkTerm がそのためだけに、端末の入っていないサーバーを起動します。ローカル端末をバックグラウンドのセッションサーバーに置く の設定には関係なく起動し、セッションサーバーを停止するとノードも止まります。ノードを持てるプロセスは一度に 1 つで、マシン上のどの ThinkTerm プロセスもそれを通して tailnet に届きます。別のプロセスが使用中 は、このコンピュータの別の ThinkTerm プロセスがノードを持っているという意味です。
誰も座っていないマシン
thinkterm tailnet なら、同じことをシェルから行えます。ノードを持つセッションサーバーを動かしているユーザーとして実行してください。sudo は使えません。
| コマンド | すること |
|---|---|
thinkterm tailnet up | 参加して、つながるまで待ちます。承認が必要ならリンクを表示します。オプション: --serve-ssh、--control-url URL、--hostname NAME、そしてブラウザで承認する代わりに標準入力から認証キーを読む --auth-key-stdin |
thinkterm tailnet down | tailnet から抜けます。ID は次の up のために残ります |
thinkterm tailnet logout | 抜けて、ID と認証キーを消去します |
thinkterm tailnet status | 設定、ノードの状態、見えているマシンを表示します |
--serve-ssh を付けると、tailnet のマシンからこのマシンへ SSH できます。ノードは tailnet 上のこのマシンのアドレスのポート 22 をこのマシン自身の sshd に渡し、tailnet からはそれ以外を受け付けません。sshd からはそれらの接続が 127.0.0.1 か ::1 から来たように見えるので、ローカル接続向けに決めたルールがそのまま適用されます。これをオンにするのは up --serve-ssh だけです。付けない up はオフに戻し、down と logout もオフにし、パネルのスイッチがオンにすることはありません。オンのあいだ、パネルには tailnet のマシンからこのマシンへ SSH できます(thinkterm tailnet up)。 と表示されます。
保存されるもの
設定はホスト帳の隣の tailnet.json にあります。その中の認証キーとノードの鍵は、保存パスワードと同じ secret.key で暗号化されているので、同じ限界が当てはまります。マシン上のほかの ThinkTerm プロセスは、設定の隣にあるソケット tailnet.sock を通してノードに届きます。このソケットを開けるのはあなたのアカウントだけです。参加の際は、Tailscale のコントロールサーバー、または コントロールサーバー に設定したサーバーと通信します。
保存したパスワード
ホスト帳に保存したパスワードは AES-256-GCM で暗号化して保存されます。鍵は secret.key という別のファイルに、ホスト帳と同じディレクトリへ置かれます。
macOS と Linux では、この鍵ファイルはモード 0600 で作成されるため、そのマシンの他のアカウントからは読めません。
ただし、これが何を守らないかは明確にしておくべきです。このモードが止めるのは他のユーザーであって、あなた自身として動くものではありません。ファイル同期、バックアップ処理、あるいはあなたが起動した任意のプログラムは、0600 のファイルを難なく読み取ります。しかも secret.key は暗号化されたホスト帳と同じディレクトリにあるため、そのディレクトリをコピーするものは両方を持ち去り、あとから落ち着いて復号できます。鍵をシステムキーチェーンではなくディスクに置くのは意図的なトレードオフであり、これがその代償です。
Windows にこれに相当する権限はありません
Windows では、鍵とホスト帳は %LOCALAPPDATA%\ThinkTerm\ssh\ に一緒に置かれ、ほかのワークスペースデータとは分かれています。これは意図して移動プロファイルの外に出したもので、ドメインからサインアウトしたときに資格情報がプロファイルサーバーへ運ばれないようにするためです。古いインストールにある 2 つのファイルは、ThinkTerm が最初に必要としたときに対で移され、片方だけが移ることはありません。
ただしファイル自体には、そこでも独自の権限は付きません — 置かれたディレクトリの ACL を引き継ぎます。そのマシンを複数のアカウントで共有している場合は、保存したパスワードは「そのフォルダーに到達できる人なら誰でも読める」ものとして扱ってください。
パスワードを保存したくない場合は、代わりに鍵ファイルを使ってください — 同じ編集画面にある、ホストごとの項目です。
切断は削除ではありません
リモートの Space をサイドバーから外すことと削除することは別の操作で、ThinkTerm は意図的に分けています。リモートの Space のメニューには、その名前の下に最大 3 つの項目があります。
| 項目 | すること |
|---|---|
切断(サーバーは実行を継続) | このデバイスにある Space の写しを外します。サーバーは動き続け、その中のセッションはすべて生きたまま残ります。このデバイスが次に接続すると Space は戻ってきます |
サーバー上で削除(全デバイス) | サーバー上の Space を削除し、すべてのデバイスから消します |
削除してリモートセッションを終了 | サーバー上で削除し、その中で動いているセッションも終了します。サーバーに接続しているときだけ表示されます |
ノート PC を閉じるだけなら、どれも要りません。サーバーはそのまま動き続け、次の接続で中断したところから続けられます。
予期しないネットワーク切断のあと、ThinkTerm は自動的に再接続してセッションを復元します。再試行中は失敗ではなく「接続中」として表示されます。
ただし自動再試行には上限があります。約 2 分で ThinkTerm は再試行をやめ、あなたが「再接続」を押すのを待ちます。この時計が測るのは、ネットワークが落ちていた長さではなく、ワークスペースが使えない状態だった長さです — 接続自体は戻るのに、復元されたセッションが毎回拒まれるような回線も、同じ上限に達します。これを 0 に戻すのは、本当に戻ってきたセッションだけです。実際に戻って使えていたセッション — あるいは単にその 2 分より長く続いたセッション — は、次に切れたとき古い時計を引き継がず、新しく計り直します。あきらめても何も破棄されません — ドメインは接続されたままで、ウィンドウもペインもすべて残ります — が、それより長い障害からの復帰には手動の操作が 1 つ必要です。ローカルのセッションサーバーは例外で、あきらめられることはありません。
アップグレードを越えて生き残る
以前はサーバーの更新といえば停止することであり、サーバーを停止すればそれが保持するセッションはすべて終わりました。今はそれだけではありません。
実行中のサーバーは、自分のペインを新しいバイナリへ直接引き渡せます。新しいプロセスが疑似端末、そこで動くプロセス、端末の内容、ウィンドウとタブの構造を引き取り、同じソケットで応答を始めます。クライアント側に見えるのは一度の再接続と id による再バインドだけで、ペインの中身は再起動しません。
引き継がれないペインが 2 種類あります。すでにプロセスが終了しているものと、それ自体が別の場所への通路になっているもの——独立したドメインとして開いた ssh や tmux のペインです。これらは移送されず取り除かれます。
これが リモートサーバー更新時にセッションを維持 の背後にある仕組みです。流れの残りは アップデート を参照してください。
ローカルセッションをセッションサーバーに置く
マルチプレクサはリモートホスト専用ではありません。設定 › 一般 › セッションサーバー にこの項目があります。
ローカル端末をバックグラウンドのセッションサーバーに置く —— ローカル端末はこのマシンの mux サーバーで動作し、ThinkTerm の終了・クラッシュ・更新後も残ります。次回起動時に有効になります。
有効にすると、ThinkTerm を終了することがローカルの作業を終わらせる操作ではなくなり、Thread のレイアウトも作り直されずに引き継がれます。新規インストールでは既定でオンです。これが既定になる前から設定を持っていたインストールはその設定を引き継ぎ、自分でオンにするまではオフのままです。切り替えは即時ではなく次回起動時に反映されます。
Windows でも使えますが、そこでの約束は少しだけ小さくなります。ローカル端末は ThinkTerm の終了とクラッシュを越えて残りますが、アップデートのインストールはサーバーを止め、その中にあるものは終わります。上で述べたペインを新しいバイナリへ引き渡す仕組みは Unix のもので、まだ移植されていません。
ローカル端末がブラウザから届くようになる前提でもあります。ブラウザのクライアントに応じるのは mux サーバーであって、GUI 内蔵のマルチプレクサではありません。ウェブアクセス を参照してください。ブラウザのページに、このサーバーを通してほかのマシンを開くことを許可することもでき、その場合はサーバーが SSH でそのマシンにサインインします。ほかのマシンに接続するを参照してください。
サーバーを経由する負担は思うほど大きくありません。サーバーは、クライアントが同じマシンにいるかどうかを知っているからです。macOS と Linux では、ソケットの向こう側のプロセスを見分け、そのクライアントにはデータを圧縮せず、より大きなバッファで送ります。ローカルのペインで大きな画像や速いアニメーションを表示しても、描画そのものよりはるかに重い負担が 2 つのプロセスにかからないのはこのためです。
意図して終わらせる
このサーバーはアプリより長く生きるため、意図して終わらせる手段が用意されています。thinkterm cli stop-server、Quit and Stop Session Server コマンド — macOS の ThinkTerm メニューで Quit の隣にあり、コマンドパレットにもあります。この名前は画面上で翻訳されません — そして 設定 › 一般 › セッションサーバー の セッションサーバーを停止 です。この行はサーバーが動いているときだけ現れ、実行するにはもう一度押す必要があります。3 つとも同じことをします — サーバー内のすべての端末が終わり、そのウィンドウは閉じ、次に開く端末は新しいサーバーで始まります。
複数のデバイスを行き来する
1 つの ThinkTerm Connect サーバーには複数のクライアントが同時に接続できます。フロントエンドを駆動するのは一度に 1 台で、その権利——ハンドオフリースは、プロセスではなくデバイスに属します。ホストとユーザーで識別される 1 つの画面です。
この区別があるおかげで再起動の代償が小さくなります。駆動していたデバイスが切断して戻ってきたとき(GUI を再起動した、ノート PC の SSH がつなぎ直された)、順番待ちの 2 つ目の画面としては扱われません。最初の描画でリースを取り戻し、クリックは要りません。
ほかのデバイスは従来どおり明示的に引き取る必要があります — ただし、意図して接続すること自体がその行為です。「接続」を押したとき、あるいはサーバーがまだ接続されていない Space へ切り替えたとき、リースは開く処理の一部として取得されます。最初の描画からその端末に打ち込める、ということです。背景で起きる再接続はそうしませんし、接続したままのレンダラーがリースを継承することもありません。どこかのデバイスが取得したあとは、以前の持ち主が戻ってきても取り返しません。手で引き取りたい場合は remote_mux_auto_claim_on_open で自動の側を切れます。
ほかのデバイスが駆動している端末は、あなたから隠されるわけではありません。そのデバイスに見えているとおりに描かれ、隅にはどのマシンが持っているか、クリックかスクロールで引き取れることが示されます。そうするまでは、キー入力もドラッグも分割線の操作も、見えない場所に届くのではなく、どこにも届きません。
ここではブラウザも 1 台のデバイスとして数え、ホストとユーザーではなく、入室に使ったリンクの名前で識別されます — 同じリンクで開いた 2 つのタブは 1 回の順番を共有し、thinkterm cli list-clients にもその名前で並びます。
ここまでの説明は、サーバーの既定のモード B · Handoff (exclusive) についてのものです。端末の右クリックメニューにある Frontend access で A · Shared (tmux-like) に切り替えると、順番はなくなり、接続しているすべてのデバイスが tmux のように、すべての端末へ同時に入力できます。このモードは 1 つの端末や 1 台のデバイスではなくサーバーのものなので、切り替えると接続している全員に及びます。デスクトップ版のこのメニューは翻訳されず、英語で表示されます。
向こう側で何が動いているか
タブには、ペインで動いているプログラムのアイコンを表示できます。ThinkTerm Connect のホストでは、サーバーが自分のペインを見ていて、接続しているすべてのクライアントにそれぞれ何が動いているかを伝えるので、リモートのタブもローカルと同じように表示されます。
通常の SSH では、ThinkTerm から向こう側のプロセスは見えません — ローカルで動いているのは ssh だけです — そのため、リモートのシェルが自分で何を実行しているかを報告しない限り、タブが示せるのはそこまでです。ThinkTerm 自身の一覧にある各ホストには、そのための リモートのプログラムを識別 スイッチがあります。新しいホストではオン、このスイッチができる前に保存したホストではオフで、通常の SSH にだけ用意されています。ThinkTerm Connect には不要で、Mosh はこの報告を受け渡さないからです。
オンにしても、次に接続するまでは何も変わりません。次の接続で ThinkTerm は、シェル統合を SFTP でホストの ~/.config/thinkterm/ にコピーし、ログインシェルが読む起動ファイルに印の付いた 1 行を加えます — .zshrc(ZDOTDIR が指す場所のもの)、または .bashrc と bash が読むログインファイルです。ホストのそれ以外のものには触れません。どのファイルを変える前にも、すべてのファイルに書き込めるかを確かめ、途中まで進んだインストールは元に戻します。スイッチをオフにすると、次の接続で同じようにその 1 行が削除されます。
対応しているのは bash と zsh だけです。ログインシェルがそれ以外(たとえば fish)のホストでは、スイッチの下にその旨が示され、何も残されません。失敗もそこに表示され、書き込めなかったファイルが示されて、次の接続で再試行されます。接続ごとに何を済ませたかはホストに記録されるので、次の接続が同じことを繰り返すことはありません。
設定が済むと、シェルはコマンドを始めるたびにそのコマンドラインを報告し、プロンプトに戻ると消します。報告するのはそれ以降に開いたシェルで、すでに開いているシェルは報告しません。sudo の後ろのコマンドや、先頭に VAR=value が付いたコマンドは、実際に動くプログラムの名前で示されます。ローカルのペインで ssh と打った場合も、向こう側のシェルがこの統合を読み込んでいれば、同じ報告が読まれます。
接続先のサーバーが記述できるもの
接続したサーバーが記述するのは、自分の Space だけです。そのサーバーが名乗った Space の id がすでに別の場所のあなたのもの(ローカルの既定 Space や別のドメイン)であれば、その id に紐づく project とレイアウトを置き換えさせるのではなく、受け取った側が破棄されます。サーバーが送ってこなかった Space を指す project も、既定の Space へ黙って移し替えられるのではなく破棄されます。すでに手元にあるものが、id の取り合いで変わってしまうことはありません。
リモートをローカルのように感じさせるために
以下の挙動は ThinkTerm Connect ドメイン上のセッションに適用されます。
- 待ち時間が体感できる場合に限り、入力は往復を待ちません。 予測的なローカルエコーはサーバーを待たずにキー入力を画面へ出しますが、実測の往復時間がしきい値(既定 100 ミリ秒)に達している場合だけ有効になります。それ未満ではサーバー自身のエコーが十分に速いため、予測は無効のままです。ローカルセッションでは常に無効です。
- 分割はローカル専用の贅沢ではありません。 分割ツリー、第 2 階層のタブバー、ドラッグによる分割、仕切りのドラッグによるサイズ変更は、いずれもリモートで動作し、ローカルと同じように振る舞います。
- サイズがぶれません。 仕切りをドラッグしても、跳ね返り、圧縮、再同期の嵐は起きません。
- 仕切りは回線に見合った速さで動きます。
設定 › ターミナル › リモート分割のサイズ変更は、仕切りのドラッグがいつサーバーに届くかを決めます。既定の自動は、速い接続では継続的に、遅い接続では最終サイズだけを送ります。ライブは常に継続的に送り、離したときは手を離したときだけ送ります。 - ホイールが正確です。
vimやlessのようなマウスモードのプログラムでは、元のノッチ数が保たれるため、スクロールが速すぎることも遅すぎることもありません。 - クライアントの状態はあなたのものです。 フォーカスと選択範囲はローカルが正であり、サーバーのエコーで乱されません。各クライアントが自分のパレットを持つため、片方の端末でテーマを変えてももう一方は変わりません。
- 画像がリモートのペインにも届きます。 画像と kitty プロトコルのアニメーションはローカルと同じようにリモートのペインで表示され、ストリーミング中の画像も毎フレーム失われることなく画面に残ります。
