Show HN: USBスイッチだけを使ったマルチモニターKVM
(github.com/fiddyschmitt)- SimpleKVMは、1組のキーボード、マウス、モニターで複数のコンピューターを制御できるWindows向けプログラムで、高解像度・高リフレッシュレート対応KVMのコストを抑える代替手段です
- ユーザーは各コンピューターをモニターに接続し、キーボードとマウスをUSB Switchに接続したうえで、いずれか1台のコンピューターでSimpleKVMを実行すればよいです
- 切り替えはUSB Switchのボタンまたはホットキーで可能で、プログラムはUSBデバイスの接続・切断、またはホットキー入力を検知します
- モニター入力の切り替えは、多くのモニターが対応するDDC/CIコマンドで処理され、マルチモニター構成にも対応します
- ダウンロードはGitHubのreleasesセクションで提供されており、現在はWindows向けのみ提供されています
SimpleKVMが解決する課題
- SimpleKVMは、1組のキーボード、マウス、モニターで複数のコンピューターを制御するためのプログラムです
- 一般的なKVMは、特に高解像度と高リフレッシュレートに対応する製品ほど高価になりがちです
- SimpleKVMは、安価なUSB Switchと組み合わせて使うことで、数百ドルを費やさずに同様の構成を実現できるようにします
必要な構成
- ユーザーは次の手順で構成します
- コンピューターをモニターに接続します
- マウスとキーボードをUSB Switchに接続します
- コンピューターのうち1台でSimpleKVMを実行します
- その後、USB Switchまたはホットキーでコンピューター間の切り替えが可能になります
仕組み
- プログラムはUSBデバイスが接続または切断されるタイミングを検知します
- ホットキー入力も切り替えトリガーとして使用できます
- 切り替え時にモニターへDDC/CIコマンドを送り、入力ソースを変更します
- DDC/CIは多くのモニターが対応している方式です
マルチモニターと実行環境
- SimpleKVMはマルチモニターに対応しています
- リリースはreleasesセクションから入手できます
- 現在提供されているビルドはWindows向けです
USB Switchの例
- どのUSB Switchでも使用できます
- READMEにはアフィリエイトなしの例として、次の製品が示されています
- SABRENT 4 Port USB Switch for $29 USD: 4台のコンピューターに対応
- 2 port USB switch for $24 USD: 2台のコンピューターに対応
- 2 ports for for $3 USD: 2台のコンピューターに対応、入力USBは1つ
スタートアップ設定と出典
- 起動時に自動実行するには、設定ボタンをクリックしてRun at Startupにチェックを入れます
- SimpleKVMはhaimgelのdisplay-switchプログラムに着想を得ています
1件のコメント
Hacker News の意見
「自分も同じ結論に達した」という程度だが、自分の構成は少し複雑な代わりに、より良く安いと思う
上記の方式はすべてのコンピューターにインストールする必要があるので自分には難しく、USB の切り替えに依存するため完全なリモートトリガーができない
代わりに、モニター入力の切り替えは DDC コマンド、USB はボタン 1 つの 25 ドルの USB KVM、ボタン入力は 5〜15 ドルの AliExpress のマクロパッドで処理している
Stream Deck のような完成品はボタン数個にしては 80 ドル以上と高く、安価なマクロパッドは同梱ソフトウェアの代わりに https://github.com/rOzzy1987/MacroPad のような GitHub プロジェクトでプログラムできる
USB KVM のボタンは 16 ドルの FingerBot や 28 ドルの Switchbot に押させ、AHK がショートカットキーを監視して DDC コマンドと USB スイッチのボタンを一緒にトリガーする
数秒の遅延はあるが、1 か所からだけ制御でき、完全なリモート実行も可能
結局かなり不安定で、ほかのことがもっとぐちゃぐちゃだったのでほとんど諦めた
マクロパッドはいいアイデアで、USB スイッチの置き場所を決めるのはいつも面倒だった
米国への送料は知らないが、欧州への送料は 15 ドルだった
KVM を調べていて、結局 DDC が解法だという同じ結論に達した
自分の場合は Windows 2 台とデュアルモニター構成で、CLI のある NirSoft ControlMyMonitor と Elgato Stream Deck を使っている
一般的な KVM では 2 台のモニターが 1 台のコンピューターだけを表示するが、自分は A モニターには一方のコンピューター、B モニターには別のコンピューターを表示し、必要なら入れ替えたい
縦置き/横置きモニターを併用し、マウスとキーボードはモニター構成とは独立して切り替えたい
各コンピューターで Stream Deck ソフトウェアを実行し、Stream Deck は USB スイッチに接続している
単純な USB スイッチャーもかなり高く、時々 Linux では動かないドライバーを要求することもあった
そこで USB ハブとスイッチを備えた簡単な回路基板をさっと描いて、JLCPCB や PCBWay のような DIY 製造所に組み立てまで任せた
2 対 1 スイッチ 1 個のものが 5 個で 25 ユーロで、回路設計の経験もなく、はんだ付けもしなかったが、完璧に動作する
このソフトウェアとも相性がよさそうなので、一度試してみるかもしれない
カスタム製作より安いと思う
接地と、異なる電位の グラウンドループ回避がかなり大きな部分になりそうだ
一部の USB スイッチャーが Linux でうまく動かないというのは興味深い
単純な USB ハブなので別途ドライバーは不要だと思っていたが、https://www.aliexpress.com/item/1005006202631772.html のように PC 間ファイル転送やマウス共有などの高度な機能がある製品は、専用ソフトウェアとドライバーが必要な場合が多い
可能な限り「賢くない」デバイスなので、レビューの 1 つによると抜き差ししすぎるとポートが少し不安定になることがあるらしいが、自分の 2 台の Dell P2419H モニターではまだ完璧に動作している
すべてのケーブルが背面にあるのでこの製品を選んだし、OP の GitHub ページにあるリモコン付きモデルも良さそうだ
似た構成を探しながらいくつか使って調べもしたが、ドライバーが必要な製品は 1 つもなかった
この用途には udev を使っている。USB スイッチが現れたら DDC コマンドを送る
ACTION=="add", SUBSYSTEM=="usb", ENV{ID_VENDOR_ID}=="1a40", ENV{ID_MODEL_ID}=="0101", RUN+="/usr/bin/ddcutil --sn ABCDEFGHI setvcp 60 0x0f"優れたKVM、特にLevel1Tech製品は、すべてのモニターを仮想的に常時接続された状態に保つため、マシンを行き来してもウィンドウ位置がそのまま残る
クライアントPC側から見るとUSB/DisplayPortデバイスが消えたことがないので、デバイスを再接続する遅延もない
周辺機器をドックに大量につないで、アップストリームのThunderboltだけを切り替えることもできるが、その方式はうまく動作しない
粗悪なKVMは簡単で、優れたKVMは難しい
https://www.store.level1techs.com/products/hardwareとは無関係
MacとLinuxボックス(Gnome)を行き来すると、Macはスリープし、Gnomeはデフォルトのモニター構成に戻ってウィンドウ位置を移動してしまう
EDIDエミュレーション付きのDP 1.2 KVMはあるが、DP 1.4の利点を失うことになる
FAQフォーラムにも載っている: https://forum.level1techs.com/t/official-l1techs-kvm-faq-ult...
USBレシーバーを使うワイヤレス周辺機器と組み合わせるとケーブルレス構成になって便利で、ノートPCはケーブル1本を挿すだけですべて接続される
仕事用PCと個人PCを1日に何度も行き来して使っており、Linux 2台で4K 60Hzと2K 144Hzのデュアルモニター構成として、これまで完璧に動作している
USBオーディオ、マイク、4Kカメラ、プリンター、キーボードとマウスまでつないでいる
まともなウィンドウマネージャーなら、モニターが戻ってきたときにウィンドウを元の位置へ戻せるくらい賢い
ソース切り替えの失敗は一度もなく、他の人が言っていた遅延はモニター自体のHDMIハンドシェイク過程だけだった
もっと高価なTESmart https://www.amazon.com/gp/product/B08N494N7Xもあったが、Thunderboltドック https://www.amazon.com/gp/product/B08HR3T837とMBPの組み合わせで妙な互換性問題があり、使えなかった
サポートにも問い合わせたが、原因は最後まで分からなかった
こうしたツールで注意すべき点は、DisplayPortでは通常、アクティブな入力に対してしかコマンドを許可しないこと
一度別の入力に切り替えると、別のコンピューター側で実行しない限り戻ってこられず面倒
一方HDMIは、アクティブ入力ではないポートにも通常DDCコマンドを許可する
必ずそうでなければならないのかは分からないが、自分が使ったすべてのディスプレイではそうだった
ちょうど必要としていたプロジェクト。Thunderboltドックだけを切り替えることも可能なのか気になる
例えばThunderbolt対応のコンピューターが4台あり、その間でUSB-Cを1本だけ切り替えるような形
ハードウェアに影響が出るのが怖くて試してはいないが、この記事に触発されてThunderbolt KVMを探してみると、https://sabrent.com/products/sb-tb4k や https://www.reddit.com/r/Thunderbolt/comments/11gos6n/kvm_sw... のようなものがあった
遅延を受け入れられるなら、動作はするかもしれない
要するに、各コンピューターはモニターの各入力に自分のHDMIケーブルを挿す必要がある
多くの人が考える本物のKVMではなく、モニターの入力選択ボタンを押さなくて済むようにする方式
少なくとも1台は電源が入っていてWindowsを実行している必要があるが、おそらく1台だけでよさそう
USBデバイスが挿入されたことを検知するとモニター入力をWindowsコンピューターに切り替え、USBデバイスが取り外されたことを検知するとLinuxコンピューターに切り替える
すでにショートカットキーを押すとスクリプトを実行し、xrandrでモニターの回転を変えるような形で似た使い方をしている
ふたたびコンピューター1台の構成に戻るまでは、ケーブルを直接抜き差ししたり、READMEに出ている Ugreen USB スイッチを使ったりして、最終的には内蔵KVMモニターに落ち着いたけれど、それが一番よかった
問題は、仕事とゲームで同じモニターを使いたい場合
4Kや高リフレッシュレート対応のKVMスイッチは非常に高価で信頼性も低めなので、たいていはUSBスイッチを使い、モニター入力は手動で切り替えることになる
ここのソフトウェアは「入力ソース切り替え」ボタンを押す手間を減らしてくれるが、Windows専用に見えるので、両方のマシンがどちらもWindowsでない限り、一方向の切り替えしかできず、戻るときは手動切り替えが必要になる
ゲーム用途に適していて、高DPI・高リフレッシュレート・内蔵KVMを備えたモニターとしては Gigabyte M28U がある
ボタン1つで入力ソースとUSB周辺機器が一緒に切り替わり、かなりうまく動作する
M32Uもあるが、DPIはより低い
USBデバイスが取り外されたこと、つまり別のコンピューターへ移ったことと、挿入されたこと、つまりこのコンピューターへ戻ってきたことを検知できるため
自分も似たようなものを自作し、USBスイッチやほかのハードウェアなしで動くようにした
HDMI/USB-Cモニターには DDC コマンドを送り、Logi MXキーボードとマウスには HID++ バイトコードを送っている
コードは共有するにはあまりに汚いが、自作したい人は、Logi Bolt Receiver、Logitech Unified Receiver、MX Keys Mini Bluetooth、MX Anywhere 3 Bluetoothに対して、各ホストへ切り替えるバイトシーケンスを送る形で構成すればよい
現在の構成は Dell U2415 モニター2台と Linux x86_64 デスクトップで、Bluetoothとドングルの両方に対応するLogiの縦型マウスとATK(A.JAZZ)キーボードを使っている
Raspberry Pi 5のBluetoothと2つのmicro-HDMIポートで、キーボード/モニター/マウスを純粋にソフトウェア方式で共有したく、ハードウェアKVMに大金を払いたくない