なぜ SSH の上にデスクトップなのか。
リモートのサーバーにグラフィカルな環境。問題を探している解決策のように聞こえます。ここでは、その正直な言い分を書きます。このページを閉じてターミナルを使い続けるべき場合も含めて。
「そんなの ssh と vim でとっくにできる」
できます。このページに書いてあることは、一つ残らず、SSH のセッションとシェルと、すでに手に馴染んだエディターでできます。管理するサーバーが 1 台で、vim を自在に扱えて、仕事がターミナルの中に収まっているのなら——これはあなたのためのものではありません。いまの環境を続けていただくほうがよいと、こちらも思います。
グラフィカルな層があるのは、ターミナルが力不足だからではありません。ターミナルが順番に進むインターフェースであり、そうでない仕事があるからです。転送を見守りながらログを読み、同時に設定ファイルを直す。デスクトップならウィンドウ 3 つ。ターミナルなら tmux のペイン 3 つと、かなりの自制心が要ります。
グラフィカルな層が本当に割に合う場面
4 つの状況を、よく耳にする順に。
- ファイルを動かして、その様子を見る。scp でディレクトリーをコピーすると、手元に残るのは点滅するカーソルと祈りです。エクスプローラーなら、ジョブの待ち行列と、転送ごとのリアルタイムの進捗率があり、同じ名前が先にあるときは黙って上書きするのではなく名前を変えます。遅い回線で 4 GB のフォルダーを送っているとき、「まだ動いているのか」は本当に切実な問いです。
- 自分が書いていないコードを読む。知っているファイルを直すのは vim の仕事です。見知らぬコードベースを理解する——ファイルのあいだを飛び、include をたどり、ツリー全体を検索する——のは、ファイルツリーとタブの仕事です。それを、ローカルに何もチェックアウトせずに、リモートのファイルシステムの上で与えてくれるのが Monaco エディターです。
- 見たこともないサーバーに降り立つ。これがいちばん強い理由です。Termal はそのマシンで何が動いているのかを見分けます。Plesk、cPanel、素の nginx や Apache。配信しているサイトを、それぞれが実際に使っている PHP のバージョンつきで並べ、動いているサービスとコンテナーを見せ、ログのファイルを見つけ出します。同じ絵を手作業でそろえるには、10 個あまりのコマンドと、どのディストリビューションが何をどこに隠すのかという知識が要ります。
- サーバー自身のネットワーク位置から試す。そのサーバーの上でだけ応答する内部の経路は、ターミナルからでは調べにくいものです。HTTP クライアントは curl をサーバーの上で実行し、ヘッダーと本文を読める形に並べます。ブラウザーはさらに先へ行きます。既定ではお使いのパソコンから通信しますが、出口をサーバー側に切り替えられます。切り替えると、すでにお持ちの SSH 接続の上に張った SOCKS5 トンネルを通信が通り、いまどちらなのかがツールバーの表示で分かります。タブごとに開発者ツールが付いているので、内側からしか見えないページが、推し量るものではなく、目で見るものになります。
そのすべてが、接続 1 本の上で
ここが設計として肝心なところで、このデスクトップが SSH 呼び出しの寄せ集めに皮をかぶせたものではない理由でもあります。
Termal OS は使い回される SSH 接続のプール(サーバーごとに 1 本)を keepalive 付きで保ち、すべてがその上を通ります。指標も、ファイルエクスプローラーも、ターミナルも、エディターも、ログの追尾も。ファイルマネージャーを開いても、2 本目のセッションは開きません。追加のポートも、エージェントも、2 度目の認証もなく、マシンに入るものもありません。サーバーから見れば、あなたはふつうのことをしている 1 つの SSH ログインです。
この制約は同時に、root もなく何かを入れる権限もないホスティングでこのデスクトップが動く理由でもあります。共用サーバー、マネージドホスティング、お客さまのマシン。デーモンを要求する管理画面では、そういう場所では何の役にも立ちません。
デスクトップに実際に入っているもの
タスクバー、スタートメニュー、デスクトップのアイコンを備えたウィンドウマネージャーと、23 個のアプリ。仕事をするのはこのあたりです。
- エクスプローラー — SFTP のエクスプローラー。コピー、移動、アップロード、フォルダーを書庫としてダウンロード、権限、ドラッグ&ドロップ、進捗つきの転送待ち行列。
- ターミナル — 本物の PTY シェル。コマンドを打ち込むだけの箱ではありません。
- Termal Code — Monaco(VS Code のエディター)。ファイルツリーとタブつきで、リモートのファイルシステムを直接編集します。
- ブラウザー — 複数タブ、ブックマーク、ダウンロード、ソースの表示、そしてタブごとにドッキングした開発者ツール。
- モニター、プロセス、ログ — リアルタイムの指標、そこから終了もできるプロセス一覧、そして Apache・nginx・PHP・MySQL・syslog のよくあるファイルを自動で見つけるログの追尾。
- ウェブリクエスト、Zip、Git、FTP、ごみ箱 — なければ作業の途中でシェルに戻される、小さな道具たち。
- コパイロット — ふつうの言葉での問いに、コマンドと説明で答えます。クリックするまで何も動かず、ご自身の API キーで動きます。
ほかにメールクライアント、メモ、電卓、単位の変換、カラーピッカー、そしていくつかのゲームもあります。23 個のうち 13 個は既定で無効です。常に出ているのはアプリストア、設定、エクスプローラー、ごみ箱だけ。初回起動でファイルエクスプローラーがゲームのメニューの下に埋もれていたら、それ自体がこの構想への反論になってしまうからです。使うものだけ有効にしてください。
開発者に見てほしいところ
このデスクトップは拡張できます。そして、その拡張の仕組みこそがコードベースでいちばん面白い部分です。
サードパーティーのアプリは、隔離された iframe の中で動きます。ファイルシステムにもネットワークにもクリップボードにも、直接は触れません。権限の要る呼び出しはすべてメッセージとしてホストへ渡り、ホストがそれを、アプリがマニフェストで宣言した権限と突き合わせます。その権限は 6 つしかありません。fs.read、fs.write、net、storage、clipboard、webview。インストールのときに表示されます。ランタイム自身の冒頭のコメントにある方針は、身も蓋もありません。iframe は決して信用しない。ホストがすべてを検証する。
これは、たいていのプラグインの仕組みよりも重い意味を持ちます。ここで動くアプリは、あなたが SSH アクセスを与えたサーバーを相手にするからです。プラグインが黙って鍵を読めてしまうアプリストアなど、弁解のしようがありません。
そして SDK は、外部の人のために後付けした別物の、劣った API ではありません。内蔵の電卓は Termal.app() で登録されています。サードパーティーのアプリが使うのと同じ、公開の入り口です。SDK には、メモアプリから webview のホスト、サーバーのウィジェットまで、完全なサンプルアプリが 8 つ付いています。
完全なリファレンス——マニフェスト、ランタイム、ダイアログ、ファイル選択、ストレージ、ネットワーク、webview、クリップボード、ウィンドウ制御、翻訳、パッケージング——は Termal App Studio のページにあります。
これではないもの
- ターミナルの代わりではありません。中にターミナルが入っていますし、あなたはそれを使うことになります。仕事がすでにシェルに収まっているなら、このデスクトップが足すものはありません。
- リモートデスクトップのプロトコルではありません。X11 も VNC も RDP もなく、回線のこちら側にディスプレイサーバーもありません。ウィンドウマネージャーはアプリの中でローカルに動き、SSH 接続を渡るのはファイルとシェルと指標の通信だけです。
- ずっと動き続けるものではありません。ウィンドウを閉じても収集は続きますが、アプリが、起きているマシンの上で動いている必要があります。ノートパソコンを閉じれば止まります。これがいちばん効いてくる Netdata との比較もご覧ください。
- 1000 台のためのものではありません。数台から数十台まで。SSH 越しの Linux だけで、SNMP も Windows もネットワークの自動探索もありません。





