---
title: "ウェブアクセス"
description: "同じワークスペースをブラウザへ渡すこと、入室を許すリンク、それを通してほかのマシンへ接続すること、ページ自身の設定・キー・スマートフォン向けレイアウト、そしてできないこと。"
url: "https://docs.closex.org/ja/thinkterm/web.html"
markdown_url: "https://docs.closex.org/ja/thinkterm/web.md"
site: "CloseX Docs"
product: "ThinkTerm"
language: "ja"
last_updated: "2026-11-08T12:04:16.000Z"
alternates:
  en: "https://docs.closex.org/thinkterm/web.md"
  zh-Hans: "https://docs.closex.org/zh/thinkterm/web.md"
  ja: "https://docs.closex.org/ja/thinkterm/web.md"
---

# ウェブアクセス

> **ドキュメント作成中**
> 一部の内容はまだ不完全な場合があります。

ThinkTerm のマルチプレクサは、自分の端末をブラウザへ渡せます。手元のスマートフォンや、ThinkTerm の入っていないマシンから開くのは、ThinkTerm の入っているマシンで**すでに動いている**セッションです。同じ Space、Project、Thread であって、その複製ではありません。

あなたが開くまで、何も待ち受けません。

## 有効にする

方法は 3 つあり、いずれも GUI 内蔵のマルチプレクサではなくマルチプレクササーバーを相手にします。

- **`設定 › Web`** — スイッチ、受け付けているアドレス、これまでに渡したリンクの一覧。
- **`thinkterm cli web-server on`** — シェルからの同じ操作。`--bind-address` で待ち受け先を選び、`status` はどこで受け付けているかを報告し、`off` はポートを閉じてそこにいるブラウザを切ります。
- **設定ファイルの `web_servers` エントリ** — サーバーの起動時に読まれるので、動くたびにポートが開きます。

