Skip to content

Terminal ​

SSHとローカルシェルを同じ画面で開き、検索、クイックコマンド、ポート転送を利用できます。複数のセッションを並べて操作するには分割表示を使います。

ワークスペース内でローカルシェルを開いたTerminal

セッションが無いとき ​

開いているセッションが無いときは、[セッションを開く]と[接続先を追加]のタイルを出します。[セッションを開く]は、サイドバーの[新しいセッション]と同じ画面で、接続先かローカルシェルを選んで開きます。同期を設定していないときは、[同期で受け取る]も出します。

タイルの下には、新しいシェルが開くsshcエンジンの様子を出します。リモートセッションを選んでいれば、そのsshcエンジンのものです。

  • アクティビティ:ターミナルのSSH接続の日ごとの回数。PCでは最近の接続も並べ、押すとその接続先を開きます。まだ接続していないときは出しません
  • マシンの状態:マシンの名前、OS、CPUの使用率、メモリ、稼働時間。OSが出さない値は省きます(macOSはCPUと使用中のメモリ、FreeBSDとOpenBSDは使用中のメモリを出しません)

後ろには動く絵を出します。絵は[Settings]→[Appearance]の「セッションが無いときの背景」で、ネットワーク・等高線・地球儀・水槽・なしから選べます。既定は「ネットワーク」です。スマホでは、絵をタイルの上の帯に出します。絵はこの画面を出している間だけ動き、タブやアプリが裏に回ったときと、「動きを減らす」がオンのときは止まります。

水槽の魚は、最近の接続です。直近30日によく接続したものほど大きな魚になり、PCでは魚の下に接続先の名前を出します。マウスを近づけると魚が寄ってきて、何も無い所をクリック(スマホではタップ)すると、そこに餌が落ちて魚が食べに来ます。スマホでは、餌を食べた魚の名前だけを出します。色はターミナルの配色に合わせます。

通信の流れ ​

シェルを動かしているのはsshcエンジンです。ブラウザはWebSocketで出力を受け取って描画し、入力を送ります。ブラウザとの接続が切れても、セッションはsshcエンジンで動き続けます。

ブラウザの再接続 ​

再接続時は、ブラウザが描画済みの位置以後だけをsshcエンジン側のバッファから復元します。

  • 表示済みの出力を重複させず、ブラウザ側だけに残る古いスクロールバックも消しません。
  • 切断が長く、必要な出力がバッファから既に押し出されていた場合は画面で知らせます。
  • どちらのバッファもメモリにだけ保持し、Vault、バックアップ、同期スナップショットには保存しません。ターミナルの出力をファイルに書くのは、[セッションのログをファイルに保存する]をオンにしたときだけです(セッションのログ)。

接続の進行状況を表示する ​

SSHの接続は、段階ごとに表示します。ホスト鍵の確認待ちや認証失敗が発生した場合、接続を自動では再試行しません。

シークレットの入力 ​

保存されていないSSHパスワード、鍵パスフレーズ、keyboard-interactiveでシークレットの入力が必要な場合は、入力した値を表示せず、1文字ごとに*を表示します。BackspaceやCtrl+Uで修正しても平文はスクロールバックに残りません。

接続のログ ​

[Settings]→[Terminal]の[接続のログ]では、新しく開く接続について、OpenSSHの-v/-vv/-vvvに相当する診断をターミナルに表示できます。各行には[sshc][debug1]のように、その行の詳細レベルが付きます。

  • [基本情報(-v)]: 接続先、踏み台ごとの接続完了、サーバーのバナー、セッションの開始
  • [鍵・経由ホスト・所要時間(-vv)]: [基本情報(-v)]の内容に加えて、次の項目
    • 認証方式の候補と、試さなかった理由
    • 鍵ごとの種類、SHA256フィンガープリント、復号の方法(パスフレーズなし/保存済み/入力)、読み込めなかった鍵
    • サーバーのホスト鍵のフィンガープリントと、known_hostsの何行目と一致したか(一致しない場合は、どの行にどの鍵があるか)
    • パスワードの取得元と、どの方式で認証されたか
    • ターミナルサイズの要求(列×行)、送った環境変数の名前と拒否されたもの
    • keepaliveの間隔と回数、適用しない設定
  • [すべて(-vvv)]: [鍵・経由ホスト・所要時間(-vv)]の内容に加えて、次の項目
    • sshcがサーバーへ提示するホスト鍵アルゴリズム、鍵交換、暗号、MACの一覧
    • TCPのローカル/リモートアドレス
    • ssh-agentの鍵のフィンガープリント一覧
    • keyboard-interactiveのプロンプトごとの文

