Skip to content

Latest commit

 

History

History
118 lines (87 loc) · 4.47 KB

File metadata and controls

118 lines (87 loc) · 4.47 KB

go-zerokvm

English

このプロジェクトは、doominator42氏によるオリジナルのZeroKVMをGo言語に移植したものです。 Go-zerokvmは、低コストで簡単に構築できるKVM-over-IPデバイスです。ターゲットホストからは、DisplayLinkモニタおよび標準的なUSBキーボード/マウスとして認識されます。 オリジナルのプロジェクトにおけるdoominator42氏の素晴らしい成果に感謝いたします。

go-zerokvm

特徴

  • DisplayLinkプロトコルの実装: ホストの画面信号をキャプチャし、ウェブブラウザに表示します。
  • USB HIDエミュレーション: キーボード、絶対座標マウス、相対座標マウスをエミュレートします。
  • ウェブコンソール: ブラウザから直接、直感的なリモート操作が可能です。
  • マルチアーキテクチャ対応: Raspberry Pi Zero/2/3/4/5などのARMベースのLinuxデバイスで動作します。
  • CGO不要: 純粋なGo実装により、クロスコンパイルが非常に容易です。

スクリーンショット

go-zerokvm

必要条件

  • ハードウェア: USB OTG (USB 2.0 Device/Gadgetモード) をサポートするLinuxデバイス (例: Raspberry Pi Zero, 4, 5)。
  • OS: ConfigFSおよびFunctionFSが有効なLinux。

セットアップ (ZeroKVMデバイス側)

Raspberry Piユーザーの場合、以下の設定が必要です。

1. カーネルオーバーレイの有効化

/boot/config.txt (または /boot/firmware/config.txt) に以下の行を追加します。

dtoverlay=dwc2

2. カーネルモジュールのロード

/etc/modules に以下の行を追加して再起動するか、modprobe で手動でロードします。

dwc2
libcomposite

3. パーミッション

このプログラムはUSBガジェット (ConfigFS) を設定し、FunctionFSエンドポイントを操作するため、ルート権限 (sudo) で実行する必要があります。

ホストPC (ターゲット) の要件

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

UDC名の確認

ls /sys/class/udc
# 例: fe980000.usb

操作方法

  1. ビルド: mise を使用する場合:

    mise run build:all

    手動ビルド (例: ARM64用):

    GOOS=linux GOARCH=arm64 CGO_ENABLED=0 go build -o go-zerokvm
  2. 実行:

    sudo ./go-zerokvm -udc <UDC名>
  3. 使用方法: ZeroKVMデバイスのUSB OTGポートをホストPCのUSBポートに接続し、ウェブブラウザで http://<device-ip>:8080 にアクセスします。

テスト

ユニットテスト

内部ロジック(DisplayLinkデコード、HIDプロトコルなど)のテストを実行します:

go test ./...

E2E Web UIテスト (Maestro)

Webインターフェースのエンドツーエンドテストには Maestro を使用します。

  1. モックサーバーの起動: ハードウェアがない環境(macOS/Windows等)でも、-mock フラグを使用してUIのみを起動しテストできます:

    go run main.go -mock -listen :8081
  2. Maestroの実行:

    # 基本的な表示テスト
    maestro test e2e/viewer_smoke_test.yaml
    # 操作インタラクションテスト
    maestro test e2e/toolbar_interactions.yaml

ライセンス

このプロジェクトは Apache License 2.0 の下でライセンスされています。