このプロジェクトは、doominator42氏によるオリジナルのZeroKVMをGo言語に移植したものです。 Go-zerokvmは、低コストで簡単に構築できるKVM-over-IPデバイスです。ターゲットホストからは、DisplayLinkモニタおよび標準的なUSBキーボード/マウスとして認識されます。 オリジナルのプロジェクトにおけるdoominator42氏の素晴らしい成果に感謝いたします。
- DisplayLinkプロトコルの実装: ホストの画面信号をキャプチャし、ウェブブラウザに表示します。
- USB HIDエミュレーション: キーボード、絶対座標マウス、相対座標マウスをエミュレートします。
- ウェブコンソール: ブラウザから直接、直感的なリモート操作が可能です。
- マルチアーキテクチャ対応: Raspberry Pi Zero/2/3/4/5などのARMベースのLinuxデバイスで動作します。
- CGO不要: 純粋なGo実装により、クロスコンパイルが非常に容易です。
- ハードウェア: USB OTG (USB 2.0 Device/Gadgetモード) をサポートするLinuxデバイス (例: Raspberry Pi Zero, 4, 5)。
- OS: ConfigFSおよびFunctionFSが有効なLinux。
Raspberry Piユーザーの場合、以下の設定が必要です。
/boot/config.txt (または /boot/firmware/config.txt) に以下の行を追加します。
dtoverlay=dwc2
/etc/modules に以下の行を追加して再起動するか、modprobe で手動でロードします。
dwc2
libcomposite
このプログラムはUSBガジェット (ConfigFS) を設定し、FunctionFSエンドポイントを操作するため、ルート権限 (sudo) で実行する必要があります。
ZeroKVMに接続されるターゲットPCには、DisplayLinkドライバが必要です。
- Linux: カーネル3.4以降にはメインラインの
udlドライバが含まれています。認識されない場合はlsmod | grep udlで確認してください。 - Windows: 通常、Windows Update経由で自動的にインストールされます。
- macOS / Android: 公式サイトから「DisplayLink Manager」(またはDisplayLink Presenter) をインストールする必要があります。
実行時に以下の引数を指定できます。
| 引数 | 説明 | デフォルト |
|---|---|---|
-udc |
USBコントローラの名称 (必須) | (なし) |
-name |
ガジェット名 | zerokvm |
-listen |
ウェブUIの待機アドレス | :8080 |
ls /sys/class/udc
# 例: fe980000.usb-
ビルド: mise を使用する場合:
mise run build:all
手動ビルド (例: ARM64用):
GOOS=linux GOARCH=arm64 CGO_ENABLED=0 go build -o go-zerokvm
-
実行:
sudo ./go-zerokvm -udc <UDC名>
-
使用方法: ZeroKVMデバイスのUSB OTGポートをホストPCのUSBポートに接続し、ウェブブラウザで
http://<device-ip>:8080にアクセスします。
内部ロジック(DisplayLinkデコード、HIDプロトコルなど)のテストを実行します:
go test ./...Webインターフェースのエンドツーエンドテストには Maestro を使用します。
-
モックサーバーの起動: ハードウェアがない環境(macOS/Windows等)でも、
-mockフラグを使用してUIのみを起動しテストできます:go run main.go -mock -listen :8081
-
Maestroの実行:
# 基本的な表示テスト maestro test e2e/viewer_smoke_test.yaml # 操作インタラクションテスト maestro test e2e/toolbar_interactions.yaml
このプロジェクトは Apache License 2.0 の下でライセンスされています。