パスワード、パスフレーズ、TOTPコード、セットアップキー、環境変数の値はログへ出しません。sshc ssh <接続先> --non-interactiveも同じ設定を使用します。

切断と再接続 ​

接続が切れたSSHセッションは、待ち時間を伸ばしながら自動で再接続を試みます。

操作結果
待っている間にペイン上部の[再接続を停止]打ち切る。セッションは終了状態のまま一覧に残り、[再接続]で手動で開き直すか、閉じるかを選べる
終了したSSHセッションの[再接続]同じペインとスクロールバックを残したまま再接続する
接続の問題で終わったセッションでEnter再接続する。ほかのキーは捨てる
スマホで入力欄の送信再接続する。打った文は残る
SSH/ローカルシェルを明示的に閉じるすぐに停止し、一覧からも削除する

回線が無い間は再接続の回数に数えずに待ち、回線が戻ったらすぐ試します。

環境回線の確かめ方
AndroidのアプリOSの知らせで回線の有無を知る
PCnetwork is unreachableなどの失敗を見て5秒ごとに確かめる

Androidでは、Wi-Fiとモバイル回線が切り替わったときに接続が応答するかを確かめ、10秒応答が無ければ再接続します。このときの再接続は待たずに試し、それまでの再接続の回数に足しません。

再接続や開き直しで新しいシェルになると、前のシェルのプログラムは終わっています。前のシェルでClaude Codeが動いていたときは、claude --continueをターミナルの行とお知らせで案内し、お知らせのボタンで実行できます。作業フォルダが分かれば、そこへ移動するコマンドも付けます。

tmuxで開く ​

切断のあとも同じ画面に戻りたい接続先は、Connectionsの[表示とターミナル]で[tmuxで開く]を選びます。シェルの代わりにtmux new -A -s sshc-<接続名>を起動します。

  • 再接続・手動の再接続・開き直しは同じtmuxのセッションに戻ります。戻ったときは、起動スニペットも作業フォルダへの移動も打ち込みません。
  • 同じ接続先の2本目はsshc-<接続名>-2になります。
  • サーバーにtmuxが無いときはターミナルで知らせて、ふつうのシェルで開きます。
  • sshcのセッションを閉じてもtmuxのセッションはサーバーに残り、次に開くとそこへ戻ります。終えるにはtmuxの中でexitします。
  • この設定は~/.ssh/configに書かないので、sshやscpには影響しません。HostブロックにRemoteCommandがあるときは、そちらに従います。
  • tmuxの中のプログラムの状態(OSC 7501)はサイドバーに届きませんが、画面に見えているClaude Codeの許可待ちと回答待ちは出します(タイトルと通知)。
  • sshc sshはtmuxを使いません。

止めたあとにセッションを開き直す ​

sshcエンジンが止まるとき(更新、PCの再起動、手動の停止)、開いていたセッションの接続先、ワークスペース、作業フォルダを、このマシンだけに記録します。

次に起動してVaultのロックを解除すると、「前回のセッションを開き直しますか」と聞きます。

  • [開き直す]: 同じ順番で開き直し、作業フォルダが分かるセッションはそこへ移動します。
  • [開き直さない]: 記録を消して、二度と聞きません。
  • 答えないまま止めた場合: 次の起動でもう一度聞きます。

リモートセッションも同じです。接続先のsshcエンジンが起動し直したあと、最初にそのsshcエンジンを選んでVaultのロックが解除されているときに聞きます。

