TL;DR
- The headless problem: Running a refurb bench means stacking PCs, but monitors/keyboards create noise and clutter. You need remote hands.
- PiKVM V4 Plus is a network KVM: remote video capture, USB keyboard/mouse emulation, virtual media mounting, and ATX relay control—all in a $300 device.
- Multiport Switch extender lets one PiKVM control up to four machines simultaneously by flipping an RJ45 port.
- Dell CCTK (Command | Configure) automates BIOS settings from WinPE: set AHCI, enable PXE, disable Secure Boot, configure Wake-on-LAN, tag assets—all without touching F2.
- Unattended imaging = BIOS automation + PXE boot + virtual media mounting. Chain ten machines without hands-on intervention.
- Gotchas matter: AHCI after Windows install = BSOD; Secure Boot changes need a setup password; BitLocker auto-encrypts Win11 and blocks generalize; Deep Sleep disables S5 wake.
Why I Needed This
I’ve been buying government-surplus refurbished machines to flip—mostly surplus OptiPlex machines—and my original setup was a single monitor, keyboard, and mouse swapped between machines. That works for one box. It doesn’t scale to five.
When you’re sitting on a stack of identical machines waiting for imaging, you want to script the repetitive parts: BIOS config, boot order, asset tagging, power management. And you want to do it remotely from your desk, not standing at a bench yanking cables and plugging in USB drives.
Enter the PiKVM. This thing changed my workflow from “babysit each machine through setup” to “launch the whole stack and come back when they’re done.”
The Hardware: PiKVM V4 Plus
A PiKVM V4 Plus is a Raspberry Pi Compute Module 4 with a custom carrier board, squeezed into a metal box the size of a deck of cards. It sits on your LAN and:
- Captures HDMI video up to 1920×1200 @ 60 Hz in lossless quality (the browser gets H.264 streaming)
- Emulates USB keyboard and mouse—the target machine thinks the PiKVM is a physical USB device
- Mounts virtual media: ISO images, IMG files, anything you can serve over HTTP or CIFS
- Drives an ATX relay that shorts the power / reset pins, so you can power-cycle machines remotely
- Runs a web UI (http://pikvm:8080 or via tailscale) with drag-and-drop file upload, native keyboard pass-through, and browser-based power controls
The capture and emulation latency is ~100ms, which is fine for typing commands and waiting for boots. Not gaming-grade, but good enough to watch an installer scroll.
The V4 Plus supports one major peripheral: a multiport Switch extender over RJ45. Instead of physically moving the PiKVM between machines, you leave it in one spot and flip the Switch port (4 ports per Switch module). One box drives four machines at a time.
The Multiport Switch: One PiKVM, Four Machines
The Switch extender is a network-managed module that sits between the PiKVM and the four target PCs. You flip the active port from the web UI, and the HDMI/USB lines switch to whichever machine you’re targeting. No physical movement of cables.
I have a single PiKVM wired to a Switch module, which means I can:
- Boot the first machine into WinPE
- Walk through BIOS config and imaging
- Flip the port, do the same for machine 2
- Repeat four times before I need a second Switch module
In practice, I run them in series—first machine images while I’m setting up the second. The staging time is minimal once the automation is in place.
Scripting the BIOS with Dell CCTK
Dell Command | Configure (CCTK) is a command-line tool that ships on Dell’s firmware ISO or lives in Windows as an installer. The magic: it reads and writes BIOS settings without requiring the F2 menu. You can script it.
I boot each machine into WinPE, mount the CCTK tools, and run a batch script that configures everything in sequence. Here’s the real command syntax:
# Enable AHCI mode (BEFORE Windows is installed)
cctk --EmbSataRaid=Ahci
# Enable UEFI network stack (needed for PXE boot)
cctk --UefiNwStack=Enable
# Disable Secure Boot (requires a setup password to be set first)
cctk --SecureBoot=Disabled --ValSetupPwd=MyPassword123
# Configure Wake-on-LAN
cctk --WakeOnLan=LanOnly
cctk --DeepSleepCtrl=Disable
# Set asset tag (for inventory tracking)
cctk --Asset=LABEL-001
# Auto power-on when AC returns (pairs with a smart plug)
cctk --AcPwrRcvry=On
Each command exits 0 on success and requires a reboot to take effect. Chain them in a script:
@echo off
echo Configuring BIOS...
cctk --EmbSataRaid=Ahci
if errorlevel 1 exit /b 1
cctk --UefiNwStack=Enable
if errorlevel 1 exit /b 1
cctk --WakeOnLan=LanOnly
if errorlevel 1 exit /b 1
cctk --DeepSleepCtrl=Disable
if errorlevel 1 exit /b 1
cctk --Asset=LABEL-001
if errorlevel 1 exit /b 1
cctk --AcPwrRcvry=On
if errorlevel 1 exit /b 1
echo BIOS configuration complete. Rebooting...
shutdown /r /t 30 /c "Rebooting after BIOS config"
The tool won’t work if you haven’t authenticated—Dell CCTK checks whether the user has admin rights and (on newer machines) whether you’ve unlocked the BIOS with a setup password. If Secure Boot is enabled, toggling it requires that password. If you’ve never set one, the tool will fail. Set one first via F2, then you can script changes.
Unattended Imaging
Once the BIOS is configured, I boot into Windows Setup (mounted as PiKVM virtual media) or PXE (if I’ve set up a local DHCP server with an HTTP image). The installer runs headless—no interaction needed except for the obligatory “which partition” clicks.
For Windows 10 / 11 imaging, I use:
- DISM image capture from a reference machine, saved to an HTTP server
- Autounattend.xml that clicks through the installer dialog, applies the image, and runs post-install scripts
Mount the autounattend.xml on the virtual media, and Windows finds it automatically. The whole machine goes from powered-off to logged-in in ~20 minutes, unattended.
Asset Tags and Wake-on-LAN
I use the --Asset parameter to tag each machine with a label tied to my inventory system. Pair that with Wake-on-LAN (WoL), and you can power-on the entire stack from your desk:
# From your LAN, send magic packets to wake up all machines
wakeonlan 00:50:b6:c1:23:45
wakeonlan 00:50:b6:c1:23:46
# etc.
One gotcha: Deep Sleep mode blocks S5 wake. If you set --DeepSleepCtrl=Disable, the machine will wake from power-off on a magic packet. Without that flag, Deep Sleep prevents it. Modern Dells default to Enabled.
Also, configure --AcPwrRcvry=On if you’re using a smart plug to remotely kill and restore power—the machine will boot when AC returns, saving you a WoL packet.
Capturing BIOS State
Before and after refurb, I capture the BIOS settings to track what changed:
cctk --get > bios-before.txt
cctk --get > bios-after.txt
diff bios-before.txt bios-after.txt
This is useful for auditing—you can see exactly which knobs you flipped and catch any Secure Boot or virtualization flags that might’ve been reset by a firmware update.
The Gotchas (Learned the Hard Way)
AHCI after Windows install = blue screen. If you install Windows in RAID mode, then flip to AHCI via CCTK, Windows won’t find the storage controller on reboot. You get a BSOD and a stuck machine. Always set AHCI before install.
UEFI Network Stack checkbox matters. There’s a firmware setting that enables the onboard NIC in the boot menu. Without it enabled via cctk --UefiNwStack=Enable, F12 boot menu won’t show a network option, even if the NIC is present. This tripped me up for three machines.
Secure Boot needs a setup password. CCTK won’t disable Secure Boot unless you’ve already set a setup password. The firmware treats the password as an anti-tamper measure. Set it via F2 once, then cctk --ValSetupPwd=... will work on subsequent calls.
Don’t switch the multiport Switch mid-install. If you flip to another machine while the installer is reading from virtual media, you yank the USB out from under it and break the install. Wait until the machine is booting off its own disk.
Windows 11 auto-encrypts with BitLocker. Modern Win11 enables BitLocker-to-go on fresh installs if the machine has a TPM. If you try to sysprep/generalize the image, BitLocker blocks it. Disable first: manage-bde -off C: then reboot, then sysprep. It takes a few minutes to decrypt.
USB keyboard emulation latency on POST screens. Some machines pause on a “keyboard not found” message if the USB HID enum happens after the keyboard check. The PiKVM usually enumerates in time, but if you hit the pause screen, just click the mouse to dismiss it or reboot back into firmware.
What It Buys You
I’ve gone from sitting at a bench, imaging one machine per 45 minutes (including BIOS tweaks and restarts), to launching a batch of four and walking away. Imaging time is bottlenecked by disk I/O and network, not by my patience.
The setup cost was a good HDMI cable, a short USB 3 cable from the PiKVM to the bench, and a Wi-Fi smart plug for remote power-kill on unresponsive machines. The PiKVM and multiport Switch are the big-ticket items, but they pay for themselves in time saved after five machines.
If you’re sitting on a stack of refurbished PCs—whether for resale, lab builds, or just keeping them running—this setup scales way better than keyboard-and-monitor swapping. One remote terminal, four machines at a time, and BIOS automation that takes the thinking out of the repetitive parts.