6 ポイント 投稿者 GN⁺ 2023-12-28 | 1件のコメント | WhatsAppで共有

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

  1. PCB とアイソレータなしで Pico 2枚だけでも動作しますか?
    • アイソレータを推奨するが、なくても動作する可能性がある。
  2. モニターの解像度が異なる場合はどうなりますか?
    • マウス移動は抽象座標空間で行われ、コンピューターが物理画面との対応を計算するため、問題なく動作するはず。
  3. この製品はどこで購入できますか?
    • 販売しておらず、個人的な非商用の趣味プロジェクトである。
  4. マウスでアクティブな画面が変わると、キーボードも追従しますか(逆も同様ですか)?
    • はい、まるで1台のコンピューターのように動作するよう作られている。
  5. Logicool Unifying レシーバーのようなキーボード/マウス兼用ドングルと一緒に動作しますか?
    • 現在のバージョンではマウスが別ポートに接続されている前提のため動作しない。Logicool Unifying レシーバーの動作を調査して対応を実装する必要がある。
  6. マウスとキーボードにそれぞれ別のワイヤレスレシーバーがある無線マウス/キーボードと一緒に動作しますか?
    • このケースはテストされていないため予期しない問題が起こる可能性はあるが、理論上はそのまま動作するはず。

欠点

  • 注意: この機能を使うには 2 台のコンピューターが接続され、電源が入っている必要がある(各ボードは接続先コンピューターから給電される)。
  • コード整理やリファクタリングなどが必要。
  • ときどきバグや奇妙な挙動が発生する。
  • さまざまなデバイスでテストされていないため、利用者のハードウェアでどう動作するかは不明。
  • Pico-PIO-USB はキーボード LED 制御をサポートするためにパッチが当てられており、通常これはホストモードでは TinyUSB が処理する。

免責事項

  • このプロジェクトを試す人は、あらゆる怪我、損害、その他の結果について本人が責任を負うことを理解し認める必要がある。
  • 安全は重要であるため、必要な予防措置を講じ、プロジェクト全体を通して自身の安全に責任を持つことが重要である。
  • 感電や火傷、ストレスや怒りに気をつけ、楽しく作業して楽しんでほしい。

GN⁺の見解:

  • この記事は 2 台のコンピューターを使う人にとって非常に有用かもしれない。特に、1組のキーボードとマウスを共有しながら作業効率を高めたいユーザーにとって魅力的である。
  • オープンソースであり、DIY アプローチは技術に関心のある人にとって興味深いプロジェクトになり得る。ユーザーは自分のニーズに合わせてシステムを調整し、改善できる。
  • このプロジェクトは、技術的な問題を解決しようとするコミュニティの革新的な精神を示している。ユーザーが自ら問題を解決し、その過程を共有することで他の人も恩恵を受けられる。

1件のコメント

 
GN⁺ 2023-12-28
Hacker Newsの意見
  • クライアントソフトウェアなしでも画面端を検知できる点が注目に値する。

    • マウスカーソルが魔法のように画面をまたいで移動するようにするため、マウス HID レポートディスクリプタを絶対座標を使うように変更し、相対移動として入ってくるマウスレポートは内部で累積して正確な位置を維持している。
    • SynergyKM/Barrier と似たように動作するが、クリップボード機能やクライアントソフトウェアは不要。
  • Synergy というソフトウェアソリューションを10年以上使っている。Wi-Fi 経由で即座に切り替わり、Windows/Mac/Linux 間でも動作する。

  • YouTube で特定の位置にスライダーを正確に移動しようとすると、マウスが敏感すぎて手をとても慎重に動かすことがある。

    • YouTube ではカスタムハードウェアなしでも、カンマ (,) とピリオド (.) キーを使って動画をフレーム単位でスクラブできる。
  • Windows では、Microsoft Garage で開発され、現在は Windows PowerToys の一部となっている Mouse Without Borders というツールが使える。

  • 他の類似プロジェクトに触発されて、自分用のバージョンを作った。

    • あるプログラムは Linux デスクトップ上で動作し、Linux 入力サブシステム (evdev) から入力イベントを受信する。特定のキーを押すとすべてのイベントを消費し、USB シリアル経由で RPI Pico に送信する。もう一度キーを押すとパッシブリスニングモードに切り替わる。
    • RPI Pico は、Linux の evdev イベントを USB HID イベントに変換して別の Windows PC に送るようプログラムされている。
    • 結果として、Linux PC と任意の OS を実行している PC の間で即座に切り替えられる KM スイッチになっている。
    • ハードウェア初心者として、必要なのがたった2本の配線だけだったので、このプロジェクトは他のハードウェア初心者にも良い入門プロジェクトだと思う。
  • USB ハブを4台購入してキーボードとマウスを切り替えていたが、ほとんどの機器がひどすぎて、1日に何度も物理的にハブを抜き差ししなければならない。

    • Synergy ソフトウェアを使っていてうまく動いているが、ウェブカメラ、マイク、オーディオなども扱えるまともな KVM が欲しい。
    • KVM ユーザーは間違いなく、もっと良い扱いを受けるべきだ。
  • USB 3.0 スイッチを使って2台の PC 間でマウスとキーボード入力を切り替えているが、これが大きな不満の一つだ。

    • Teams 通話中の会議で自分の名前を呼ばれたりメッセージを受け取ったりすると、突然 Teams が動いている PC に入力を切り替えるためのボタンを探して慌てることになる。
    • ESP32 や Rpi Pico W を USB スイッチのボタンピンに接続し、HTTP エンドポイント経由で2台のマシン間の入力を切り替えるというアイデアがあったが、どちらの入力が有効なのかを判定する方法が見つからず、断念した。
  • 現在 KVM スイッチを使っているが、切り替えに2〜3秒かかるので、たいていは別のコンピューターに SSH で接続して tmux セッションを使っている。

  • これは驚くべき進歩だ。

    • Linux-Mac-Windows のマシンを左から右に並べたデスクトップ環境を長年使ってきた者として、ここ数年 SoC デザインが広まるにつれて、この手のセットアップはより簡単になってきた。
    • 現在の構成は、深センから直送された 2x $250 の Ryzen SoC 搭載 Mac mini クローンと M1 MBP で構成されている。
    • かつて栄えていたオープンソース KVM ソリューションの世界が、無料で動作するマルチプラットフォームのオープンソースソフトウェア KVM を手に入れるのが難しい、フォークの再帰的な悪夢へと退化してしまったのは残念だ。
    • 現在のセットアップでは古き良き KVM スイッチを使っているが、ボタンを押すのが煩わしい。
  • Synergy はソフトウェアだけでこの問題をうまく解決している。無料でもオープンソースでもないが、比較的安価だ。