開き直せないもの ​

  • agentsワークスペースのセッションは開き直しません。
  • 異常終了や電源断のように、sshcエンジンが止まる処理を通らなかった場合は記録されません。

作業フォルダの読み取り ​

種類作業フォルダの読み取り
SSHセッションシェルがOSC 7で知らせた場所か、Debian・Ubuntuのbashが既定で付けるuser@host: ~/dirの形のタイトル
Linuxのローカルシェルsshcエンジンが直接読み取る

どちらも無いSSHセッションと、引用符や\、&などの記号を含むフォルダのSSHセッションは、接続だけを開き直してホームフォルダから始めます。接続先のシェルの種類によっては、記号をコマンドの一部と読むためです。

記録するもの ​

記録には接続先の名前とフォルダの場所だけを書き、パスワードや出力は書きません。同期でほかのマシンへ運ぶこともありません。

[セッションを複製]で開くセッションも、複製元の作業フォルダから始まります。

Terminal操作 ​

スクロールバックと検索 ​

  • Ctrl/Cmd+Fによるスクロールバック検索。大文字/小文字、正規表現、該当箇所の強調、検索結果の移動
  • 1,000〜100,000行のスクロールバック
  • ブラウザの再接続時に直前の出力を復元する16 KiB〜4 MiBのバッファ
  • bash・zshのCtrl+Lで画面を消したときは、消した出力をスクロールバックに残す(clearはスクロールバックごと消す)
  • ターミナルの「…」の[スクロールバックをファイルに保存]で、画面を含むスクロールバック全体をテキストファイルに保存(折り返した行はつなぐ。[直近のターミナル出力をコピー]は200行まで)

セッションのログ ​

Settingsの[General]で[セッションのログをファイルに保存する]をオンにすると、セッションごとに1つのファイルへ、ターミナルに出た行を文字で書き続けます。既定はオフです。

  • 書くのは、画面の上へ流れた行と、消す前の画面の行です。まだ画面に残っている行は、流れるかセッションが終わるまで書きません。セッションが終わると、そのとき画面に残っていた行も書きます。
  • 同じ所を描き直す画面(Claude Codeなど)は、描き直したあとの形だけが残ります。vimのような全画面のプログラムの中身は書きません。tmuxで開く接続先も、tmuxが全画面で描くので中身を書きません。
  • SSHのセッションでは、認証が済んだあとのシェルの出力だけを書きます。パスワードの問いと、そこへ打った値は書きません。スニペットのシークレット変数の値は[secret]に置き換えます。
  • 接続・切断・再接続とセッションの終わりは、[sshc]で始まる行に日時を付けて書きます。
  • ファイル名は<接続名>-<開いた日時>-<セッションIDの先頭8文字>.logで、ローカルシェルはlocal-で始まります。1つのファイルは100 MiBまでで、超えるとそこから先は書きません。

置く場所は、マシンごとに次の場所です。ほかのマシンへは同期しません。リモートセッションのログは、そのセッションが動いているマシンに書きます。Androidではログを保存しません。

OS置く場所
Linux・BSD~/.local/state/sshc/session-logs(XDG_STATE_HOMEがあればその下のsshc/session-logs)
macOS~/Library/Logs/sshc/sessions
Windows%LOCALAPPDATA%\sshc\session-logs

別のフォルダにするときは、Settingsの[Machines]で、そのマシンの「…」から[ログの保存先を変更…]を選びます。

[保存しない接続先]には、ログを書かない接続名のパターンを、.gitignoreと同じように1行に1つ書きます。何も書かなければ、すべてのセッションのログを書きます。

text
# 本番の接続先は書かない
prod-*
# ただし prod-web は書く
!prod-web
# ローカルシェルは書かない
@local
  • パターンには*と?を使えます。大文字と小文字は区別しません。
  • !で始めた行は、書く側へ戻します。あとの行が勝ちます。
  • 設定を変えると、次に開くセッションから効きます。

