Skip to content

リモート

ドキュメント作成中

一部の内容はまだ不完全な場合があります。

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

Space ごとにまとまったライブターミナル(現在オフラインのマシンを含む)

SSH ホスト帳

ThinkTerm は独自のホスト一覧を、システムの SSH 設定とは別に保持します。その隣に、~/.ssh/config で定義されたホストが読み取り専用のビューとして表示されます — ThinkTerm はこのファイルを読みますが、書き込むことはありません。

ThinkTerm 自身の一覧では、ホストごとにユーザー名、鍵ファイル、任意の SSH オプション、既定のワークスペース、そして保存パスワードを記録できます。OS 判定は既定で有効になっており、接続したホストがどのディストリビューションで動いているかを報告できます。

3 つの接続方法

ホストは次のいずれかの方法で開けます。

通常の SSH — 直接のセッションです。接続が切れればセッションも終わります。

Mosh — ネットワークの切り替えやスリープに耐えるローミング型の UDP セッションです。ThinkTerm は既定で mosh-server new -s -l LANG=en_US.UTF-8 によりリモート側を起動します。このコマンドはホストごとに変更でき、リモートマシン上の mosh-server が通常と異なる場所にある場合に必要になります。

ThinkTerm Connect — 常駐するマルチプレクサです。完全なワークスペースが得られるのはこの方法だけです。サーバーがセッションツリーを保持するため、複数のクライアントが同時に接続して同じ構造を見ることができ、あるクライアントが離脱してもすべてはそのまま動き続けます。

保存したパスワード

ホスト帳に保存したパスワードは AES-256-GCM で暗号化して保存されます。鍵は secret.key という別のファイルに、ワークスペースデータディレクトリ内のホスト帳の隣に置かれます。

macOS と Linux では、この鍵ファイルはモード 0600 で作成されるため、そのマシンの他のアカウントからは読めません。

ただし、これが何を守らないかは明確にしておくべきです。このモードが止めるのは他のユーザーであって、あなた自身として動くものではありません。ファイル同期、バックアップ処理、あるいはあなたが起動した任意のプログラムは、0600 のファイルを難なく読み取ります。しかも secret.key は暗号化されたホスト帳と同じディレクトリにあるため、そのディレクトリをコピーするものは両方を持ち去り、あとから落ち着いて復号できます。鍵をシステムキーチェーンではなくディスクに置くのは意図的なトレードオフであり、これがその代償です。

Windows では鍵ファイルに特別な権限が付きません

0600 が適用されるのは Unix のみです。Windows では secret.key は通常のファイルとして書き込まれ、置かれたディレクトリの既定の権限を引き継ぎます。そのマシンを複数のアカウントで共有している場合や、ディレクトリの権限が緩い場合は、保存したパスワードは「そのフォルダーに到達できる人なら誰でも読める」ものとして扱ってください。

パスワードを保存したくない場合は、代わりに鍵ファイルを使ってください — 同じ編集画面にある、ホストごとの項目です。

切断は削除ではありません

これは 2 つの別の操作であり、ThinkTerm は意図的に分けています。

切断 はこのクライアントを離脱させるだけです。サーバーは動き続け、その中のセッションはすべて生きたまま残ります。後で接続し直せば、ワークスペースは元のまま復元されます。

サーバー上で削除 はセッションを終了させます。これは破壊的な操作であり、ノート PC を閉じるだけのときに望むものではありません。

予期しないネットワーク切断のあと、ThinkTerm は自動的に再接続してセッションを復元します。再試行中は失敗ではなく「接続中」として表示されます。

ただし自動再試行には上限があります。約 2 分間続けて失敗すると ThinkTerm は再試行をやめ、あなたが「再接続」を押すのを待ちます。あきらめても何も破棄されません — ドメインは接続されたままで、ウィンドウもペインもすべて残ります — が、それより長い障害からの復帰には手動の操作が 1 つ必要です。

アップグレードを越えて生き残る

以前はサーバーの更新といえば停止することであり、サーバーを停止すればそれが保持するセッションはすべて終わりました。今はそれだけではありません。

実行中のサーバーは、自分のペインを新しいバイナリへ直接引き渡せます。新しいプロセスが疑似端末、そこで動くプロセス、端末の内容、ウィンドウとタブの構造を引き取り、同じソケットで応答を始めます。クライアント側に見えるのは一度の再接続と id による再バインドだけで、ペインの中身は再起動しません。

引き継がれないペインが 2 種類あります。すでにプロセスが終了しているものと、それ自体が別の場所への通路になっているもの——独立したドメインとして開いた sshtmux のペインです。これらは移送されず取り除かれます。

これが リモートサーバー更新時にセッションを維持 の背後にある仕組みです。流れの残りは アップデート を参照してください。

ローカルセッションをセッションサーバーに置く

マルチプレクサはリモートホスト専用ではありません。設定にはこの項目があります。

ローカル端末をバックグラウンドのセッションサーバーに置く —— ローカル端末はこのマシンの mux サーバーで動作し、ThinkTerm の終了・クラッシュ・更新後も残ります。次回起動時に有効になります。

有効にすると、ThinkTerm を終了することがローカルの作業を終わらせる操作ではなくなり、Thread のレイアウトも作り直されずに引き継がれます。既定はオフで、切り替えは即時ではなく次回起動時に反映されます。

複数のデバイスを行き来する

1 つの ThinkTerm Connect サーバーには複数のクライアントが同時に接続できます。フロントエンドを駆動するのは一度に 1 台で、その権利——ハンドオフリースは、プロセスではなくデバイスに属します。ホストとユーザーで識別される 1 つの画面です。

この区別があるおかげで再起動の代償が小さくなります。駆動していたデバイスが切断して戻ってきたとき(GUI を再起動した、ノート PC の SSH がつなぎ直された)、順番待ちの 2 つ目の画面としては扱われません。最初の描画でリースを取り戻し、クリックは要りません。

ほかのデバイスは従来どおり明示的に引き取る必要があります。接続したままのレンダラーがリースを自動的に継承することはありませんし、どこかのデバイスが明示的に取得したあとは、以前の持ち主が戻ってきても取り返しません。

リモートをローカルのように感じさせるために

以下の挙動は ThinkTerm Connect ドメイン上のセッションに適用されます。

  • 待ち時間が体感できる場合に限り、入力は往復を待ちません。 予測的なローカルエコーはサーバーを待たずにキー入力を画面へ出しますが、実測の往復時間がしきい値(既定 100 ミリ秒)に達している場合だけ有効になります。それ未満ではサーバー自身のエコーが十分に速いため、予測は無効のままです。ローカルセッションでは常に無効です。
  • 分割はローカル専用の贅沢ではありません。 分割ツリー、第 2 階層のタブバー、ドラッグによる分割、仕切りのドラッグによるサイズ変更は、いずれもリモートで動作し、ローカルと同じように振る舞います。
  • サイズがぶれません。 仕切りをドラッグしても、跳ね返り、圧縮、再同期の嵐は起きません。
  • ホイールが正確です。 vimless のようなマウスモードのプログラムでは、元のノッチ数が保たれるため、スクロールが速すぎることも遅すぎることもありません。
  • クライアントの状態はあなたのものです。 フォーカスと選択範囲はローカルが正であり、サーバーのエコーで乱されません。各クライアントが自分のパレットを持つため、片方の端末でテーマを変えてももう一方は変わりません。
  • 画像がリモートのペインにも届きます。 画像と kitty プロトコルのアニメーションはローカルと同じようにリモートのペインで表示され、ストリーミング中の画像も毎フレーム失われることなく画面に残ります。

関連