ターミナル
Mobile SSH のターミナルはスマートフォンとタブレットでの操作向けに作られています。ターミナルキャンバス、追加キーの行、複数セッションのペイン、スクロール処理、再接続の挙動を組み合わせています。
ターミナルの基本
- ターミナルは xterm 風の挙動で、色のサポートとカーソルキー処理を備えます。
- スクロールバックバッファは既定で 5000 行を保持し、Settings で 1,000/10,000/50,000 行に変更できます。
- 入力する前にペインをタップして選択します。
- ターミナルのペインをピンチすると文字サイズを変更できます。ジェスチャーが落ち着くと Mobile SSH はリモートの PTY のサイズを変更します。
- ペインをダブルタップする(またはペインの展開ボタンを使う)と全画面モードに入ります。グリッドに戻るには、Android では戻るボタンを、iOS では折りたたみボタンを使います。
複数セッションのグリッド
Mobile SSH は最大 8 個の SSH セッションを同時に実行できます。各セッションはターミナルグリッドのペインとして表示されます。ペインをタップして選択するか、+ Add Session で別の接続を開始します。
ペインのヘッダーは、いまどこにいるかを示します。Android では、tmux への問い合わせやシェルからの OSC 7 通知で得た、そのペインの実際の作業ディレクトリを表示し、アプリが開いている間は更新され続けます。iOS ではリモートが設定したタイトルを表示し、なければ user@host:port にフォールバックします。
ペインを閉じるとその SSH セッションが切断されます。開始画面に戻ると、アクティブなセッションは Active Sessions から引き続き利用できます。
Eternal Terminal (ET)
保存済みサーバーはそれぞれ 2 つのトランスポートのいずれかを使えます。サーバーの追加・編集時に Transport セレクターで選択します。
- SSH — 標準の SSH 接続(既定)。
- Eternal Terminal — ネットワークの切断、端末のスリープ、IP アドレスの変更をシェルの再起動なしに乗り越える ET セッション。
ET はサーバー側でセッションを生かし続けるため、スマートフォンのネットワークが変わったりスリープから復帰したりしても、Mobile SSH は新しいセッションを開くのではなく、同じ実行中のシェルに再アタッチします。モバイル回線、Wi-Fi とモバイル回線の切り替え、長時間実行するコマンドに適しています。
ET にはホスト上の etserver プロセスが必要です。サーバーにない場合は、Mobile SSH が既存の SSH 接続経由でインストールして起動できます — サーバー側の手作業は不要です。ET が使えるようになったら、Eternal Terminal トランスポートを選んで接続してください。
追加キーの行
どちらのプラットフォームも、タッチキーボードでは扱いにくい、あるいは存在しない 13 個のターミナルキーの行を手元に置きます。Android ではセッション下部の帯として表示され(ハードウェアキーボードを接続すると自動的に隠れます)、iOS ではソフトウェアキーボードの上に乗ります。
2 つの既定セットは同じ大きさですが、同一ではありません。
| Android | iOS | |
|---|---|---|
| 既定値 | ESC TAB CTRL 矢印 HOME PGUP END PGDN ⌫ ⌨ | ESC TAB CTRL ⇧ 矢印 HOME END PGUP PGDN ⌨ |
| 違い | バックスペースあり、Shift なし | 固定式の Shift あり、バックスペースなし |
この行は決してスクロールしません。 キーが横幅に収まらなくなると、スペースを均等に分けて 2 段目に折り返します。それでも残る分は ⋯ のオーバーフローメニューにまとめられます。スワイプの奥に隠れたり画面端で切れたりするものはなく、有効にした修飾キーはオーバーフローから選んだキーにもきちんと適用されます。
CTRL は固定修飾キーとして働きます。CTRL をタップしてから C を入力すると Ctrl-C を送信します。Shift は Android より iOS のほうが強く固定されます。iOS ではソフトウェアキーボードで次に入力する文字も大文字にしますが、Android ではキーバー自身のキー(Shift+Tab、Shift+矢印)にのみ適用されます。
矢印や PGDN などのキーを長押しするとリピートします。
キーボードの挙動
ターミナルは画面上のキーボードにネイティブなパススルー接続を使います。入力した各文字はそのままリモートシェルへ送られ、自動修正や予測候補はオフになっているため、キーボードがシェルに届く前に入力を書き換えることはありません。これにより Vim、tmux、htop、less、特殊なキーコンビネーションを使うシェル、リモートのパスワード入力の挙動が予測可能になります — 無効にすべき候補バッファはありません。
- ターミナルをタップしてキーボードを表示: 有効にすると、ターミナルをタップしたときにシステムへ画面上のキーボードの表示を要求します。
ソフトキーボードの音声入力(ディクテーション)も引き続き利用できます。ディクテーションしたテキストは、他の入力と同じようにそのままシェルへ確定されます。
ハードウェアキーボード
外付けおよび Bluetooth のキーボードは、Android と iOS のどちらでもターミナルを直接操作できます。通常の文字に加えて、Mobile SSH は矢印キー、Home/End、PgUp/PgDn、Insert、Delete、Esc、ファンクションキー F1〜F12、Ctrl+キー、Alt/Option を Meta として扱う組み合わせ、Shift+Tab を割り当てます。修飾キーは追加キーの行の固定修飾キーと組み合わせられます。
貼り付け
貼り付けを要求するプログラム(bash、Vim、その他のブラケットペースト対応アプリ)への貼り付けは、ブラケットペーストのマーカーで囲まれます。そのため複数行のクリップボード内容は、1 行ずつ自動実行されるのではなくテキストとして挿入されます。囲まれるのは実際の貼り付けだけで、入力やディクテーションしたテキストはそのままです。
選択・コピー・共有
ターミナル内を長押しすると指の下の単語が選択され、ハンドルをドラッグして範囲を調整できます。選択ツールバーには 3 つの操作があります。
- コピー — 選択したテキストをシステムのクリップボードに置きます。コピー後も選択はハイライトされたまま残るため、共有したり、再コピーしたり、範囲を広げたりできます。
- 共有 — 選択したテキストをシステムの共有シート(メール、メモ、メッセージなど)に渡します。
- すべて選択 — 選択を表示中のターミナルバッファ全体に広げ、コピーまたは共有します。
ターミナル内検索
ターミナルバッファ全体 — スクロールバックと表示中の画面 — を検索し、一致箇所を移動できます。ターミナルのコントロールから検索を開き、クエリを入力して、ヒットを順にたどります。これは Android と iOS の両方で動作します。
カラー・イタリック・リモート クリップボード
- ターミナルは 24-bit トゥルーカラー と イタリック を描画するため、テーマ付きのプロンプト、シンタックス ハイライト、TUI がデスクトップと同じように表示されます。
- OSC 52 クリップボード: リモートのプログラムがテキストをコピーする(tmux の
set-clipboard、Vim/Neovim の OSC 52 ヤンクなど)と、それがスマホのクリップボードに届きます — サーバーからコピーしてローカルのアプリに貼り付けられます。 - Android と iOS のどちらでも、ワイド CJK、絵文字、結合文字(書記素クラスタやゼロ幅接合子)が正しく計測・描画され、内蔵の Nerd Font が、システム フォントでは空の四角として表示されてしまう powerline、starship、devicon、Material Design のアイコン グリフを描画します。
シェル統合とインライン画像
- シェル統合(OSC 133): シェルが OSC 133 のプロンプト マーカーを出力すると、Mobile SSH はプロンプト間を移動したり、長時間実行コマンドの完了時にアラートを出したりできます。Android と iOS で動作します。マーカーはどちらのアプリも注入しません — シェル側で出力する必要があります(
PROMPT_COMMAND/precmdのフック、または starship)。Android ではプロンプト間の移動は Settings → Shell integration で有効にするまでオフです。iOS ではマーカーが届き始めると自動でメニューが現れます。 - 出力の選択: コマンド出力の中をタップすると、そのブロック全体を選択できます — 直前のコマンドだけでなく、300 行前のビルドエラーも — そのままコピー・共有・範囲の拡張ができます。
- インライン画像: Kitty グラフィックス プロトコルを使うプログラムは、Android と iOS でターミナル内に直接画像を描画します。画像はピンチズームや折り返しの変化でも消えません。セル単位で計測され、その行に付いて動くため、破棄されて隙間が残ることはありません。これはメイン画面向けの機能で、全画面の TUI が前面に出ると消去されます。
- モザイク グリフ(Android): ブロック、点字、六分割、八分割の文字はフォントに要求せずアプリ自身が描画します。そのため
chafa、timg、ANSI アートは、どのフォントを選んでいても継ぎ目や空の四角なしにグリッドへぴったり敷き詰められます。 - 実際の作業ディレクトリ(Android): ペインのヘッダーには、最後のプロンプトがたまたま出力した文字列ではなく、tmux への問い合わせやシェルからの OSC 7 通知で得た、そのペインの実際の場所が表示されます。
外観とキー
Android と iOS のどちらでも、Settings でターミナルを細かく調整できます。
- フォント: システムの等幅フォント、JetBrains Mono、Source Code Pro から選べます。
- カラースキーム: デフォルト、Solarized Dark または Light、Gruvbox、Dracula、Nord — 開いているペインに即時反映されます。
- 追加キーの行: キーの追加・削除・並べ替え・非表示、独自のエスケープシーケンス キーの定義、既定値へのリセットができ、実際の行の分かれ方がそのまま見えるライブ プレビューも利用できます。Android では Keys タブに、iOS では Extra keys → Customize keys にあります。
- プリセットから追加: 6 グループ・約 45 種のキーのパレット —
F1〜F12、^C^D^Z^R^Lなどの Ctrl の組み合わせ、|~/_:などの記号、修飾キー。F1〜F12は通常のエスケープシーケンスとして送られるため、FNとの同時押しは不要です。Android にはさらに、ファイル選択ツールを開いて実行中のセッションへアップロードする 📎 Attach a file キーがあります。iOS にはINS、DEL、数字の行を表示するFNキーがあります。 - スクロールバックのサイズ: 1,000/5,000/10,000/50,000 行(既定は 5,000 行)。新しいペインに適用されます。
- 文字サイズ: ピンチズームと併用できるスライダー。
- テーマ: アプリ全体を System、Light、Dark から選択。
リセットは今日の一覧を固定するのではなく、出荷時の既定値に戻します。そのため、後のリリースでの改善もきちんと反映されます。編集はすでに開いているペインにも即時に適用されます。
スクロール
Mobile SSH はターミナルの状態に応じてスクロールのジェスチャーを振り分けます。
- 通常のシェル出力では、スワイプはローカルのスクロールバックバッファをスクロールします。
- マウスモードのターミナルアプリでは、スクロールはマウスホイールのエスケープシーケンスを送信します。
- マウスモードのない代替画面アプリ(多くの tmux セッションなど)では、スクロールは tmux のコピーモードに入り、行スクロールのコマンドを送信します。
Android では、マウストラッキングを使うプログラム内でのタップは、そのセル位置での左クリックとして送られます。そのため htop、vim、クリックでフォーカスするペインがタッチに反応します。iOS では同じプログラム内でのタップはクリックにならずキーボードを表示し、報告されるのはホイールのスクロールだけです。
スクロールバックした状態で入力すると、Mobile SSH はライブのターミナル表示に戻ります。
tmux の挙動
Mobile SSH は送信される tmux の attach や新規セッションのコマンドを観察します。たとえば:
tmux attach -t work
tmux a -t work
tmux new -A -s work
tmux 中に接続が切れた場合、アプリはそのサーバーの最後の tmux セッション名を記憶し、再接続後に再アタッチを試みることがあります。明示的なセッション名が観察されなくても、代替画面の tmux 的なセッションにいたことをアプリが把握していれば、汎用の tmux attach を試すことがあります。
この挙動はベストエフォートです。リモートの tmux セッションがもう存在しない場合でも、リモートシェルは引き続き利用できます。
Tmux マネージャー
Mobile SSH には tmux マネージャーが含まれており、プレフィックスの同時押しを入力せずに tmux を閲覧・操作できます。接続済みのセッションから Tmux ボタンで開きます。3 つのセクションに一覧が表示されます。
- Sessions — サーバー上のすべての tmux セッション。
- Windows — 選択したセッション内のウィンドウ。
- Panes — 選択したウィンドウ内のペイン。
マネージャーからは次のことができます。
- セッションを現在のターミナルに アタッチ する。
- 新しいセッションやウィンドウを 作成 し、名前を変更 する。
- ペインを水平/垂直に 分割 し、ペインを ズーム し、セッション・ウィンドウ・ペインを 強制終了 する。
- セッションを名前または作成日で 並べ替える。
エージェントが入力待ちのセッションには 🔔 が付くため、停止している Claude Code や Codex の実行をひと目で見つけてアタッチできます。これは前述の再アタッチのヒントを補うものです。再アタッチの仕組みは再接続時に直前のセッションを自動で復元し、マネージャーは完全な手動操作を提供します。
どちらのプラットフォームでも、同じホスト上の複数の tmux サーバー(ソケット)を管理でき、セッションを名前または作成日で並べ替えられます。
Herdr と Zellij(Android)
Android は同じ考え方を他の 2 つのマルチプレクサーにも提供します。それぞれ専用のツールバーアイコンを持ち、アイコンはアプリがそのプログラムをサーバー上で実際に見つけたときにだけ表示されます — つまり which を実行しなくても、何がインストールされているかツールバーが教えてくれます。
- Herdr は独自の語彙を使います:セッション、ワークスペース、タブ、ペイン。各ペインにはエージェントの状態 — 作業中、応答待ち、待機中 — が表示され、止まっているエージェントには一覧から直接応答できます。herdr 自身の状態がアプリのエージェント バッジに反映されるため、サーバーにフックを入れなくても機能します。
- Zellij はセッション、タブ、ペインを一覧表示し、アタッチ、名前変更、強制終了、分割ができます。強制終了したセッションは一覧に残るためアタッチすれば復活し、削除すると完全に忘れられます。タブとペインの詳細には Zellij 0.44 以降が必要です。それより古いバージョンでは、ページはタブ名を表示したうえで理由を説明します。分割にはセッションにクライアントがアタッチされている必要があり、ページは失敗するボタンを出す代わりにその旨を説明します。
herdr や Zellij がインストールされているのにログインシェルの PATH に無い場合、ページが追加を提案します。
保存済みサーバーにはそれぞれ Attach on connect の設定があります:Auto (detect)、Nothing、tmux、herdr、Zellij。Auto は、そのサーバーで最後に使ったもの、次に生きているセッションがあるもの、次にインストールされているものの順に選びます。まだサーバーを調べていない場合は、推測せず何にもアタッチしません。
現在の iOS アプリは tmux 専用です。
エージェント アラート
Mobile SSH は、リモートの AI コーディング エージェント — Claude Code、Codex、Gemini — があなたの応答を待って止まっているときに知らせます。ターミナル出力を読んで推測することはしません。方法は 2 つあり、それぞれ得られる情報の細かさが違います。
ベル
初期状態でも、見ていないセッションからのターミナルのベルはアラートになります。多くのツールがすでに出しているデスクトップ通知のエスケープシーケンス(OSC 9、OSC 777)も同様です。入力の直後に届いたベルは無視されるため、通常のシェル補完の音で呼び出されることはありません。
これは設定不要ですが、アプリには「何かが鳴った」ことしかわかりません。
エージェント フック
どの エージェントが待っていて 何を しているのかをアプリが知るには、サーバーにエージェント フックをインストールします。
- iOS: Settings → Agent alerts → Install Agent Hook。複数のサーバーに接続している場合は、どれに入れるか尋ねられます。
- Android: セッションのペインヘッダーを長押しして Install agent hooks を選びます。
これはそのサーバーの ~/.mobile-ssh/agent-hook.sh に小さなシェルスクリプトを書き込みます。特定のベンダーの形式を解析するのではなくコマンドライン引数を受け取る、エージェント非依存の仕組みなので、コマンドを実行できるものなら何でもこれを通じて報告できます。アンインストールはファイルを削除するだけです。
エージェントがフック経由で報告し始めると:
- ペインのヘッダーに
claude · needs youと表示されるか、実行中のツール名が表示されます。 - エージェントが止まっているペインには琥珀色の枠が付きます。いま見ているペインはそのままです — プロンプトは目の前にあります。
- ツールバーのバッジが、すべての接続にまたがって待機中のエージェント数を数えます(上限は
9+)。 - Agents 画面には、すべての接続のすべてのエージェントが、何をしていてどれだけ待っているかとともに一覧表示されます。
入力せずに応答する
エージェントが選択肢の決まった質問をしたとき、アプリは Agents 一覧に選択肢ごとのボタン(最大 6 個)を表示します。Android ではペインヘッダーのエージェント チップをタップすることもできます。
あなたの回答はセッションに打ち込まれるわけではありません。別のチャネルでファイルに書き込まれ、フックが拾い上げるため、応答によって画面上の内容が壊れることはありません。アプリは、プロンプトが実際には提示していない選択肢の送信を拒否し、その間に接続が切れていた場合は黙って失敗せずはっきりと伝えます。
設定
アラートは両プラットフォームとも既定で有効で、通知・音・バイブレーション・いま表示中のセッションでもアラートを出すかどうかを個別のスイッチで切り替えられます。
知っておく価値のある既定値がひとつあります:音はヘッドフォンに限定されています。有線でも無線でも何も接続していないと、アラートは通知と振動はしますが音は鳴りません。スマートフォンのスピーカーで鳴らしたい場合はこの設定をオフにしてください。
感度の設定も通知音の選択肢もありません — コントロールはオン/オフだけです。
全画面のターミナルプログラム
Vim、less、htop、ncurses ツール、tmux ペインなどのプログラムでは:
- 入力はそのままプログラムへ渡されます — 妨げになる自動修正や候補バッファはありません。
ESC、矢印、PGUP、PGDNには追加キーの行を使います。- 文字が小さすぎる場合はピンチズームを使い、その後リモートのターミナルサイズが落ち着くまで少し待ちます。