入力と文字コード ​

  • URLとパスのコンテキスト操作(パスのファイルのプレビューとダウンロードを含む)、OSC 8リンク
  • クイックコマンドとスニペット
  • 改行や制御文字を含む貼り付けの送信前レビュー
  • OSC 52クリップボード、Kitty keyboard protocol、JISキーボード(受け取るOSCの一覧は対応しているエスケープシーケンス)
  • 接続ごとのUTF-8、Shift_JIS、EUC-JP、ISO-2022-JP

文字の大きさ ​

設定のフォントサイズに加えて、ターミナルの上で2本の指を開閉する(ピンチ)か、Ctrlを押しながらホイールを回す(トラックパッドのピンチも同じ)と、そのターミナルの文字の大きさを8〜32pxの間で変えられます。

  • ページは拡大しません。
  • 変えた大きさはそのターミナルの表示だけに効き、保存しません。
  • 設定のフォントサイズを変えると、設定の大きさに戻ります。

描画と表示 ​

機能動作
WebGLによる描画利用できない場合や背景画像を使用する場合はDOM描画へ自動で切り替える。設定から常時無効化もできる
JetBrains Monoの合字(->、!=など)設定で有効にしたときだけ使い、1マス1文字の位置は保つ
背景画像ライブラリ圧縮・変換しない。検索、選択、名前変更、削除と1〜1024 MiBの容量([Settings]→[General])に対応し、プリセットと接続別設定の参照も同時更新する
カーソルOSで視差効果・アニメーションを減らす設定が有効な場合は、TerminalとSFTPのテキストエディタで静止表示する

画面を常にオン ​

ターミナルの「…」で、プリセットの名前の見出しの下にある[画面を常にオン]で、Terminalを表示している間は画面を消しません(Screen Wake Lock API)。すべてのターミナルに効き、設定はこのマシンが使うプリセットに保存します。ブラウザがHTTPSかlocalhostで開いているときだけ表示します。

プログラムへの知らせとステータス行 ​

見えているかの知らせ(mode 2033、visibility reports): プログラムが求めると、ターミナルがどこかのブラウザに表示されているかを知らせ、見えない間の描画を止められるようにします。接続先のプログラムには、誰かがこのターミナルを見ているかが伝わります。次のときは、見えていないと答えます。

  • どのブラウザでも表示していないとき
  • タブが裏にあるとき
  • 分割表示や画面から外れているとき

VT320のステータス行(DECSSDT、DECSASD): プログラムが出すと、ターミナルの下に1行で表示し、プログラムへ伝える行数を1つ減らします。プログラムが書く行(DECSSDT 2)だけに対応し、ターミナルが状態を出す行(DECSSDT 1)は表示しません。

入力とクリップボード ​

文字の選択とコピー ​

通常の文字選択によるコピーはブラウザ内で完結し、OSC 52を必要としません。選択時の自動コピーと右クリックでの貼り付けは、[Settings]→[Terminal]で切り替えられます。

Claude Code、vim、tmuxのようにマウスを使うプログラムの中では、ドラッグはそのプログラムへ送られます。Shift(MacではOption)を押しながらドラッグすると、ターミナルの文字を選択できます。

ターミナルの「…」の[色つきでコピー]は、選んだ範囲を、色とターミナルの背景を保ったHTMLとしてもコピーします。文書に貼ると色が残り、文字しか受け取らない所には文字だけが入ります。OSC 8のリンクは文字として残ります。

貼り付けの確認 ​

改行、末尾のEnter、またはターミナル制御文字を含む内容はすぐに送信せず、接続先、行数、制御文字を可視化したプレビューを表示します。確認画面で内容を編集でき、行数と警告も編集内容に合わせて更新されます。

次の3つから選べます。

  • キャンセル
  • 編集内容の貼り付け
  • 末尾のEnterを1個だけ除いて貼り付け

プレビューと貼り付け原文は保存しません。確認中にターミナルの表示が変わっても、確認は開いたままです。再接続で新しいシェルに替わった場合は、確認を取り消します。

OSC 52 ​

