DeskHop – 高速なデスクトップ切り替え機能
(github.com/hrvach)DeskHop - 高速なデスクトップ切り替え
- 無料かつオープンソース
- 切り替え時の遅延がほぼない
- マウスポインターをコンピューター間でドラッグして切り替え可能
- ソフトウェアのインストール不要
- 安価で入手しやすい部品を使用(15ユーロ未満)
- 3Dプリンターで出力可能なスナップフィットケース
- 出力間で完全なガルバニック絶縁
- Linux、macOS、Windows で動作
動作原理
- この装置はキーボード/マウスとコンピューターの間で仲介役として動作し、2台のコンピューターとの接続を同時に維持する
- ユーザーの選択に応じて、マウスとキー入力をどちらのコンピューターに送るかを決定する
- マウスを別のデスクトップへドラッグすると、キーボードも自動的に切り替わる
マウス
- マウスの HID レポートディスクリプターを絶対座標を使うように変更し、マウスレポート(相対移動)を内部で蓄積して正確な位置を維持する
- 別のモニターの方向へモニター領域の外に出ようとした場合、Y 座標を維持したまま最大 X を最小 X に切り替えて出力を変更する
- カーソルが別モニターでも同じ高さに現れるようにし、滑らかな切り替えとして認識できるようにする
キーボード
- USB ホストとしてキーボードを定期的にポーリングし、あらかじめ設定されたショートカットキー(Caps Lock など)を検出して別の出力へ文字を送る
- 現在どの出力を使用しているかを視覚的に分かるように、キーボード LED を再利用してフィードバックを提供する
- 各コンピューターの LED 状態を記憶し、以前の状態のまま作業を続けられる
事前ビルド済みイメージの使用
- 事前ビルド済みイメージを利用可能
- Pico ボードを PCB の A スロットに接続し、ケーブルをつなぐ間ボード上のボタンを押し続けると、システム上で USB ドライブとして表示される
- 対応する
board_A.uf2ファイルをコピーし、B についても同様に繰り返す
ファームウェアのアップグレード
- オプション 1: ケースを開け、各 Pico を接続する間ボタンを押し続けた状態で正しい
uf2ファイルをコピーする - オプション 2: 特定のキー組み合わせ(
Right Shift, P, H, X, Left Shift)を使って BOOTSEL モードに切り替え、Pico をブートローダーアップグレードモードにする
その他の機能
- マウスを微調整したいときは、
Right ALTを押している間にマウスを動かすとマウス速度が大幅に低下し、精密な作業ができる
ハードウェア
- 回路は安価で(1台あたり 4.10 ユーロ)、手はんだ可能で、ほとんどのサプライヤーが在庫を持っている 2 枚の Raspberry Pi Pico ボードをベースにしている
- Pico 同士はアナログ・デバイセズの ADuM1201 デュアルチャネルデジタルアイソレータ(約 3 ユーロ)を用いた UART で接続される
- RP2040 のプログラマブル I/O の妙技を使って USB を実装する驚くべきプロジェクトのおかげで、USB ホストおよびデバイスとして動作できる
PCB
- DIY ビルドをできるだけ簡単にするため、配線は片面のみに置き、部品点数も最小限に抑えている
- USB D+/D- の差動ラインは同長である必要があるが、全体長を一致させるために、PICO PCB 自体にある対応 GPIO トレースの長さの差を相殺する目的で意図的にわずかに非対称になっている
ケース
- 3D モデリングは得意ではないためケースはシンプルで基本的なものだが、目的には合っている
- 印刷しやすく、約 33g のフィラメントを使用し、数時間で完成する
- 水平方向の PCB の動きは穴を通すピンで防ぎ、垂直方向の動きは側面のスナップフィット突起で防ぐため、ネジは不要
- micro USB コネクターはケース側面からはみ出すので、少し大きめの穴を開ければケーブルを通せる
- ふたはスナップフィット設計で、開けるためのドライバースロットがある
- 上面の表示は凹型になっており、クレヨンなどで仕上げてコントラストを高めることができる(そのままでもよい)
部品表
- Raspberry Pi Pico 2個、ADuM1201BRZ 1個、Cap 1206 SMD 100nF 2個、USB-A PCB コネクター 2個、Headers 2.54 1x03 2個
- 総価格: 11.53 ユーロ
- USB-A コネクターには Molex MX-67643-0910、または同じ寸法を共有するより安価な代替品を使用可能
- 追加手順: PCB 製作(Gerber 提供、JLC が数ドルで製作、厚さ 1.6mm を選択)、ケースの 3D プリント(stl ファイル提供、約 33g のフィラメントが必要)
FAQ
- PCB とアイソレータなしで Pico 2枚だけでも動作しますか?
- アイソレータを推奨するが、なくても動作する可能性がある。
- モニターの解像度が異なる場合はどうなりますか?
- マウス移動は抽象座標空間で行われ、コンピューターが物理画面との対応を計算するため、問題なく動作するはず。
- この製品はどこで購入できますか?
- 販売しておらず、個人的な非商用の趣味プロジェクトである。
- マウスでアクティブな画面が変わると、キーボードも追従しますか(逆も同様ですか)?
- はい、まるで1台のコンピューターのように動作するよう作られている。
- Logicool Unifying レシーバーのようなキーボード/マウス兼用ドングルと一緒に動作しますか?
- 現在のバージョンではマウスが別ポートに接続されている前提のため動作しない。Logicool Unifying レシーバーの動作を調査して対応を実装する必要がある。
- マウスとキーボードにそれぞれ別のワイヤレスレシーバーがある無線マウス/キーボードと一緒に動作しますか?
- このケースはテストされていないため予期しない問題が起こる可能性はあるが、理論上はそのまま動作するはず。
欠点
- 注意: この機能を使うには 2 台のコンピューターが接続され、電源が入っている必要がある(各ボードは接続先コンピューターから給電される)。
- コード整理やリファクタリングなどが必要。
- ときどきバグや奇妙な挙動が発生する。
- さまざまなデバイスでテストされていないため、利用者のハードウェアでどう動作するかは不明。
- Pico-PIO-USB はキーボード LED 制御をサポートするためにパッチが当てられており、通常これはホストモードでは TinyUSB が処理する。
免責事項
- このプロジェクトを試す人は、あらゆる怪我、損害、その他の結果について本人が責任を負うことを理解し認める必要がある。
- 安全は重要であるため、必要な予防措置を講じ、プロジェクト全体を通して自身の安全に責任を持つことが重要である。
- 感電や火傷、ストレスや怒りに気をつけ、楽しく作業して楽しんでほしい。
GN⁺の見解:
- この記事は 2 台のコンピューターを使う人にとって非常に有用かもしれない。特に、1組のキーボードとマウスを共有しながら作業効率を高めたいユーザーにとって魅力的である。
- オープンソースであり、DIY アプローチは技術に関心のある人にとって興味深いプロジェクトになり得る。ユーザーは自分のニーズに合わせてシステムを調整し、改善できる。
- このプロジェクトは、技術的な問題を解決しようとするコミュニティの革新的な精神を示している。ユーザーが自ら問題を解決し、その過程を共有することで他の人も恩恵を受けられる。
1件のコメント
Hacker Newsの意見
クライアントソフトウェアなしでも画面端を検知できる点が注目に値する。
Synergy というソフトウェアソリューションを10年以上使っている。Wi-Fi 経由で即座に切り替わり、Windows/Mac/Linux 間でも動作する。
YouTube で特定の位置にスライダーを正確に移動しようとすると、マウスが敏感すぎて手をとても慎重に動かすことがある。
Windows では、Microsoft Garage で開発され、現在は Windows PowerToys の一部となっている Mouse Without Borders というツールが使える。
他の類似プロジェクトに触発されて、自分用のバージョンを作った。
USB ハブを4台購入してキーボードとマウスを切り替えていたが、ほとんどの機器がひどすぎて、1日に何度も物理的にハブを抜き差ししなければならない。
USB 3.0 スイッチを使って2台の PC 間でマウスとキーボード入力を切り替えているが、これが大きな不満の一つだ。
現在 KVM スイッチを使っているが、切り替えに2〜3秒かかるので、たいていは別のコンピューターに SSH で接続して tmux セッションを使っている。
これは驚くべき進歩だ。
Synergy はソフトウェアだけでこの問題をうまく解決している。無料でもオープンソースでもないが、比較的安価だ。