前の 2 つは動作中のサーバーを変えるもので、効力はそのサーバーと同じだけ続きます。永続する形は設定エントリのほうです。設定を再読み込みしても、ウェブのポートが開いたり閉じたりすることはありません。再読み込みで変わるのは、ページがほかのマシンへ接続できるかどうかだけで、これは[後述](#reaching-other-machines)します。

渡すものがあるためには、ローカル端末がバックグラウンドのセッションサーバーで動いている必要があります — その設定は [リモート](https://docs.closex.org/ja/thinkterm/remote.md) にあり、新しくインストールした場合は最初から有効です。それがない場合、`設定 › Web` は押しても何も起きないスイッチを見せる代わりに、そのことを伝えます。接続しているのがリモートドメインだけなら、その節が話しているのは**そちら**のマシンのポートで、この機械のものではありません。

## リンクそのものが資格情報です

ブラウザはトークンによって入室し、そのトークンは URL の形で手渡されます。

```bash
thinkterm cli web-token mint --label phone --ttl 12h
```

その URL を開いた人は、そのマシンであなたと同じものを持ちます。あなたの資格で動くシェルと、すべてのペインのスクロールバックです。[ほかのマシンに接続する](#reaching-other-machines)機能がオンなら、リンクはそのアカウントが SSH で入れるすべてのマシンにも届きます。パスワードで守られたページではなく、ssh の秘密鍵と同じ扱いをしてください。とりわけ、秘密鍵を貼らない場所には貼らないことです。

- `--ttl` は `30m`、`12h`、`7d`、または秒数を取ります。指定しなければ、失効させるまで有効です。設定からコピーしたリンクは既定で 8 時間後に期限切れになり、選び直せば `失効させるまで` までのばせます。
- `web-token list` は、サーバーが知っているトークンと、それぞれに何台のブラウザがつながっているかを示します。
- `web-token revoke <id>`、あるいは `--all` は、接続中のブラウザも含めて即座に切ります。
- `--url-only` は URL だけを出力します。スクリプト向けです。

接続したブラウザは、発行時に付けた名前で `thinkterm cli list-clients` に現れます。

トークンは URL の `#` より後ろの部分に入っています。ブラウザはこの部分をサーバーへ送ることも、`Referer` に載せることもありません。ページはトークンをそのブラウザタブ専用のセッションストレージへ移し、アドレスバーをトークンなしの形に書き換えるので、うっかりブックマークしたり、共有したり、スクリーンショットに写したりすることがありません。同じタブで再読み込みすればそのまま使えますが、新しいタブやアドレスだけで開いた場合はリンクがもう一度必要で、ページがそう伝えます。

## そのポートに誰が届くか

既定では `127.0.0.1:8088` を待ち受けます — それが動いているマシンだけが届き、ほかは届きません。

`他のデバイスから接続できる` は、そのマシンが持つすべてのアドレスへ結び直します。信頼できるネットワークでだけオンにしてください。ブラウザが WebGPU を出すのはセキュアコンテキストに限られ、`http://localhost` はそれに当たりますが、ほかのホストへの素の `http://` は当たりません。そのためループバック以外で待ち受けるには TLS が要り、自前の証明書がなければ ThinkTerm がマシンのホスト名と各アドレスを書いた自己署名証明書を作ります。ブラウザはその証明書について一度警告し、それからページを描きます。警告を受け入れる前に、ブラウザに表示される証明書の SHA-256 指紋を、`設定 › Web` に表示されるもの、または `web-token mint` の完全な出力に印字されるものと照らし合わせてください — `--url-only` はこれを出しません。一致しなければそこで止めてください。既定で有効な `require_tls_off_loopback` が、ループバック以外を平文で提供することを拒む仕組みです — そのように出したページは、そもそも WebGPU がなく何も表示できません。

同じネットワークや tailnet のスマートフォンには、`設定 › Web` の QR コードでリンクを渡すのが手早い方法です。インターネット越しの場合は、ポートを公開するのではなく `ssh -L` でループバックのポートを転送してください。

### リバースプロキシの後ろで

リスナーは、自分自身のアドレスから来たページしか受け付けません。それ以外の名前で届いたページ — たとえばリバースプロキシ越しの `https://terminal.example.com` — は `allowed_origins` に載せておかないと接続を拒まれます。origin を 1 つでも載せるとこの既定は置き換わり、`web-token mint` が出力するリンクも載せた origin を指すようになります。

## ほかのマシンに接続する {#reaching-other-machines}

ページは、自分を提供したマシン以外のマシンの端末も開けます。ブラウザは SSH 接続を作れないので、サーバーが代わりに行います。ページは同じトークンを受け付ける 2 つ目の WebSocket、`/relay` でマシンを指名し、サーバーが SSH でそのマシンにサインインして、ページの接続をそこで動いている ThinkTerm へ中継します。そのマシンの Space、Project、Thread は、デスクトップで ThinkTerm Connect のホストのものが並ぶのと同じように、このサーバー自身のものと並んでページに現れます。違いは、間にこのサーバーが入ることだけです。

有効にするまではオフで、有効にする場所は 2 つあります。

- デスクトップの **`設定 › Web` › `ほかのマシンに接続`** は、そのマシンのすべてのウェブリスナーで有効にします。
- [`web_servers` エントリ](#the-web-servers-entry)の **`relay = true`** は、そのリスナー 1 つだけで有効にします。デスクトップのないサーバーで有効にするにはこちらを使います。エントリは `bind_address` が完全に一致するリスナーに対応づけられます。

どちらか一方で足ります。どちらも再起動は要りません。ページが使うたびに読み直されるので、設定の再読み込みはすでに開いているページにも届き、両方をオフにすると、中継で開いているマシンは約 2 秒以内に終わります。オフの間、リモートホストのページには何も並ばず、このサーバーでほかのマシンへの接続がオフであること、そしてどこでオンにするかが示されます。マシンを開く、追加する、削除することは拒否されます。

> **許可するホストの一覧はありません**
> リンクを持つ人は、サーバーのユーザーが SSH で入れるすべてのマシンを開けます。サインインにはそのユーザーの鍵と `~/.ssh/config` が使われ、ほかのホスト、ポート、ユーザーを自分で入力することもできます。リンクはすでにサーバー上のシェルを与え、それを通じてそのサーバーの SSH 設定が届くものすべてに届きます。中継が新たに加える到達先はありませんが、そのすべてをリンクの背後に置きます。
>
> 接続はエンドツーエンドで暗号化されません。ブラウザの TLS はこのサーバーで終わり、ほかのマシンへの SSH 接続はそこから始まるので、その間の通信はサーバーが運びます。

リンクを失効させると、そのリンクで開いたマシンも、ほかの接続と一緒に閉じます。

### リモートホストのページ

サイドバー下端の地球儀のボタンで、専用のタブとして開きます。`リモートホスト` と `リモートホストを追加…` は検索パレットのコマンドにもあり、Space メニューにも `リモートホストを追加…` があります。`接続済み` の下には、このサーバーと、ページで開いているマシンが接続の進み具合とともに並びます。続いて、届くマシンが、出どころを示すタグ付きで並びます。

| タグ | マシンの出どころ |
|---|---|
| `~/.ssh/config` | サーバー自身の `~/.ssh/config`。専用の折りたたまれたグループにあり、検索中は開きます |
| `デスクトップ` | サーバーのマシン上のデスクトップ独自のホスト一覧に保存されたホスト。そこに保存したパスワードも含みます |
| `ここで追加` | このようなページから追加されたホスト。サーバーに保存されます |

`新しいホスト` で必須なのは `ホスト` だけで、`ポート`（22）、`ユーザー`、`名前`、`パスワード` は任意です。`追加して接続` はサーバーの `web_machines.json` に、パスワードがあれば暗号化して保存し、接続します。`削除` は、ここで追加したマシンを取り除きます。ほかのマシンについては、サーバーが覚えたもの — 保存したパスワード、またはインストールの許可 — を消します。

マシンを開いている間、ページは各段階 — `接続しています…`、`サインインしています…`、`ThinkTerm を確認しています…` — を示し、あなたにしか答えられないことを尋ねます。

- **パスワード**、鍵のパスフレーズ、またはホストが求めるコード。パスワードとパスフレーズには `このサーバーに保存` が付き、既定でオンです。オンのままなら、サーバーはデスクトップが保存パスワードを扱うのと同じ方法で暗号化し、ホスト帳と同じフォルダーに保管するので、[そこでの注意](https://docs.closex.org/ja/thinkterm/remote.md#saved-passwords)が当てはまります。以後は、次の接続も再接続も、尋ねられずに進みます。コードが保存されることはありません。
- **`このマシンを信頼しますか？`** — サーバーがそのホストに初めて接続するとき。確認用にホスト鍵のフィンガープリントが示されます。その後で鍵が変わったホストは、改めて尋ねられることなく `ホスト鍵が変わっています` で失敗します。
- **`そのマシンに ThinkTerm をインストールしますか？`** — そのマシンに ThinkTerm がないとき。そのユーザーの `~/.local/bin` に root なしで入り、マシンごとに 1 度だけ尋ねられます。

そのマシンの ThinkTerm は、このサーバーが話せるものでなければなりません。古いものは尋ねずに更新され、そこで動いているサーバーはセッションを新しいものへ引き渡します。引き渡せないときは、止めると中のすべてが終わるため `古い ThinkTerm サーバーを停止しますか？` と尋ねます。より新しいリリースがあるときは、そのセッションが古いビルドには渡らないため、そのままにされ、先にこちらのサーバーを更新するよう案内されます。プロトコルは新しいが、より新しいリリースではないビルド（開発ビルドなど）は、`より新しい ThinkTerm を置き換えますか？` に答えたあとでだけ置き換えられます。デスクトップ版のインストールはここから置き換えられることはなく、先にそのデスクトップアプリを更新するよう案内されます。そのマシンで ThinkTerm を使えないときは、代わりに `通常の SSH ターミナルを開く` が出ます。

マシンを 2 台以上開いていると、Space メニューは Space をマシンごとにまとめ、このサーバー以外の各マシンに専用の `このサーバーに新しいスペース` が付きます。`ワークスペースを追加…` には、Project を置くマシンを選ぶセレクターが加わります。ページで開いているマシンは、次に読み込んだときにバックグラウンドで開き直されます。

## 設定 › Web

| 行 | 働き |
|---|---|
| `ブラウザからのアクセスを許可` | セッションサーバーのポートを開閉します |
| `他のデバイスから接続できる` | ループバックだけでなく、自前の証明書ですべてのアドレスを待ち受けます |
| `ほかのマシンに接続` | ページが、このコンピューターから SSH で入れるマシンを開けるようにします。既定はオフ。オンならこのコンピューターのすべてのウェブリスナーに効き、オフでも `relay = true` のリスナーでは許可されます。再起動は不要です。[ほかのマシンに接続する](#reaching-other-machines)を参照 |
| `アクセスリンク` › `リンクをコピー` | リンクを発行してコピーします |
| `リンクの有効期限` | 次にコピーするリンクの有効期間：1 時間、8 時間（既定）、1 日、7 日、`失効させるまで` |
| `スマートフォンで読み取る` › `コードを表示` | リンクを発行して QR コードで表示します |
| `発行済みのリンク` | 有効なリンクすべて。それぞれに `失効` ボタンがあります |
| `すべてのリンク` › `すべて失効` | すべてのブラウザを一度に切ります |

発行済みの各リンクには、発行時に付けた名前、なければ最後に使ったデバイス、まだ誰も使っていなければ `未使用` が表示されます。その下に、いつ期限が切れるかと、何台のブラウザがそのリンクで接続しているかが出ます。`失効` はそのリンク 1 本だけを終わらせ、それを使っているブラウザを切ります。ほかのリンクはそのまま使えます。

## `web_servers` エントリ {#the-web-servers-entry}

`web_servers` の各エントリが 1 つのポートで、サーバーの起動時に読まれます。

```lua
config.web_servers = {
  {
    bind_address = '127.0.0.1:8088',
    token_file = wezterm.home_dir .. '/.local/share/thinkterm/web-tokens.json',
  },
}
```

| フィールド | 既定 | 意味 |
|---|---|---|
| `bind_address` | `127.0.0.1:8088` | 待ち受けるアドレスとポート |
| `pem_private_key` | 未設定 | PEM の秘密鍵。`pem_cert` とあわせて設定すると、ポートは `https` と `wss` で提供します |
| `pem_cert` | 未設定 | PEM の証明書 |
| `pem_ca` | 未設定 | PEM の CA チェーン |
| `static_dir` | インストールされたプログラムの隣 | ページのファイルの場所 |
| `token_file` | 未設定 | 発行したトークンをダイジェストとして保存する場所 |
| `allowed_origins` | リスナー自身のアドレス | 接続を開いてよい origin |
| `require_tls_off_loopback` | `true` | ループバック以外のアドレスで TLS がなければ起動を拒みます |
| `relay` | `false` | このリスナーで開いたページが、サーバーを通してほかのマシンに接続できるようにします。[ほかのマシンに接続する](#reaching-other-machines)を参照 |

`relay` は、設定の再読み込みで読み直される唯一のフィールドで、すでに開いているページにも効きます。再読み込みでポートが開閉したり、証明書が変わったり、移ったりすることはありません。

**`token_file` は見た目以上に重要です。** 未設定だと、トークンはサーバーのメモリの中にしかありません。サーバーが再起動すると — マシンの再起動や、セッションを引き継げない更新のあとなど — すべてのリンクが使えなくなり、発行し直す必要があります。設定しておけば、リンクは再起動を越えて残ります。ファイルにはダイジェストだけが入り、トークンそのものは入らないので、その写しを手にしても誰も入れません。

`static_dir` は、インストール済みのもの以外のページ、たとえば開発ビルドを動かすためのものです。環境変数 `THINKTERM_WEB_STATIC_DIR` でも設定を変えずに同じことができ、両方あれば `static_dir` が優先されます。

## ページにできること

ブラウザは同じワークスペースを描きます。Space / Project / Thread のツリー、タブ列、分割ペイン、検索パレット、そして右側のパネルです。Thread とペインの作成と終了もできます。

右側のパネルには、スニペット、ステータス、そしてインストール済みの[プラグイン](https://docs.closex.org/ja/thinkterm/plugins.md)のパネルが並びます。スニペットとプラグインは、ブラウザが動いているマシンではなく、ページを提供したマシンのものです。あるサーバーに向けたブラウザに見えるのは、そのサーバーのスニペットとプラグインです。「実行」や「ペースト」は、押した時点でフォーカスのあったペインに届きます。ステータスパネルは既定でオフで、タブ列の右端のボタンでオンにします。デスクトップと同じく、プログラムが自分について報告した内容を表示します。何をしているか、なぜ待っているか、進捗バー、そしてクリックで開く 1 行に畳まれたサブタスクです。各エージェントにはデスクトップと同じマークが付きます。Claude Code、Copilot CLI、Kimi Code はカラーで（Kimi は明るいページでは単色）、Codex、CodeBuddy Code、Cursor Agent、OpenCode、Pi は単色で（OMP は Pi のマークを借ります）、固有のマークのないプログラムには、そのペインのタブが表示しているアイコンが付きます。

タブには、デスクトップと同じ[プログラムのアイコン](https://docs.closex.org/ja/thinkterm/window.md#tab-icons)が付きます。カードは、ブラウザが動いているマシンではなく、ページを提供したマシンのデスクトップ設定で決めたものです。

Kitty グラフィックスプロトコルで送られた画像は、アニメーションも含めてページに描かれます。iTerm2 プロトコルで送られた PNG や JPEG の画像はまだ描かれません。

### サイドバー

サイドバーはデスクトップと同じく、一度に 1 つの Space を表示します。上端にその名前、次に `新しいセッション`、`ピン留め` の下にピン留めした Thread、そして `ワークスペース` の下に Project とその Thread が並びます。Space 名の横の `…` はほかの Space を一覧し、`新しいスペース` と、表示中の Space の名前変更・削除を提供します — 最後の 1 つは削除できません。

ページからは次のことができます。

- Space の作成、名前変更、切り替え、削除
- `ワークスペースを追加…` にサーバー上のディレクトリ `~/dir` または `/dir` を入力して Project を追加。`main` Thread が付いてきます
- Project はクリックで折りたたみ、名前のダブルクリックで名前変更、アーカイブ、復元、削除
- Thread の作成、ピン留めと解除、削除、名前のダブルクリックで名前変更、未読にする
- Thread を同じ Project の中で、Project を同じ Space の中でドラッグして並べ替える

アーカイブした Project は Space の一番下の `アーカイブ済み（N）` にまとめられ、クリックすると表示されます。Thread の行の削除ボタンとタブの閉じるボタンは、中のプログラムを終わらせるので、`削除？` や `閉じる？` と表示してもう一度確認します。サーバー上でどの Thread にも属さないウィンドウは `他のウィンドウ` に並ぶので、届かないものはありません。

サイドバーの幅は端をドラッグして変え、ブラウザが覚えます。タブ列の先頭のボタンで隠せます。`ホバーでサイドバーを表示` がオンなら、ポインターを左端に置くと表示され、離れると戻ります。

### メニュー

右クリックではデスクトップのメニューが出ます。ただしサーバーに対応する操作がないものは除かれます。

| 対象 | 項目 |
|---|---|
| ペイン | `コピー`、`ペースト`、`右に分割`、`左に分割`、`下に分割`、`上に分割`、`フロントエンドのアクセス方式` › `A · 共有(tmux 風)` / `B · 引き継ぎ(排他)` |
| タブ | `左側のタブを閉じる`、`右側のタブを閉じる`、`他のタブを閉じる`、`右側に新しいターミナルタブ`、`ペインを拡大` |
| Thread | `セッションをピン留め` または `セッションのピン留めを解除`、`セッション名を変更…`、`セッションを削除`、`未読にする` |
| Project | `プロジェクト名を変更…`、`新しいセッション`、`セッションを折りたたむ／展開`、`プロジェクトをアーカイブ…`、`プロジェクトを削除` |
| アーカイブ済みの Project | `アーカイブを解除`、`完全に削除…` › `プロジェクトとセッションを削除` |

Project でペインが動いているとき、`プロジェクトをアーカイブ…` はいくつ閉じるかを示してから、`アーカイブしてペインを閉じる` で実行します。タブの名前変更、ウィンドウ間のタブの移動、ターミナルのリセットはデスクトップ専用です。それでもタブはタブ列に沿ってドラッグすれば並べ替えられ、ペインを別のペインの端へドラッグするとそこへ移ります。

どのペインにもバーがあり、左にそのペインのタブ、右にそのペインでの新しいタブ、下に分割、右に分割、拡大が並びます。このバーのタブには、ペインにラベルがあればその名前が付きます。デスクトップでタブの名前を変えるか、`thinkterm cli set-pane-label`（[コマンドライン](https://docs.closex.org/ja/thinkterm/cli.md#naming-panes) を参照）で付けたものです。なければプログラムのタイトルです。上のタブ列は、デスクトップと同じくプログラムのタイトルのままです。

### 検索パレット

Mac では `⌘K`、それ以外では `Ctrl+K` で検索パレットが開きます。ショートカットはページの設定で変えられます。次のセクションに分けて探します。

- `スレッドを検索` — すべての Space の Thread
- `タブ` と `ペイン` — 表示中のウィンドウのもの
- `スペースを切り替え` — Space
- `コマンド` — `新しいセッション`、`新しいタブ`、`右に分割`、`下に分割`、`ペインを拡大`、`ペインを閉じる`、`ターミナルを引き継ぐ`、`デスクトップのフォーカスに追従`、`サイドバーを表示または非表示`、`設定`、`フォントを大きく`、`フォントを小さく`、`フォントサイズをリセット`

何も入力していないときは、最近選んだものが先に並びます。矢印で移動し、`Enter` で実行、`Esc` で閉じます。サイドバー下端の虫眼鏡は、Thread だけに絞ったパレットを開きます。

### 端末を駆動するのは誰か

端末をどう共有するかはサーバーが決めます。ペインのメニューの `フロントエンドのアクセス方式` サブメニューで切り替え、現在の方式にはチェックが付きます。この選択はサーバーが保持し、再起動後も残るので、このページだけでなく、そのサーバーに接続しているすべてのデバイスに及びます。

既定の **`B · 引き継ぎ(排他)`** では、1 つの端末を駆動するのは同時に 1 台です。デスクトップが持っている端末を開くと、その上にカードが重なります — `ターミナルは別のデバイスで使用中です`、`クリックまたはスクロールで続行` — 端末は下に見えたままです。その中でのクリック、スクロール、キー入力のどれかで引き取れます。最初のキー入力は失われず、引き継ぎが済んでから入力されます。タブ列、ペインのバー、サイドバーのクリックで引き取ることはありません。`Ctrl+Shift+T`、またはパレットの `ターミナルを引き継ぐ` で、はっきりと引き取れます。これは [リモート](https://docs.closex.org/ja/thinkterm/remote.md) で説明したハンドオフと同じ仕組みで、ブラウザはそのリンクで識別される 1 台のデバイスとして数えられます — 同じリンクで開いた 2 つのタブは 1 回の順番を共有します。

**`A · 共有(tmux 風)`** には引き渡す相手がいません。接続中のすべてのクライアントが同じ端末を見て入力でき、タブに最後に触れたクライアントがその大きさを決めます。

ページがタブを持っている間、タブはブラウザのウィンドウの形に合わせられます。デスクトップが持っている間、ページはデスクトップの大きさと形を保ち、タブがウィンドウより大きければはみ出た部分を切ります。`Ctrl+Shift+F` でいつでもタブをこのウィンドウに合わせ直せます。

**`デスクトップのフォーカスに追従`** はページを開いた時点でオンで、両者のフォーカスを 1 つに保ちます。デスクトップが別のペインに移るとページも一緒に移り、ページでペインをクリックするとデスクトップも動きます。もう一度実行すると追従をやめます。この状態は再読み込みをまたいで覚えられません。

### クリップボード

マウスでテキストを選ぶと、離した時点でコピーされます。ダブルクリックで単語、トリプルクリックで行を選びます。プログラムがマウスを求めているときは、`Shift` を押したまま自分で選択できます。ペインのメニューにも `コピー` と `ペースト` があります。

プログラムは OSC 52 でクリップボードを設定できますが、ページが表示しているペインからに限られます。誰も見ていないペインが、このデバイスのクリップボードに書き込むことはできません。

### キーボードショートカット

| キー | 動作 |
|---|---|
| `Cmd+C` または `Ctrl+Shift+C` | 選択をコピー |
| `Cmd+V` または `Ctrl+Shift+V` | ペースト |
| `Ctrl+Shift+Enter` | 右に分割 |
| `Ctrl+Shift+\` | 下に分割 |
| `Ctrl+Shift+Z` | ペインを拡大、または拡大を解除 |
| `Ctrl+Shift+F` | タブをこのウィンドウに合わせる |
| `Ctrl+Shift+T` | ターミナルを引き継ぐ |
| `Ctrl+Shift` と矢印 | 隣のペインにフォーカス。デスクトップのフォーカスは動かしません |
| `Cmd+=`、`Cmd+-`、`Cmd+0` | フォーカス中のペインのフォントサイズ：大きく、小さく、リセット |
| `⌘K` / `Ctrl+K` | 検索パレット。別のショートカットを選んでいなければ |

それ以外の `Cmd` の組み合わせはすべてブラウザに任され — 再読み込み、アドレスバー、タブ — 端末には届きません。残りのキーは `Ctrl` の組み合わせも含めてフォーカス中のペインに送られます。そのため Mac 以外では、既定のパレットのショートカットのせいで `Ctrl+K` が端末に届きません。プログラムに必要なら、設定で `Ctrl+Shift+P` を選んでください。インプットメソッドも使えます。変換中のキーはインプットメソッドが受け取り、候補ウィンドウは端末のカーソルについていきます。WebKit 系のブラウザ — Safari と、iOS のすべてのブラウザ — では、変換候補を選ぶための Return が端末にも送られることはありません。

## スマートフォンでは

ポインターが指のとき、またはウィンドウの幅が 720 ピクセル未満のとき、ページはスマートフォン向けのレイアウトになります。先に、上で説明したとおり `https` でサーバーにつないでください。

- 端末が画面全体を使います。サイドバーとステータスパネルはその上に重なるドロワーになります。左端から内側へスワイプするとサイドバーが出てきて、左へスワイプし戻すと引っ込みます。ドロワーで Thread を選ぶとドロワーは閉じます。
- 下端のキーバーには `Esc`、`Tab`、`Ctrl` と `Alt`、4 つの矢印、`Home`、`End`、`PgUp`、`PgDn`、そして `-` `/` `|` `~` があります。`Ctrl` と `Alt` はスティッキーで、タップすると、キーバーかソフトキーボードから来る次のキーに効きます。矢印は押し続けると繰り返します。
- ソフトキーボードは、キーバーのキーボードボタンで呼んだときだけ出ます。端末をタップしても画面の半分が隠れることはありません。このボタンはキーバーの先頭に固定され、キーはその隣でスクロールします。
- 指でドラッグするとスクロールし、はじくとそのままスクロールが続きます。分割線の上、指の幅の範囲内に指を置くと、スクロールではなくその分割線をドラッグします。2 本指でもスクロールでき、ピンチすると指の下にあるペインのフォントサイズが変わります。
- タップはクリックです。0.5 秒の長押しでペインのメニューが開きます。
- ペインが 1 つだけのタブにはペインのバーが出ません。分割して見分ける必要が出たときに現れます。

タッチではテキストを選択できません。ペイン内でのドラッグはスクロールです。

## ページ自身の設定

サイドバー下端の歯車で、ページ自身の設定が開きます。これはこのブラウザのもので、サーバーやアカウントのものではありません。スマートフォンでは、スマートフォン自身の設定と同じく 2 ページに分かれ、セクションの一覧と、選んだセクションが、戻る手段付きで並びます。

| セクション | 設定 | 選択肢 |
|---|---|---|
| 一般 | `言語` | `システム設定に従う`（ブラウザの言語）、または ThinkTerm の言語のいずれか |
| 一般 | `スクロール` | `スムーズ`（既定）は指やトラックパッドにピクセル単位で追従し、`行単位` は 1 行ずつ動きます |
| 一般 | `検索ショートカット` | `⌘K`（既定）、`⌘⇧P`、`Ctrl+Shift+P`。Mac 以外では `⌘` は `Ctrl` を指します |
| 外観 | `カラースキーム` | `デスクトップに従う`（既定）はサーバーに設定されたスキームを使います。ほかに任意の組み込みスキーム |
| 外観 | `テーマ` | `ダーク`（既定）、`ライト`、`システム設定に従う`。端末の周りのページに効きます |
| 外観 | `フォントサイズ` | `デスクトップに従う` でこちらのセルをあちらと同じ大きさに、または `サイズを固定` で 6 〜 72、0.5 ポイント刻み |
| サイドバーとプラグイン | `ホバーでサイドバーを表示` | 既定でオン |
| サイドバーとプラグイン | `サイドバーの幅をリセット` | サイドバーを既定の幅に戻します |
| サイドバーとプラグイン | `ステータスパネル`、`スニペット` | 右側のパネルにそれらを出すかどうか |
| サイドバーとプラグイン | `プラグインを再読み込み` と各プラグイン | スイッチと、使われていないときにどれだけ動かし続けるか。一度も許可していないプラグインには、代わりに `新しいプラグイン：許可するまで実行されません` と `許可` ボタンが出ます |
| 情報 | `情報をコピー` | バージョンと `情報をコピー` のあるカード（バージョン、ビルド、言語、ブラウザをコピーします）。続いて `バージョン`、`ビルド`、`ホスト`（ページの取得元アドレス）、`言語`、`ライセンス` |

`カラースキーム` を開くと、各スキームの色を添えた検索できる一覧が出ます。ポインターや矢印のある行を端末がプレビューし、`Enter` で確定、`Esc` で元に戻します。設定の上端の検索欄では、どのセクションの行でも探せます。

### 保存場所

ブラウザのローカルストレージです。あわせて、ページが最後に表示していた Space、パレットの最近の選択、サイドバーの幅、リモートホストで開いているマシン（`thinkterm.machines`。読み込み時に開き直されます）、選んだカラースキームとその色も保存されるので、次の読み込みでは最初からそのスキームで描かれます。別のブラウザやプライベートウィンドウでは既定値から始まります。これらがサーバーへ送られることはありません。ストレージを禁止したブラウザでは、その読み込みの間だけ設定が保たれます。

### URL による上書き

URL で、保存内容を変えずに 1 回の読み込みだけ一部の設定を上書きできます。

| パラメーター | 効果 |
|---|---|
| `?lang=de-DE` | ページの言語 |
| `?theme=light` | `light`、`dark`、`system` |
| `?font=14` | 固定のフォントサイズ。6 〜 72 |
| `?glyphfont=` | ページ自身のフォントにない文字に使う CSS のフォントリスト。漢字をどの地域の字形で描くかもこれで決まります |

発行したリンクの `#` より前に置きます：`https://example-host:8088/?theme=light#token=…`。

## 接続が切れたとき

ページは自分で同じタブへ再接続します。まずすぐに 1 回、次に 1 秒後、以後は待ち時間を倍にしながら最長 15 秒まで試します。右下に、接続が切れて再接続中である旨の案内が出ます。6 回続けて失敗すると、リンクが期限切れか、サーバーが止まっているかもしれないと付け加えます — 接続が拒まれた理由はブラウザに知らされないので、ページから見ると、失効したリンク、期限切れのリンク、止まったサーバーは区別できません。

切れている間も画面の内容はそのまま残り、戻るとタブはサーバーに合わせて並べ直されます。ページがあきらめるのは、戻る先がないときだけです。つまりサーバーにペインがないときか、別のプロトコルバージョンで話しているときで、どちらなのかを伝えます。

## ページにできないこと

- **ファイルとノート** — 今のところデスクトップ専用です。
- **Live Overview** — ブラウザには対応するものがなく、ボタンもありません。
- **Thread の参照** — デスクトップ独自のもので、表示されません。SSH ホスト上の Project も表示されません。サーバーがそれを開けないためです。
- **通知とサウンド** — ベルには何も入らず、音も鳴りません。
- **リンク** — 出力中のリンクはクリックできません。
- **スクロールバック検索、コピーモード、クイックセレクト** — パレットが探すのはワークスペースで、ペインの中の文字ではありません。
- **タッチでの選択** — スマートフォンではドラッグはスクロールです。
- **iTerm2 の画像** — iTerm2 プロトコルで送られた PNG や JPEG の画像はまだ描かれません。
- **右から左へ書く文字** — 四角で表示されます。ページは双方向テキストを並べ替えないので、正しい文字が誤った順に並ぶほうが気づきにくいからです。
- **タブの名前変更、ウィンドウ間のタブの移動、ターミナルのリセット** — サーバーに対応する操作がありません。

ページに同梱された 2 つのフォントにない文字 — CJK、ハングル、絵文字 — は、ブラウザが動いているデバイスにインストールされたフォントで描かれます。どこにもない文字は四角になります。WebGPU がなければ、ページは `https` か `http://localhost` で、WebGPU を有効にしたブラウザから開くよう促すメッセージだけを表示します。

## 関連

- [リモート](https://docs.closex.org/ja/thinkterm/remote.md) — ブラウザに応じるセッションサーバーと、ハンドオフの仕組み
- [コマンドライン](https://docs.closex.org/ja/thinkterm/cli.md) — `web-server` と `web-token` の詳細
- [プラグイン](https://docs.closex.org/ja/thinkterm/plugins.md) — ブラウザがサーバー側のマシンから表示するパネル
- [Space、Project、Thread](https://docs.closex.org/ja/thinkterm/spaces.md) — ページが表示するワークスペース
- [プライバシーとセキュリティ](https://docs.closex.org/ja/thinkterm/privacy.md) — ページが保存するもの、送るもの
- [設定](https://docs.closex.org/ja/thinkterm/configuration.md) — `web_servers` とリスナーの証明書の置き場所