OSC 52は、リモート側のソフトウェアがローカルのクリップボードへ書き込むための機能です。既定では無効です。信頼できる接続先だけを使うときに有効にしてください。

有効にすると、すべてのターミナル(どの接続先でも)に効きます。[Settings]→[General]か、ターミナルの「…」の[全マシン共通]で切り替えられます。

  • 画像やHTMLも書き込めるKitty clipboard protocol(OSC 5522)の書き込みも受け付けます。
  • プログラムが貼り付けの知らせ(mode 5522)を有効にしていると、貼り付けた画像などもそのプログラムへ渡せます。
  • 過去の出力を復元するときは、OSC 52によるコピーとコピー通知を再実行しません。新しく届いたコピー命令は、同じ文字列でも処理します。

キーボード ​

Kitty keyboard protocolは、リモートアプリケーションからの問い合わせと、要求に応じた切り替え(離したときの報告などの段階を含む)に対応しています。JISキーボードでは、円記号キーをバックスラッシュとして送るよう設定できます。

モバイルでは、Ctrl、Alt、Esc、Tab、矢印などの特殊キーを画面に表示しています。CtrlとAltの動作は次のとおりです。

押し方動作
1回押す次の1キーだけに効く
素早く2回押す押したままに固定し、もう一度押すまで続けて効く。固定中のキーは、さし色で表示する

コマンドの区切り(OSC 133) ​

シェルがOSC 133(シェル統合)でコマンドの始まりと終わりを知らせていれば、コマンドと出力の左に、結果の色の線を出します(成功は薄い灰色、失敗は赤、実行中は黄色)。

  • 線に乗せる(モバイルではタップする)と、終了コード、かかった時間、始めた時刻、フォルダと、[出力をコピー][出力をファイルに保存]を出します。
  • 長い出力をさかのぼっている間は、そのコマンドと結果をターミナルの上に表示し、押すとコマンドの行へ移ります。
  • スクロールバーにも、履歴のどこにコマンドがあるかを結果の色で出します。

どれも[Settings]→[Terminal]の[操作]で個別に切り替えられます。始めた時刻とかかった時間はsshcエンジンが測るので、あとから開き直したセッションの履歴でも正しく出ます。

クリックでカーソルを移動する ​

シェルがOSC 133で入力の始まりを知らせていれば、プロンプトで打っている行をクリック(モバイルではタップ)すると、その位置へカーソルを動かします。カーソルとクリックした位置のあいだの文字の数だけ左右の矢印キーを送る仕組みで、Ghosttyのcursor-click-to-moveと同じです。

打っている行が折り返したときと、マウスを使うプログラムが動いているときは動かしません。

モバイルの入力欄 ​

モバイルでは、特殊キーの下に送る文の入力欄を常に表示します。日本語の変換は入力欄の中で終わらせ、確定した文だけをターミナルへ送ります。

操作動作
Enter改行する。変換を確定するEnterでは送らない
入力欄の横の[送信]文を貼り付けと同じ扱いで送り、続けてEnterを送る
何も入力せずに送るEnterだけを送る(Claude Codeの選択肢を確定するときなど)
[Settings]→[Terminal]の「スマホの入力欄でEnterを押したら送信する」をオンEnterで送り、Shift+Enterで改行する
オフのときに外付けのキーボードでCtrl+Enter(Macでは⌘+Enter)送る
キーバーの[ターミナルへ直接入力]入力欄を隠し、ターミナルへそのまま入力する。もう一度押すと戻る

改行を含む文は、ターミナルのプログラムがbracketed pasteを使っていれば、そのまま1つの貼り付けとして送ります。使っていないときと、制御文字を含むときは、貼り付けと同じ確認画面を出し、確認したときだけ送ります。

カーソルの行がPassword:やパスワード:のような問いで終わっている間は、入力欄が伏せ字のパスワードの欄に替わります。打った文字は保存せずにEnterで送り、書きかけの文は問いが終わると戻ります。

リンクとリモートパス ​

リンクを開く ​

