mosh
mosh は、ネットワークが協力してくれないときでもセッションを生かし続けます。Wi-Fi からモバイル通信に切り替える、ふたを閉じる、電波の届かない場所へ歩いていく — 再接続すれば、セッションはそのまま残っています。Tessera はこれに、iOS の他のどの mosh クライアントも備えていないものを組み合わせました。本物のスクロールバック です。
mosh を使うには、ホストにmosh-serverがインストールされていること、そして初期
設定では UDP ポート 60000〜61000 が開いていることが必要です。ホストごとの選択は、
ホストエディタのトランスポート設定で
行います。
ローミング
mosh のセッションは、ネットワーク経路ではなく利用者の識別情報に紐づいています。 Wi-Fi ↔ モバイル通信の切り替え、アドレスの変更、スリープと復帰をまたいでも Tessera はアタッチしたままで、セッションはパケットが途切れたところから続きます。 VPN や tailnet 越しでも同じように動作します。mosh に必要なのは、サーバーに届く UDP だけです。
本物のスクロールバック
素の mosh にスクロールバックはありません。設計上、同期されるのは表示中の画面だけ で、流れて消えたものは送られません。iOS の他の mosh クライアントはいずれもこの 制限を受け継いでおり、tmux の copy-mode を使うよう案内されます。
Tessera はその代わりに履歴を組み立てます。tmux 上で動く mosh セッションでは、 ターミナルは UDP に乗り、2 本目の SSH サイドチャネルが tmux と話します。上に スクロールすると、そのチャネルを通じて本物の履歴が取り込まれ、その場に表示され ます。ターミナル内を検索で検索でき、選択もでき、 欠けもありません。
読んでいる間の挙動は次のとおりです。
- 上にスクロールすると、履歴がその場で固定されて現れます。新しい出力に下まで 引き戻されることはありません。
- 一番下に戻る(または入力する)と、オーバーレイが消えて最新の画面に戻ります。
- 勢いよくフリックしてもそのまま流れ続けます。最初のページはすぐに読み込まれ、 残りの履歴はその後ろから、サーバーが保持している範囲まで順に届きます。
必要なもの
- tmux の起動モード。 スクロールバックの組み立てが働くのは、自動 tmux と 名前付き tmux のセッションです(自動 tmux が既定です)。カスタムコマンドで 起動した mosh ホストには問い合わせる tmux がないため、素の mosh と同じ スクロールになります。
- サーバー側の履歴。 さかのぼれる深さは、サーバー側の tmux の
history-limitに制限されます。Tessera が表示できるのは、tmux が保持していた分 だけです。 - プライマリスクリーン。
vim、less、htopのような全画面プログラムは、 スクロールを自分で処理します。Tessera は他のターミナルと同じく、スクロール操作を 入力としてそれらに渡します。
mosh とそれ以外
履歴を取ってくるのと同じ SSH サイドチャネルは、mosh のホストでは tmux のウインドウとペインや ポート転送も運びます。 ファイルパネルは独自の SSH の橋を開くため、ファイル転送とトンネルは mosh でも素の SSH でも同じように機能します。
1 つ注意点があります。mosh の UDP は SSH の踏み台ホストを越えられません。 踏み台チェーンを経由するホストでは、Tessera はまず mosh を試し、UDP でサーバーに到達できなければ SSH にフォールバックします。VPN や tailnet 経由などで元々 UDP が届く相手なら、そのまま mosh として動き続けます。