Pikvm-studio Setup Detail
Documentation and system management guide for the dedicated studio KVM-over-IP appliance (pikvm-studio).
- Repository: link
- Hardware Model: PiKVM V4 Plus (Raspberry Pi Compute Module 4 Rev 1.1)
- Target Workstation:
bmo95(Linux Audio / DAW Workstation)
1. Video Architecture: 1080p @ 60.000 Hz Pass-Through
PiKVM V4 Plus features a built-in HDMI hardware pass-through port (OUT2) and a TC358743 HDMI-to-CSI capture bridge. By default, PiKVM V4 advertises a 1920x1200 EDID. When connected to a standard 1080p physical display, the image would be cropped from the bottom.
Applied Video Optimizations
- 1080p EDID Preset (No 1920x1200 Mode):
- Imported and applied the
v4plus.no-1920x1200EDID preset to/etc/kvmd/tc358743-edid.hexviakvmd-edidconf. - Ensures the target host (
bmo95) negotiates uncropped 1920x1080 @ 60.000 Hz for both remote web streaming and the physical monitor onOUT2.
- Imported and applied the
- GPU Clock & H.264 60 FPS Boost:
- Added
gpu_freq=700to/boot/config.txtto provide sufficient GPU clock headroom for full 60fps hardware H.264 encoding. - Configured KVMD streamer overrides in
/etc/kvmd/override.yaml:kvmd: streamer: h264_boost: true desired_fps: default: 60
- Added
Physical Wiring
- HDMI Input (Rear Bottom Right): Connected to
bmo95AMD Radeon GPU HDMI output. - HDMI Output 2 (
OUT2): Connected to the local physical studio monitor (pass-through). - USB-C OTG (Rear): Connected to
bmo95USB port for keyboard/mouse HID emulation and mass storage drive. - RJ45 Ethernet (Front): Connected to local studio LAN.
2. Configuration Management: Chezmoi
Configuration files across /etc (ext4) and /boot (FAT32) are tracked in Git using Chezmoi.
Why Chezmoi on PiKVM?
- FAT32
/bootCompatibility: The Raspberry Pi bootloader partition (/boot) uses a VFAT filesystem which does not support Linux symlinks. Chezmoi uses a Source $\rightarrow$ Target Copy Model, rendering physical files without symlink errors. - Security & Ownership Compliance: Security-sensitive utilities (such as
sudoand PAM) require configuration files to be owned byroot:rootwith strict permissions (e.g.0440). Chezmoi preserves exact permissions and system UIDs rather than pointing symlinks to user-owned directories. - Drift Detection:
chezmoi diffprovides instant comparison between Git state and the live appliance filesystem.
Chezmoi Configuration
Located in /home/luke/.config/chezmoi/chezmoi.yaml:
destDir: "/"
sourceDir: "/home/luke/git/pikvm_studio"
Git History Structure
The repository at https://git.drheck.dev/luke/pikvm_studio maintains a 2-stage commit baseline:
feat(pikvm): baseline vanilla system configuration— Stock OS overrides, default 1920x1200 EDID, and stock/boot/config.txt.feat(video): configure 1080p60 pass-through, H.264 boost, and GPU frequency— All active studio customizations.
Running git diff HEAD~1 clearly documents all modifications relative to factory OS defaults.
3. PiKVM Read-Only Lifecycle & Chezmoi Workflow
PiKVM OS operates with read-only root (/) and boot (/boot) partitions to protect flash storage from corruption. When managing configurations with Chezmoi, follow these standard workflows:
A. Checking for Configuration Drift
To compare the Git repository against the live system:
chezmoi diff
B. Editing and Applying Changes
To edit a tracked file and deploy it to the live system:
# 1. Remount filesystem as read-write
sudo rw
# 2. Edit the file in Chezmoi
chezmoi edit /etc/kvmd/override.yaml
# 3. Preview changes
chezmoi diff
# 4. Apply changes to disk
sudo chezmoi apply
# 5. Commit and push to Gitea
cd ~/git/pikvm_studio
git add .
git commit -S -m "feat: description of change"
gpush pikvm_studio
# 6. Return filesystem to read-only
sudo ro
C. Ingesting Modifications Made Directly on Disk
If a file was modified outside Chezmoi (e.g. via kvmd-override or kvmd-edidconf):
sudo rw
chezmoi re-add /etc/kvmd/override.yaml
chezmoi re-add /etc/kvmd/tc358743-edid.hex
cd ~/git/pikvm_studio
git add .
git commit -S -m "feat: update kvmd settings"
gpush pikvm_studio
sudo ro
4. SSH & GPG Key Management
- Terminal Pinentry:
~/.gnupg/gpg-agent.confis configured withpinentry-program /usr/bin/pinentry-cursesto ensure GPG password prompts display cleanly over headless SSH sessions. - Password Store: Gitea API tokens are managed via
passand pushed using~/bin/gpush pass.