OSC 8リンクと画面上のURLは、OS標準のブラウザで開けます。Ctrl(Macでは⌘)を押しながらクリックすると、すぐに開きます。ただし、OSC 8リンクの表示の文字が行き先と違うアドレスのときは、すぐには開かず、行き先を表示したメニューを開きます。

長いURLが右端で折り返したときは、何行に分かれても1つのURLとして開きます。Claude Codeなどのプログラムが右端で改行し、字下げして続きを表示した場合も同じです。

画面上のURLとパスには、さし色の下線を引きます。

環境下線を引くもの
PCマウスを乗せたものだけ
タッチで操作する画面押せるものすべてにいつも。指では乗せて確かめられないため。[Settings]→[Terminal]の[操作]にある[リンクにいつも下線を引く]をオフにすると消える

SFTPと行き来する ​

  • SSHのセッションに出たパス(プレビューの「…」から)と、OSC 7(WindowsのPowerShellやcmdではOSC 9;9)で通知された現在の作業フォルダは、Terminalで使用中の接続先を選択したSFTP画面で直接開けます。
  • SFTP側の[ここでターミナルを開く]では、リモートなら現在のフォルダを指定したSSH Terminal、ローカルなら表示中のフォルダを開始場所にしたローカルシェルを開けます。ローカルシェルが動くのはsshcエンジンのマシンです。

パスを押してプレビューする ​

画面に出た/で始まるパスを押すと、確認を挟まずに、そのファイルをターミナルの上に表示します。スマホでは画面いっぱいに表示し、画像と動画は黒い地の上に、パスと操作を重ねて表示します。

ファイル上限表示
画像(PNG、JPEG、GIF、WebP、BMP、SVG)8 MiBそのまま表示する
UTF-8のテキスト2 MiB読み取り専用のエディタで表示し、名前に合わせて色を付ける。Markdownは整形しない
音声(.mp3、.wav、.m4a、.ogg、.flacなど)ブラウザの再生画面で再生する
動画(.mp4、.webm、.movなど)ブラウザの再生画面で再生する。sshcエンジンは再生画面が求めた部分だけを読むので、大きな動画でも途中へすぐ移れる
  • 再生できるかどうかはブラウザによります(たとえば、HEVCの.movはChromeでは再生できないことがあります)。再生できないときは、その理由と[ダウンロード]を表示します。
  • プレビューできない形式や大きすぎるファイルでも画面は開き、プレビューできない理由を表示します。
  • どのファイルも[ダウンロード]でブラウザのマシンへ保存できます。SSHのセッションのファイルは、ほかのダウンロードと同じく転送の一覧に並びます。
  • Claude Codeが送った画像の行([image] /tmp/….png)も、この方法で開けます。
  • プレビューの「…」には[フルパスをコピー]があり、SSHのセッションでは[SFTPで表示][SFTPで編集][SFTPでダウンロード]もあります。

ファイルを読む場所 ​

ファイルは、パスを押したときだけ読みます。読む場所はセッションの種類で決まります。

リモートセッションで開いたSSHのセッションは、このマシンの設定に同じ接続名があり、行き先(HostName・Port・User)がリモートのsshcエンジンの設定と同じときだけ、このマシンからその接続名で読みます。違うときや確かめられないときは別のマシンのファイルを見せないよう、パスを押すと[リンクをコピー]だけのメニューを開きます。

リンクにするパスの形 ​

Claude Codeなどのプログラムが長いパスを右端で改行し、字下げして続きを表示した場合も、複数行を1つのパスとして拾います。日本語などのUnicode文字を含む名前にも対応しています。

