トップ 履歴 一覧 カテゴリ ソース 検索 ヘルプ RSS ログイン

RaspberryPi/Pi-KVM

INDEX

Raspberry Pi を用いた KVM over IP。

Pi-KVM

Raspberry Pi を用いた KVM over IP で、4 および Zero (2) W 用に Arch Linux ARM をベースにしたイメージが公開されている。

画面は、USBに接続したHDMIキャプチャディバイスか、カメラ用のCSIで取得され、操作は、USB Type-C の OTG で行われる。電源供給も Type-C で行われるため、接続したPCから必要な電力が供給できない場合、スプリッタなどを用意/DIYする必要がある。

また、CD-ROM または Flash Drive をエミュレーション、ATX 制御(電源・リセット スイッチ、パワー・HDDアクセス ランプ)、VNCサーバ などの機能も用意されている。

CSIを利用した場合、H.264 エンコーディングと P2P接続とUDPで WebRTC によるビデオ転送が利用できる。これにより、トラフィックの削減、ネットワークの負荷軽減が可能になる。(2021.06.10 以降のビルドではデフォルトで使用可能になっている)

セットアップ

 イメージファイルのダウンロード

サイト https://pikvm.org/download/ から、適切なプラットフォームのイメージを取得する。

Pi 4 は、CSI bridge を利用するか、USB dongle を利用するかで分かれている(Pi Zero (2) W は、CSI bridge のみ)。

 イメージファイルの書き込み

取得したイメージファイルの圧縮を展開し、SDカードに書き込む。

SDカードは、16GB クラス10 以上を推奨。

書き込みは balenaEtcher や Raspberry Pi Imager などを利用する。

 起動時の構成

イメージファイルが書き込まれたSDカードのFAT32領域に pikvm.txt と言うファイルが存在する。起動時に設定が行われ、設定を適用すると、ファイルは自動的に削除されます。

特に初回起動の場合「FIRSTBOOT=1」の行が指定されており、これによって Pi-KVM が初期化が行われる。そのため、この行を消してしまうと必要な初期処理が行われない。

 ネットワーク設定

Wi-Fi の設定

pikvm.txt に、WiFi の設定の記述を追加する。それにより、 /etc/systemd/network/wlan0.network (NICの設定)と /etc/wpa_supplicant/wpa_supplicant-wlan0.conf (ESSIDの設定)が作成される。

WIFI_ESSID="mynet"
WIFI_PASSWD="p@s$$w0rd"

また、非表示 Wi-Fi ネットワークに接続する場合は、「WIFI_HIDDEN=1」も追加する(2024.03.12 以降のイメージから)。

イーサネット(有線) の固定IPアドレス

pikvm.txt に、IPアドレス・サブネット などの設定を追加する。

ETH_ADDR=192.168.0.100/24
ETH_DNS=8.8.8.8
ETH_GW=192.168.0.1

Wi-Fi (無線) の固定IPアドレス

pikvm.txt に、IPアドレス・サブネット などの設定を追加する。WIFI_ESSID および WIFI_PASSWD と同時に設定する。

WIFI_ADDR=192.168.0.100/24
WIFI_DNS=8.8.8.8
WIFI_GW=192.168.0.1

Avahi

avahi-daemon を有効にする場合は、pikvm.txt に下記を追加する。

ENABLE_AVAHI=1

 IP-KVM へアクセス(Web UI)

