一般的な KVM over IP というのはサーバーやワークステーションで使用する製品であるため、だいたい10万円以上で高価なものです。
kickstarterにて約2万円の投資をすることで、KVM over IPを実装した製品を入手が可能です。
Raspberry Pi 4 の上に実装させるボードであるため、最終的に約3~4万円くらいの初期投資が必要となります。
なお、このボードは$145、送料$30です。
仮にAmazonで販売されるようになったら、同価格帯か少し安いかもしれません。
★そもそも、KVM over IP というのは・・・
大まかに説明すると、ネットワークを通じてPCの画面を表示させてマウス操作やキーボード操作を可能とするものです。
大手メーカーのサーバー (FとかNとか)だと、この機能が搭載されていることがあり、一般的にオプション(有償)扱いで利用可能です。
SUPERMICRO のマザーボードだとモノによって同等の機能が搭載されていることもあります。搭載されているものだったら無償利用が出来たと思います。
通常はリモートデスクトップ(RDP、VNC、Chrome リモート デスクトップなど)の方がアクセスしやすいですが、OS 起動していないと使用出来ないものです。
なので、OS ハングアップして応答が無い状態だと全く使用できない状態になります。
この製品は PC の BIOS 画面まで表示可能で、操作も出来るものになります。
言うなれば、表示するPCにOSが入っていなくても操作可能で、リモート通信のみでOSインストールの操作が可能になります。
ただし、ローカルネットワークに限ります。
一応、VPN(Tailscale VPN)を使用すれば外のインターネットでも利用可能っぽいです。
★主な使用例について・・・
個人利用では、自宅サーバーや自作NASなどに繋いで利用すると緊急時に不幸にならずに済むかもしれません。
録画用PCなどを運用していたり、普段は触らない場所などに配置しているPCで使用すると便利なのかもしれません。その場合のPCはディスプレイを除去することが可能になりそうです。
遠くにある実家にあるPCに設置して、必要であれば物理的に電源入れて操作する・・・なんてことも出来ると思います。(VPN必須)
セキュリティ上の問題をクリア出来るのであれば、主にリモート作業においてオフィスや作業場での使用も便利かもしれません。(VPN必須)
ゲーム機を接続して映すことは可能ですが、映像の遅延が酷くて使えないそうです。
テキストを読むだけのゲームだったら問題無いかもしれません。
Raspberry Pi と Linux を使用したこと無い人は難しいと思う
★ハードウェア準備
Raspberry Pi 4 と MicroSDHCカードは事前に準備しておく必要がある。
そもそも使用する OS について勘違いしていた。
Raspberry Pi を使用するので OS は Raspbian か、派生OS を使用するのだと思いこんでいました。
実際は、カスタマイズされた Arch Linux を使用するみたい。
頑張ればUSBブートによる USB SSD を使用可能だが、公式でそのような案内や情報は出していないので、何かしらのトラブルがあったら完全に自己解決することになる。
当初は USB SSD で運用できたらと思っていましたが、通常の使用方法で運用していくことにしました。
製品の開封
箱表
箱裏
製品
側面1
側面2
裏面
ATX(オプション)ボード、USB C Bridge(Pi と kvmを繋ぐ大事なもの)
ATX用ケーブルx2、フラットケーブルx2
セット品のメタルケース一式
付属のファン
公式の下記を参考にしながらメタルケースへ組み込む。
Piをメタルケースに設置する。(安全のためにMicroSDは外しておきます)
PiKVMを上から入れる。フラットケーブルはボードの隙間に通す。
OLEDはPiKVMに取り付けておく。
ファンを接続します。
USB C Bridgeを接続します。
この接続を忘れるとマウス・キーボードが遠隔で使用できません。
フタを締めて、付属のネジを締めて出来上がり。(MicroSDを差し込むことも忘れず!)
★OS準備
下記がPiKVMハンドブックとなっているので事前に読み込んでおく。(注:全部英語)
続いて、下記に従ってイメージファイルをダウンロードする。
https://docs.pikvm.org/flashing_os/
今回準備するのは PiKVM v3 HAT (Raspberry Pi 4)
Raspberry Pi でイメージファイル書き込むソフトウェアである RPi Imager を使用します。
Use customを選択して、ダウンロードしたイメージファイルを指定します。
書き込み先のストレージは MicroSDHCカード。
上記画像ではUSB SSDを選択しているが、後日MicroSDHCカードで書き込み直している。
MicroSDHCカード を Raspberry Pi へ差し込んで、LANケーブルを挿している状態で電源を入れる。
なお、Wifi設定は可能ですが、オプション扱いで推奨していないようです。
続いて、下記に沿って進めます。
https://docs.pikvm.org/first_steps/
IPアドレスはDHCPから割り振られたものを使用します。
確認方法は色々あるので、お好きな方法で確認すればよいと思います。
SSH接続はIPアドレスは使用せずホスト名でログインすると楽かと思います。
ホスト名:pikvm
ユーザー名・パスワード:上記の手順(first_steps)に記載の通り
Webアクセスの場合下記でログインします。
https://pikvm/
ユーザー名・パスワード:上記の手順(first_steps)に記載の通り
SSH接続後、下記の操作を行いました。
・マシン情報の表示
あれ?Raspbianのコマンド(aptとか)が使えないよ?っと焦り、下記コマンドを実行したら、Arch Linuxだったという事実がここで初めて判明したので、色々と構想していたことが崩壊しました。
# uname -a
Linux pikvm 5.10.52-12-ARCH #1 SMP Wed Sep 1 05:47:56 MSK 2021 armv7l GNU/Linux
・システムの更新
定期的に行わないとならないようです。
システムはリードオンリーになっているので、リードライトに変更、更新、リードオンリーに戻す操作を行います。
# rw
# pacman -Syu
:: Synchronizing package databases...
core 224.9 KiB 129 KiB/s 00:02 [######################] 100%
extra 2.3 MiB 1763 KiB/s 00:01 [######################] 100%
community 5.5 MiB 2.89 MiB/s 00:02 [######################] 100%
alarm 102.5 KiB 380 KiB/s 00:00 [######################] 100%
aur is up to date
pikvm 37.8 KiB 25.2 KiB/s 00:02 [######################] 100%
:: Starting full system upgrade...
resolving dependencies...
looking for conflicting packages...
Packages (26) ca-certificates-mozilla-3.72-1 gawk-5.1.1-1 gc-8.2.0-2
glib2-2.70.1-1 gupnp-1:1.4.0-1 gupnp-igd-1.2.0-2
harfbuzz-3.1.0-1 iana-etc-20211025-1 iproute2-5.15.0-1
janus-gateway-pikvm-0.11.5-2 kvmd-3.44-1 kvmd-oled-0.8-1
kvmd-platform-v3-hdmi-rpi4-3.44-1 libcap-2.60-1
libgpg-error-1.43-1 libnghttp2-1.46.0-1 libwebsockets-4.3.0-1
ncurses-6.3-1 nss-3.72-1 python-hidapi-0.11.0.2-1
python-idna-3.3-1 sudo-1.9.8.p2-1.1 ttyd-1.6.3.107-2
tzdata-2021e-1 unzip-6.0-15 v4l-utils-1.22.1-1
Total Download Size: 14.11 MiB
Total Installed Size: 63.45 MiB
Net Upgrade Size: 0.79 MiB
:: Proceed with installation? [Y/n]
:: Retrieving packages...
glib2-2.70.1-1-a... 2.4 MiB 1144 KiB/s 00:02 [######################] 100%
sudo-1.9.8.p2-1.... 1447.9 KiB 2.62 MiB/s 00:01 [######################] 100%
nss-3.72-1-armv7h 1260.7 KiB 2.28 MiB/s 00:01 [######################] 100%
v4l-utils-1.22.1... 1104.1 KiB 2.03 MiB/s 00:01 [######################] 100%
gawk-5.1.1-1-armv7h 1087.9 KiB 2.00 MiB/s 00:01 [######################] 100%
ncurses-6.3-1-armv7h 1075.3 KiB 1991 KiB/s 00:01 [######################] 100%
janus-gateway-pi... 1017.0 KiB 591 KiB/s 00:02 [######################] 100%
iproute2-5.15.0-... 912.3 KiB 686 KiB/s 00:01 [######################] 100%
harfbuzz-3.1.0-1... 819.0 KiB 1545 KiB/s 00:01 [######################] 100%
kvmd-3.44-1-any 730.7 KiB 585 KiB/s 00:01 [######################] 100%
libwebsockets-4.... 382.1 KiB 484 KiB/s 00:01 [######################] 100%
iana-etc-2021102... 375.1 KiB 1340 KiB/s 00:00 [######################] 100%
tzdata-2021e-1-a... 367.9 KiB 344 KiB/s 00:01 [######################] 100%
ca-certificates-... 329.2 KiB 1135 KiB/s 00:00 [######################] 100%
gc-8.2.0-2-armv7h 212.5 KiB 787 KiB/s 00:00 [######################] 100%
libgpg-error-1.4... 201.5 KiB 746 KiB/s 00:00 [######################] 100%
gupnp-1:1.4.0-1-... 159.1 KiB 589 KiB/s 00:00 [######################] 100%
ttyd-1.6.3.107-2... 125.8 KiB 128 KiB/s 00:01 [######################] 100%
unzip-6.0-15-armv7h 120.4 KiB 231 KiB/s 00:01 [######################] 100%
libnghttp2-1.46.... 77.9 KiB 288 KiB/s 00:00 [######################] 100%
libcap-2.60-1-armv7h 72.5 KiB 269 KiB/s 00:00 [######################] 100%
python-idna-3.3-... 67.6 KiB 250 KiB/s 00:00 [######################] 100%
python-hidapi-0.... 33.4 KiB 124 KiB/s 00:00 [######################] 100%
gupnp-igd-1.2.0-... 25.6 KiB 94.8 KiB/s 00:00 [######################] 100%
kvmd-oled-0.8-1-any 6.2 KiB 23.7 KiB/s 00:00 [######################] 100%
kvmd-platform-v3... 5.7 KiB 22.0 KiB/s 00:00 [######################] 100%
Total (26/26) 14.1 MiB 627 KiB/s 00:23 [######################] 100%
(26/26) checking keys in keyring [######################] 100%
(26/26) checking package integrity [######################] 100%
(26/26) loading package files [######################] 100%
(26/26) checking for file conflicts [######################] 100%
(26/26) checking available disk space [######################] 100%
:: Processing package changes...
( 1/26) upgrading tzdata [######################] 100%
( 2/26) upgrading iana-etc [######################] 100%
( 3/26) upgrading ncurses [######################] 100%
( 4/26) upgrading libcap [######################] 100%
( 5/26) upgrading libgpg-error [######################] 100%
( 6/26) upgrading ca-certificates-mozilla [######################] 100%
( 7/26) upgrading gawk [######################] 100%
( 8/26) upgrading gc [######################] 100%
( 9/26) upgrading glib2 [######################] 100%
(10/26) upgrading gupnp [######################] 100%
(11/26) upgrading gupnp-igd [######################] 100%
(12/26) upgrading harfbuzz [######################] 100%
(13/26) upgrading libnghttp2 [######################] 100%
(14/26) upgrading iproute2 [######################] 100%
(15/26) upgrading libwebsockets [######################] 100%
(16/26) upgrading nss [######################] 100%
(17/26) upgrading janus-gateway-pikvm [######################] 100%
(18/26) upgrading python-hidapi [######################] 100%
(19/26) upgrading v4l-utils [######################] 100%
(20/26) upgrading sudo [######################] 100%
(21/26) upgrading python-idna [######################] 100%
(22/26) upgrading kvmd [######################] 100%
==> Ensuring KVMD users and groups ...
chown: changing ownership of '/var/lib/kvmd/msd': Read-only file system
==> Patching configs ...
(23/26) upgrading kvmd-oled [######################] 100%
(24/26) upgrading kvmd-platform-v3-hdmi-rpi4 [######################] 100%
(25/26) upgrading ttyd [######################] 100%
(26/26) upgrading unzip [######################] 100%
:: Running post-transaction hooks...
(1/7) Creating system user accounts...
(2/7) Reloading system manager configuration...
(3/7) Creating temporary files...
(4/7) Reloading device manager configuration...
(5/7) Arming ConditionNeedsUpdate...
(6/7) Rebuilding certificate stores...
(7/7) Updating the info directory file...
# pacman -Sc
# reboot
・タイムゾーン修正、時刻調整
デフォルトのタイムゾーンはモスクワになっている。
これがどのように影響するかわからないが、日本へ変更する。
ついでに、時刻をネットワーク更新で調整する。
# rw
# pacman -S ntp
resolving dependencies...
looking for conflicting packages...
Packages (1) ntp-4.2.8.p15-1
Total Download Size: 1.69 MiB
Total Installed Size: 4.11 MiB
:: Proceed with installation? [Y/n]
:: Retrieving packages...
ntp-4.2.8.p15-1-... 1729.9 KiB 700 KiB/s 00:02 [######################] 100%
(1/1) checking keys in keyring [######################] 100%
(1/1) checking package integrity [######################] 100%
(1/1) loading package files [######################] 100%
(1/1) checking for file conflicts [######################] 100%
(1/1) checking available disk space [######################] 100%
:: Processing package changes...
(1/1) installing ntp [######################] 100%
:: Running post-transaction hooks...
(1/3) Creating system user accounts...
Creating group ntp with gid 87.
Creating user ntp (Network Time Protocol) with uid 87 and gid 87.
(2/3) Reloading system manager configuration...
(3/3) Arming ConditionNeedsUpdate...
# ntpd -gq
# date
Mon Nov 8 08:00:16 MSK 2021
# timedatectl
Local time: Mon 2021-11-08 07:56:24 MSK
Universal time: Mon 2021-11-08 04:56:24 UTC
RTC time: n/a
Time zone: Europe/Moscow (MSK, +0300)
System clock synchronized: yes
NTP service: active
RTC in local TZ: no
# timedatectl list-timezones | grep -i tokyo
Asia/Tokyo
# timedatectl set-timezone Asia/Tokyo
# date
Mon Nov 8 14:01:06 JST 2021
# timedatectl set-ntp true
# timedatectl
Local time: Mon 2021-11-08 14:02:35 JST
Universal time: Mon 2021-11-08 05:02:35 UTC
RTC time: n/a
Time zone: Asia/Tokyo (JST, +0900)
System clock synchronized: yes
NTP service: active
RTC in local TZ: no
# ro
・パスワードの変更
first_stepでも記載されていますが、パスワードを変更しましょう!!!
# rw
# passwd root
# kvmd-htpasswd set admin
# ro
・OLEDディスプレイやファンの有効化
# rw
# systemctl enable --now kvmd-oled kvmd-oled-reboot kvmd-oled-shutdown
Created symlink /etc/systemd/system/multi-user.target.wants/kvmd-oled.service -> /usr/lib/systemd/system/kvmd-oled.service.
Created symlink /etc/systemd/system/reboot.target.wants/kvmd-oled-reboot.service -> /usr/lib/systemd/system/kvmd-oled-reboot.service.
Created symlink /etc/systemd/system/shutdown.target.wants/kvmd-oled-shutdown.service -> /usr/lib/systemd/system/kvmd-oled-shutdown.service.
# systemctl enable --now kvmd-fan
Created symlink /etc/systemd/system/multi-user.target.wants/kvmd-fan.service -> /usr/lib/systemd/system/kvmd-fan.service.
# ro
この設定をすると、常時稼働していたファンが停止します。
おそらく一定温度に達するとファンが回るようになるはず・・・。
一定温度ってどこで設定されてるんだろう?
試行錯誤で色々やってみます。
事前に用意しておくもの。
・PiKVMとPC間で接続するHDMIケーブル
・PiKVMとPC間で接続するUSB A-オス C-オス ケーブル(充電のみではなくデータ線も必要)
Windows10 の PC に接続して表示させてみた。
画面右上にある4つのアイコンがそれぞれ緑色になっていれば正常にデバイスが接続出来ているようです。
マウスをゴリゴリ動かしてWEB閲覧したりなどしましたが、ちょっと反応遅いかな。
VPN接続しながらのWindowsのリモートデスクトップで接続したくらい、もうちょっとくらい反応遅いかも。
ローカルネットワーク内でその速度だと、外からの接続はもっと重いかもしれない。
デフォルト設定から色々調整してみた。
最終的に下記設定になった。
修正したのは4つ
- JPEG quality
- H.264. kbps
- Max FPS
- H.264 / WebRTC
MJPEGで配信するかH.264で配信するか選べるけれど、ラズパイがH.264のハードウェアエンコード対応しているので選ばないという理由はない。
それに合わせてデフォルト値より低く設定した。FPSはそのままかな。
なお、FPSは60まで設定出来るが、CPU使用率が1コア90%到達する。
デフォルト設定でのCPU使用率は1コア45%くらい。
設定したものだと1コア40%前後くらいに落ち着く。
Nintendo Switchに繋いでみました。
下記はスクリーンショット機能を使いました。
画質が少し粗いかな・・・。
ファミコン世代くらいのゲームであれば問題なく出来ました。
流石に音は再生されないけれど、若干のディレイがあるくらいです。
接続機器にUSBハブがあるとマウスやキーボードは認識されないようです。
オプションのATX(リモート電源操作等)は後日、時間が取れ次第行う予定です。
★2022-01-10追記
自作NASに繋げていてもコンソール画面が表示されなかった。
でも、改めて使用すると表示されるようになっていた。
変更点があるとしたら下記が思いつく。
・Fedora 33 を使用していたが 35 へバージョンアップした。
・HDMIケーブルを下記に変更した。(HDMIバージョンの問題?)
多分どちらかの問題が解消されたから表示されるようになったのかもしれない。
なお、PCとの接続は DVI - HDMI変換ケーブルを使用しています。
-
購入金額
20,000円
-
購入日
2021年09月22日
-
購入場所
kickstarter
ZIGSOWにログインするとコメントやこのアイテムを持っているユーザー全員に質問できます。