形例開き方
絶対パス/tmp/x.pngそのまま開く
空白を含むパス"/tmp/画面 1.png"、'/tmp/画面 1.png'、/tmp/画面\ 1.png引用符で囲むか、空白の前に\を付けたものを開く
バッククォートで囲まれたパス`/tmp/x.png`パスの部分を開く
文に続くパスSaved to:/tmp/x.png、保存しました:/tmp/x.png、→/tmp/x.pngパスの部分を開く
ツールの行や日本語に続くパスRead(src/app.ts)、画像は~/shots/a.pngに保存しましたパスの部分だけを拾う
file:のURLfile:///tmp/画面%201.png%20などのエンコードを戻して開く
相対パスartifacts/shot.png、report.mdそれを出したプログラムの作業フォルダから開く
ホームからのパス~/shots/a.png、$HOME/shots/a.png、${HOME}/shots/a.pngそのセッションのホームフォルダから開く
Windowsの形式C:\Users\aida\x.png、C:/Users/aida/x.pngWindowsのローカルシェルで、sshcエンジンがWindowsと確認できた場合だけ開く

末尾の:行:桁や句読点(。、、、)を含む)はパスから除きます。

次のものはリンクにしません。

  • 区切りが曖昧な出力。一部だけを開かないようにするためです
  • ホスト名付きのfile://host/…
  • ~user/形式
  • SSHのセッションとリモートセッションのシェルでのWindows形式

相対パスとホームの扱い ​

相対パスは、よく使われる拡張子(画像、テキストとソースコード、PDF、音声、動画、圧縮ファイル。.png、.svg、.md、.py、.json、.mp3、.mp4、.zipなど)で終わる名前のときに押せます。

セッション作業フォルダの取得ホームフォルダの取得
Linuxのローカルシェルsshcエンジンが調べるsshcエンジンのマシン
リモートセッションのシェルLinuxならsshcエンジンが調べるそのsshcエンジンのマシン
macOS・WindowsのローカルシェルシェルがOSC 7で知らせたフォルダ。知らせていなければ開けないsshcエンジンのマシン
SSHのセッションシェルがOSC 7で知らせたフォルダ。知らせていなければ開けない接続先のSFTP

ホームフォルダを取得できない場合は、開けない理由を表示します。

プレビューの移動 ​

プレビューを開いている間は、←→キーか[前へ][次へ]で、同じターミナルに出たほかのファイル(上の拡張子で終わるパス)へ移れます。

  • テキストを表示している間、エディタの中の←→キーはカーソルを動かします。
  • リモートセッションで開いたSSHのセッションでは、上の条件で読めるときだけ使えます。

画像と文字幅 ​

表示できる画像 ​

ターミナル内に画像を表示できます。chafa、img2sixel、timg、imgcatなどで試せます。

形式表示するもの
Sixelすべて
iTerm2のインライン画像(OSC 1337 File=)PNG、JPEG、GIF。ファイルのバイト数(size=)を省略した画像も表示する。アニメーションは表示しない
kittyの画像形式(試験的な対応)データとして送られた画像だけ

kittyの画像形式で、ファイルの場所や共有メモリで送る方法には対応していません。プログラムからの問い合わせにもそう答えます。

画像の上限 ​

対象上限超えたとき
1つのターミナルが保持する画像32 MB古いものから消す
1枚の画像の大きさ4096×4096ピクセル表示しない
kittyの画像形式の1枚のデータ約7.5 MB受け取らない
kittyの表示せずに送るだけの画像(a=t)合わせて32 MB次の画像を断る
kittyの保存した画像の置き直し(a=p)1秒に4096×4096ピクセルの画像4枚分超えた分を断る
zlibで圧縮した画像(o=z)指定した大きさまで展開超えて展開されるものを表示しない

置き直しに上限があるのは、そのたびに画像を解読し直すためです。

画像が消える・飛ばされるとき ​

  • 分割して送られた画像を受け取りの途中で断ったときは、そのターミナルに表示していた画像も消えます。
  • セッションを開き直したときは、残っている出力から画像も描き直します。sshcエンジンが保持しきれず途中で切れた画像は、文字として表示せず読み飛ばします。

文字の幅 ​

文字の幅はUnicode 17の表で数えます。新しい絵文字も2マス分になり、絵文字を使うプログラム(Claude Codeなど)の表示が後ろの文字とずれません。

ZWJでつないだ絵文字(👨‍👩‍👧)、国旗(🇯🇵)、肌の色を付けた絵文字(👍🏽)、VS16を付けた文字(❤️)の数え方は、プログラムのmode 2027(書記素クラスタ)で変わります。

