SharkTTY 1.6は6月27日に、Mac向けのSharkTTY Desk 0.6.0とともに公開されました。 リモートデスクトップが1枚の画面を意味しなくなったリリースです。 ただし作業の大半はその下にあります。引き際で引き、粘るべきところで粘り、 そのどちらが起きたのかをちゃんと伝えてくれる接続です。
1枚ではなく、すべての画面を
1.6より前は、モニターが3台あるMacにつないでも、見られるのはそのうち1枚だけでした。 どれを見るかは選べましたが、話はそこまでです。そのせいで、マルチディスプレイのMacは 実物よりもスマートフォンからは小さく感じられ、必要なウインドウは決まって 今見ていない方のディスプレイにありました。
1.6はそのすべてを送ります。集約ビューがディスプレイをまとめて並べ、どれかをタップまたは ドラッグすればその画面の操作に切り替わります — ポインタは指の行く先へ、 どのディスプレイの上であっても付いてきます。各ディスプレイは一度にまとめてではなく 必要に応じてストリーミングされ、3画面のMacがスマートフォンの回線でも扱えるのは ひとえにそのおかげです。
同じリリースで、保存済みのデスクトップを編集し、その共有リンクをセッションから離れずに 取得できるようになりました。2台目の端末のためにアクセスを用意するのに、 いったん切断する必要はもうありません。
本当に再接続する再接続
エレベーターに乗るたびに切れるリモートデスクトップは、リモートデスクトップとは言えません。 1.6では接続の経路を、単純な優先順位を軸に作り直しました。まず直接のピアツーピア経路を試す — その方が速く、誰も間に入らないからです — そして直接の経路が立ち上がらないときだけ 中継サーバーへ切り替えます。ピアツーピア優先は設定のスイッチではなくスケジューリングであり、 アプリは複数の経路を競わせて、応答したものを採用します。
こうした仕組みがたいてい破綻するのは再試行のところで、しかも壊れ方は2方向あります。 何でも再試行すれば、認証情報の間違いがネットワーク障害にしか見えない無限ループに変わります。 何も再試行しなければ、モバイル回線の2秒のつまずきでセッションが終わります。そこで1.6では 場合分けをしました。認証の拒否はフォールバックの巡回を即座に止めます。同じ間違った鍵で 次の経路を試しても同じように失敗するからです。一方、トランスポートの失敗はジッターを かけてバックオフしながら試行を続けます。このジッターは地味に見えて、実はよく効きます — なければ、同じ瞬間に切れたクライアントが全員、同じ瞬間に戻ってきます。
さらに、アプリはネットワークが戻ったことを検知し、残りのバックオフを待たずに復帰するようになりました。 WebSocketの経路にはキープアライブが入り、待機中のセッションが中間装置に刈り取られなくなりました。 そして接続を受け付けるループは、直前の接続を処理している最中に届いた接続を取りこぼさなくなりました。
短いリンクと、何も貼り付けずにつなぐこと
ペアリング文字列は、ホストとポートと証明書のフィンガープリントとトークンが入った長い1行です。 スキャンする分には問題ありませんが、誰かに送るとなると悲惨です。1.6では、スタンドアロンの 中継サーバーと管理された中継サーバーの両方に短いリンクを追加しました。アプリがリンクを解決し、 トークンを受け取り、それで接続します — 目視で見比べるフィンガープリントも、 貼り付けるものもありません。
関連する小さな修正も。そもそも言わずに済むはずだった類の話です。QRスキャナーは、デスクの ペアリング文字列でも短いリンクでもないコードを無視するようになりました。誰かが貼ったポスターの Wi-Fi用QRコードから接続を作ろうとすることは、もうありません。
中継経路の暗号化
1.6ではWebSocketの中継フレームが暗号化され、管理された中継サーバーは、正しいルームに現れた ものを何でも受け入れるのではなく、チケットを発行するようになりました。どちらも同じ方向への 一歩です。中継サーバーの仕事は、すでに互いに合意した2つの端の間でバイト列を転送することであり、 そのバイト列に対してできることは少なければ少ないほど良いはずです。誰の中継サーバーも信頼したくないなら、 スタンドアロン版はオープンソースなので、自分で動かせます。
推測ではなく、ネゴシエーションするバージョン
アプリとMacのエージェントは、他の何よりも先にプロトコルのバージョンとケイパビリティビットの 組を交換するようになりました。地味な仕組みですが、古いアプリが新しいエージェントに出会った 最初の一度で元が取れます。半分だけ動いてどこか分かりにくいところで失敗する接続の代わりに、 アプリは相手に何ができるかを正確に把握し、古すぎるアプリには更新を促す明確な案内が出ます。 それ以降のすべてがこのケイパビリティビットに乗っています — 1.8のオーディオコーデックの ネゴシエーションも同じ仕組みです。
接続コードによる認証もここで入りました。Mac側にはスロットリングと許可リストが付いているので、 漏れたコードを静かに総当たりされることはありません。
6言語、やり切りました
このリリースで、インターフェイスは対応する6言語の大半ではなく、そのすべてでローカライズされました。 ターミナルのアプリは短い文字列を大量に抱え込みます。そして最後の2割は、何かがうまくいかなくなるまで 誰の目にも触れない文字列です — そしてそのときこそ、自分の言語でエラーを読めることが 効いてきます。
そして小さなものたち
- ターミナルのセーフエリア余白。文字が角の丸みやホームインジケータの下に潜り込まなくなりました。
- ホストごとのキーボード記憶。そのホストで使っていたキーボードが、次もそのまま出てきます。
- リモートデスクトップのxHD画質上限。帯域に余裕があって、ピクセルが欲しいときのために。
- SSHポートはステッパーではなく直接入力に。2222まで押し続けた経験のある方なら、ありがたみが分かるはずです。
1.6の機能はすべて無料です。アプリ内課金は任意のチップだけで、 それで何かが解放されることはありません。
他の言語で読む: English · 中文 · 日本語 · Español · Français · 한국어 · Українська
アプリそのものについてはSharkTTY ガイド、利用者向けの短い更新情報は新着情報をご覧ください。ご連絡はフィードバックボードがいちばん早い方法です。開発ブログへ戻る。