ブラウザから Pi-KVM を入れたRaspberry Pi にアクセスする(初期設定では https://pikvm/ )。ログイン画面となるので ID/PW を入力する(初期設定では admin/admin )。

 IP-KVM へアクセス(SSH)

SSH クライアントで、Pi-KVM を入れたRaspberry Pi にアクセスする(初期ユーザは root/root )。

また、SSH サーバのポート番号を変更する場合、pikvm.txt に「SSH_PORT=1234」を記載することで、1234 に変更される。

 パスワード変更

SSH で接続するか、Web UI のターミナルで操作する(Web UI の場合、su - コマンドで root になってから行う)。

# rw
# passwd root
# kvmd-htpasswd set admin
# ro

※PiKVM は読み取り専用でマウントされているので、rw で読み書き可能にスイッチ、ro で読み取り専用に戻る必要がある。

 アップデート

root ユーザで、下記のコマンドを実行する。

[root@pikvm ~]# pikvm-update

『pikvm-update: command not found』となる場合は、古いリリースのOSを使用してるので、下記のコマンドを実行してOSを更新する。次回からは、pikvm-update の通常の方法で行える。

[root@pikvm ~]# rw
[root@pikvm ~]# pacman -Syy
[root@pikvm ~]# pacman -S pikvm-os-updater
[root@pikvm ~]# pikvm-update

 アップデート(旧)

これは、該当機能が必要な場合のみに推奨される。それ以外の場合は、物理的にディバイスの近くにいて、回復手段として SDカード を作り直せる場合のみに実行する。

PiKVM OS は Arch Linux ARM がベースになっており、pacman コマンドで更新ができる。

# rw
# pacman -Syu
# reboot

pacman は、ロールバックできるように古いバージョンが保存されている。更新し、すべての機能の確認が終わったら、SDカードの容量を圧迫しないように、クリアする。

# rw; rm -rf /var/cache/pacman/pkg; ro

 PiKVM V3 HAT USB-C VCP

PiKVM V3 HAT には、GPIO14,GPIO15 の UART につながった、RJ-45 および USB-C シリアル コンソール ポートがある。有効にするには、UART アクセス ジャンパー を TX, RX 共にショートしておく。また、USB と RJ-45 は共有され、USB が優先される。

USB-C は、Silicon Laboratories の USB to UART Bridge コントローラーが使用されている。従って、USB をつないでシリアルコンソールにつなぐ場合には、事前に Silicon Labs ( https://www.silabs.com/ )から CP210x VCP Drivers をインストールしておく必要がある。

RJ-45 は、Cisco/MikroTik 互換のケーブルを接続する。

設定変更

PiKVM の構成ファイルは /etc/kvmd ディレクトリにほとんどある。編集が推奨されないファイルについては、読み取り専用となっている。

/etc/kvmd/main.yaml は、プラットフォーム構成を定義するため編集しない。設定を上書きするには、 /etc/kvmd/override.yaml を使用する。また、/etc/kvmd/meta.yaml で、ホストに関する情報を設定できる。

すべてのパラメーターの完全なリストは、kvmd -m コマンドで確認・表示できる。

 ホスト名を変える

# rw
# hostnamectl set-hostname yournewhostname.domain
# ro 
# reboot.

Web UI に表示されるホスト名を変える

設定ファイル /etc/kvmd/meta.yaml を修正する。

server:
    host: localhost.localdomain

 PiKVM の認証を無効にする

設定ファイル /etc/kvmd/override.yaml を修正する。

kvmd:
    auth:
        enabled: false

 Web UI の ATX機能を無効にする

設定ファイル /etc/kvmd/override.yaml を修正する。

kvmd:
    atx:
        type: disabled

 Mass Storage Drive を無効にする

設定ファイル /etc/kvmd/override.yaml を修正する。

kvmd:
    msd:
        type: disabled

 Wake-on-LAN (one host)

設定ファイル /etc/kvmd/override.yaml を修正する。

kvmd:
    wol:
        mac: ff:ff:ff:ff:ff:ff
        # ip: 192.0.2.4    # 255.255.255.255 By default
        # port: 9    # By default

 HID - Mouse Jiggler

マウスを微妙に動かすマウスジグラー機能がある。

設定ファイル /etc/kvmd/override.yaml を修正する。機能を有効にするかと起動時にONにするか。

kvmd:
    hid:
        jiggler:
            enabled: true
            active: false

 GPIO - CMD - reboot

PiKVM OS を再起動する、reboot コマンドを実行するボタンを追加する。

設定ファイル /etc/kvmd/override.yaml を修正する。実行するコマンド、ボタンの表示などを設定していく。

   gpio:
       drivers:
           reboot:
               type: cmd
               cmd: [/usr/bin/sudo, reboot]
       scheme:
           reboot_button:
               driver: reboot
               pin: 0
               mode: output
               switch: false
       view:
           table:
               - ["reboot_button|confirm|Reboot PiKVM"]

また、リブートコマンドを sudo で実行するためには、sudo でコマンドを許可しておく必要がある。/etc/sudoers.d/custom_commands に、kvmd ユーザが実行できるように設定を追加する。

kvmd ALL=(ALL) NOPASSWD: /usr/bin/reboot

 HDMI Audio (PiKVM v3 HAT only)

HDMIでオーディオもキャプチャする。PiKVM V3 ディバイスのみのサポートされ、WebRTC モードでブラウザに送信される。

  1. PiKVM v3 HAT の Audio capture ジャンパーを外している場合は戻す。
  2. コンフィグ /boot/config.txt から、dtoverlay=tc358743-audio の行も削除している場合は戻す。
  3. pacman コマンドで、システム・パッケージをアップデートしておく。
  4. janusの設定 /etc/kvmd/janus/janus.plugin.ustreamer.jcfg にオーディオの設定があることを確認する(ドキュメントだと追加しろ、だけど 2022/11/16 のイメージ (kvmd Ver.3.183、streamer Ver.5.34) だとすでに入っていた)。
  5. kvmd-edidconf --set-audio=yes のコマンドを実行して、HDMI EDID でオーディオを有効にする。
[root@pikvm ~]# cat /etc/kvmd/janus/janus.plugin.ustreamer.jcfg
video: {
        sink = "kvmd::ustreamer::h264"
}
audio: {
        device = "hw:0,0"
        tc358743 = "/dev/kvmd-video"
}
[root@pikvm ~]# 
[root@pikvm ~]# kvmd-edidconf 
Manufacturer ID: LNX
Product ID:      0x???? (?????)
Serial number:   0x???????? (??????????)
Monitor name:    PiKVM
Basic audio:     no
[root@pikvm ~]# kvmd-edidconf --set-audio=yes
Manufacturer ID: LNX
Product ID:      0x???? (?????)
Serial number:   0x???????? (??????????)
Monitor name:    PiKVM
Basic audio:     yes
[root@pikvm ~]# 

HDMI Audio が有効になると、WebRTC モードを選んだ際に「Audio volume」のスライダーが表示される。適切な音量に調整する。ブラウザの仕様で再表示させると常に0に戻される。

Tailscale VPN

Tailscale を利用して、外部から内部ネットワーク上の Pi-KVM にアクセスする。

Tailscale は、オープンソースの WireGuard をベースに、公開鍵を管理することなく、P2PのVPN接続を簡単にできるサービス。

 Installation - PiKVM side

Pi-KVM のコンソールで、次のコマンドを実行してセットアップを行う。

[root@pikvm ~]# rw
[root@pikvm ~]# pacman -Syu tailscale-pikvm
:: Synchronizing package databases...
  :中略
:: Proceed with installation? [Y/n] y
:: Retrieving packages...
  :中略
:: Running post-transaction hooks...
[root@pikvm ~]# 
[root@pikvm ~]# systemctl enable --now tailscaled
Created symlink /etc/systemd/system/multi-user.target.wants/tailscaled.service -> /usr/lib/systemd/system/tailscaled.service.
[root@pikvm ~]# 
[root@pikvm ~]# tailscale up
To authenticate, visit:
        https://login.tailscale.com/a/xxxxxxxxxxxx
Success.
[root@pikvm ~]# 

表示されるURLにアクセスして、Tailscale にログインし、Pi-KVM をマシン登録・承認する。完了すれは、 Success が表示され完了する。

成功したら、reboot コマンドを実行して、すべてが正しく機能することを確認する。

Tailscale IP アドレスは、ip addr show tailscale0 コマンドを実行して確認できる。

[kvmd-webterm@pikvm ~]$ ip addr show tailscale0
4: tailscale0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1280 qdisc fq_codel state UNKNOWN group default qlen 500
    link/none 
    inet 100.xxx.xxx.xxx/32 scope global tailscale0
       valid_lft forever preferred_lft forever
    inet6 xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx/128 scope global 
       valid_lft forever preferred_lft forever
    inet6 fe80::xxxx:xxxx:xxxx:xxxx/64 scope link stable-privacy 
       valid_lft forever preferred_lft forever
[root@pikvm ~]# 

 Pi-KVM へアクセス

Tailscale をセットアップしたディバイスで、Tailscale に接続した状態にして、Tailscale IP アドレスで、Pi-KVM に接続する(ブラウザでアクセスする)。

Tailscale IP アドレスは、Tailscale にログインして管理者画面 https://login.tailscale.com/admin でも確認できる。

最終更新時間:2025年02月28日 12時57分33秒 指摘や意見などあればSandBoxのBBSへ。