mode 2027数え方家族の絵文字の幅
有効1つの文字として数える2マス
無効wcwidthと同じに1文字ずつ数える6マス

無効の間に1文字ずつ数えるのは、wcwidthで数えるプログラムとカーソルの位置がずれないようにするためです。

Windowsのローカルシェルでは、mode 2027とVT320のステータス行は効きません。WindowsのConPTYが、これらの列を文字より先にまとめて送るためです。WindowsのsshcエンジンからSSHで接続した先では効きます。

ローカルシェル ​

開き方 ​

セッション一覧の[新しいセッション]を選ぶと、SFTPの接続先選択と同じ画面が開きます。

選ぶもの開くもの
先頭の[ローカルシェル][Settings]→[Terminal]の[既定のローカルシェル]で選んだシェル。選んでいなければシステムのログインシェル
検索・最近使った接続・グループSSHホスト
検索欄にuser@host[:port]を入力して[接続する]保存せずに接続する
検索欄にuser@host[:port]を入力して[接続先として保存して接続する]Hostブロックを書いて接続する(リモートセッションでは出ません)

保存せずに開いたセッションには接続名が無いので、SFTP、起動スニペット、転送を接続先へ保存する操作は使えません。

ローカルシェルも、SSHと同じTerminalの仕組みで動作しています。[Settings]→[Terminal]ではシェルプロファイルを選べ、検索とクイックコマンドを同じように利用できます。

渡す環境変数 ​

macOSやLinuxでsshcエンジンを常駐起動した場合も、zshやfishの行編集に必要なTerminal情報をsshcが設定します。

宛先渡すもの
ローカルシェルTERM=xterm-256color、COLORTERM=truecolor、TERM_PROGRAM=sshc、TERM_PROGRAM_VERSION
SSHの接続先COLORTERM=truecolor(接続先のsshdがAcceptEnvで受け入れる場合。SetEnvにCOLORTERMがあればその値)

sshcエンジンを起動したターミナルが置いた変数(TERM_PROGRAM、GHOSTTY_で始まるもの、Windows TerminalのWT_SESSIONなど)は渡しません。

Windows ​

Windowsのローカルシェルは、PowerShell 7が入っていればPowerShell 7を、無ければWindows PowerShellを既定で開きます。

Windows PowerShell 5.1に付属するPSReadLine 2.0は、ターミナルの幅を変えたあと、入力した行をプロンプトから離れた位置に表示することがあります。PowerShell 7を入れるか、ターミナルで次のコマンドを実行してPSReadLineを更新してください。

powershell
Install-Module PSReadLine -Scope CurrentUser -Force -SkipPublisherCheck

タイトルと通知 ​

シェルやプログラムが送るもの表示
OSC 0/1/2のタイトルペインの見出しとセッション一覧の表示名。ローカルシェルでコマンドが1秒以上動いているあいだは、その名前を前に付ける(LinuxとmacOSで動くsshcエンジンだけ)
OSC 9/99/777の通知未読の印。sshcのタブがバックグラウンドにあるときはブラウザ通知と通知音
OSC 9;4の進み具合ペインの見出しの下端の線と、セッション一覧の行の先頭の輪。別のセッションを見ている間も、一覧で確認できる

Claude CodeやCodexの通知設定を含む詳細はタイトルと通知を参照してください。

sshcが通常のシェル出力からプログラムの状態を推測したり、コマンドを自動的に再実行したりすることはありません。

ポート転送 ​

SSH接続ごとにLocal forwarding、Remote forwarding、Dynamic SOCKSを管理できます。

種類転送の向き
Local forwardingローカルのポートからSSH接続先へ
Remote forwardingSSH接続先のポートからsshcエンジン側へ
Dynamic forwardingローカルにSOCKSエンドポイントを開く

設定方法は、ポート転送を参照してください。

接続を閉じる確認画面では、最初に[開いたままにする]へフォーカスが移ります。Tabで[閉じる]へ移動し、Enterで決定できます。