

Virtual KVM
- Size
- 18.5 × 35.8 mm
- Copper layers
- 2
- Thickness
- 1 mm
- Parts
- 35
- Nets
- 43
- Pads
- 136
- Tracks, vias
- 321, 32
- Pours
- 3
- Routed
- Yes
- KiCad
- KiCad 5 (file 20171130)
- Created
- 8 Nov 2023
- Updated
- 15 Jun 2026
Overview
Vkm is an open-source printed circuit board by daniel-starke, from the daniel-starke/vkvm repository on GitHub. It is a 2-layer board of 18.5 × 35.8 mm with 35 parts on 43 nets, routed with 321 tracks and 32 vias.
It is built around the XC6206P332MR and B5819W SL. Its parts include 11 resistors, 9 capacitors, 4 connectors, 3 ICs and 3 diodes. It belongs with the STM32 boards of this library.
Main components
2XC6206P332MR
SOT-23-40℃~+85℃@(Ta) 1 1uA 200mA 3.3V 6V Fixed Over Current Protection Positive SOT-23-3L Voltage Regulators - Linear, Low Drop Out (LDO) Regulators ROHSTorex SemiconductorVoltage Regulators - Linear, Low Drop Out (LDO) RegulatorsB5819W SL
SOD-1231A 40V 600mV@1A 9A Independent SOD-123 Schottky Diodes ROHSJiangsu Changjing Electronics Technology (CJ)Schottky Diodes
README
README.mdvkvm
Virtual Keyboard Video Mouse equipment.
This project consists of a software part which runs on the host (controller) computer and a hardware
unit (periphery). The periphery is connected via HDMI and USB to the USB port at the controller. The
controller uses this connection to control the connected periphery computer. Control works similar to
the control of a system running within a virtual machine.
The vkvm ensures a non-intrusive connection to the periphery device. Therefore, no special drivers or
software is needed at the periphery. This grants maximum compatibility and high security not found in
VPN or SSH like solutions and works also before OS start-up (e.g. remote BIOS control).
+------------+ +----------------------+ +---------------+
| | <--- | Video Capture Device | <--- | |
| Controller | +----------------------+ | Remote Device |
| | <--> | VKVM Periphery | <--> | |
+------------+ +----------------------+ +---------------+Features
- control application support for Windows and Linux
- USB UVC capture device compatible at controller
- USB HID boot keyboard/mouse compatible at periphery
- easy setup and use via plug'n'play
- cheap, small, low latency and portable design
- supports direct video output capture of periphery or web cam based operation
- multiple hardware variants are available to meet different hardware assembly skills and usage requirements
- remote device access before OS startup (e.g. enter BitLocker password or set BIOS settings)
Usage
Use an available display to USB (not the other way around) converter to capture the video output
of a periphery machine at the controller. See chapter example for some possible variants. Connect
the VKVM hardware device to controller and periphery to control the keyboard and mouse of the
periphery via the controller. The vkvm control application enables you to perform the described hardware
connection on software level.
Here you choose the connected capture source and serial interface which connects the vkvm hardware.
Click into the video frame to start controlling the remote device. Hit the right SHIFT and right CTRL key
to return control. Alternatively, press CTRL-K without a connected capture source for blind control.
This can be useful when controlling the periphery device with a connected physical monitor.
To improve periphery operation, multiple ways of inputting data from controller (paste text) are provided.
Each type exists due to different compatibilities, either by applications or on OS level.
Most of the user interface is made up of icons to avoid language barriers.
Status LED of the VKVM periphery:
| LED | State | Meaning |
|---|---|---|
| always off | No remote device connected. | |
| blinking | Power from remote device but not USB connection. | |
| always on | Fully connected to remote device. |
Documentation
Building
The following dependencies are given.
Controller:
- C99
- C++11
- FLTK 1.3.4-1
- nanosvg (modified source included)
- OpenGL
- DirectShow (only on Windows)
- libv4l2 (only on Linux)
- lv4lconvert (only on Linux)
Periphery:
- C18
- C++14
- PlatformIO
- STM32CubeDuino
- HidDescCTC
Choose the appropriate Makefile to match your target system configuration.
Windows with MinGW and GCC:
make -f Makefile.mingwLinux with GCC:
make -f Makefile.linuxThis creates two applications:
vkvm
The actual VKVM control application.keyTest
Development tool to create the OS key code to USB key code mapping.
To build and upload the firmware (depending on the target hardware):
pio run -e arduino -t upload
pio run -e vkm-b-controller -t upload
pio run -e vkm-b-periphery -t uploadNote that VKVM_LED_PWM for vkm-b-periphery can be changed in platformio.ini to any value
between 0 and 65535 to adjust the brightness of the status LED.
Also note that it is possible to set upload_protocol = dfu for STM32CubeDuino in platformio.ini
allowing first time programming via USB.
Open Points
- command-line operations for instant video/serial connect and full screen switch
- automatically reconnect last serial/video device if it re-appears and was not disconnected by user
- alternative serial/video implementation using libusb/libuvc
- force aspect ratio option in aspect ratio button
- audio support
- configurable hot keys
- media key support (needs changes in the periphery firmware)
- fast store and load option for capture source settings
- option for file exchange via USB MTP (media transfer protocol)
- option for shared network access via USB ECM (Ethernet control model)
Limitation
- keyboard and mouse input may not work with the Arduino firmware variant due to legacy BIOS incompatibilities with the CDC interface included by Arduino
- no OCR support (out of scope and can be done with existing screen reader applications)
- root permissions are required for the vkvm application on Linux
Debugging
Choose the appropriate Makefile to match your target system configuration.
Windows with MinGW and GCC:
make -f Makefile.mingw DEBUG=1Linux with GCC:
make -f Makefile.linux DEBUG=1The macro VKVM_TRACE can be defined to create the serial trace file vkvm.log
during runtime. The GAWK script script/prot-dec.awk is able to decode this file into
a human readable format. The macro can be enabled by passing TRACE=1 to Gnumake.
To debug the periphery firmware run:
pio debug -e vkm-b-periphery
pio run -e vkm-b-periphery -t upload -t nobuild
pio debug -e vkm-b-periphery --interface=gdb -- -x .pioinitThe HID reports on the periphery device can be traced using Wireshark (see description).
In Linux it is also possible to read and analyze the HID reports with the following command:
cat /sys/kernel/debug/<dev>/eventsThis shows how the Linux HID driver interprets the HID reports.
License
See LICENSE.
Contributions
No content contributions are accepted. Please file a bug report or feature request instead.
This decision was made in consideration of the used license.
Parts
35| Qty | Value | Footprint | References |
|---|---|---|---|
| 7 | 100n | Capacitor_SMD:C_0603_1608Metric | C2, C3, C5, C6, C8, C9, C10 |
| 4 | 10k | Resistor_SMD:R_0603_1608Metric | R3, R4, R7, R8 |
| 2 | 10u | Capacitor_SMD:C_0603_1608Metric | C7, C11 |
| 2 | 2.2k | Resistor_SMD:R_0603_1608Metric | R5, R6 |
| 2 | 33k | Resistor_SMD:R_0603_1608Metric | R9, R10 |
| 2 | 5.1k | Resistor_SMD:R_0603_1608Metric | R1, R2 |
| 2 | B5819WSL | Diode_SMD:D_SOD-123 | D1, D2 |
| 2 | STM32F042F6Px | Package_SO:TSSOP-20_4.4x6.5mm_P0.65mm | U1, U2 |
| 1 | 3V3 | TestPoint:TestPoint_Pad_D1.0mm | TP6 |
| 1 | 5V | TestPoint:TestPoint_Pad_D1.0mm | TP5 |
| 1 | 820R | Resistor_SMD:R_0603_1608Metric | R11 |
| 1 | Conn_01x03 | vkm-c:PinHeader_1x03_P2.54mm_Horizontal_Edge | J3 |
| 1 | Conn_01x09 | Connector_PinHeader_2.54mm:PinHeader_1x09_P2.54mm_Vertical | J2 |
| 1 | GND | TestPoint:TestPoint_Pad_D1.0mm | TP7 |
| 1 | GREEN | LED_SMD:LED_0603_1608Metric | D3 |
| 1 | USB1 | TestPoint:TestPoint_Pad_D1.0mm | TP3 |
| 1 | USB2 | TestPoint:TestPoint_Pad_D1.0mm | TP4 |
| 1 | USB_A | Connector_USB:USB_A_TH_AM90 | J4 |
| 1 | USB_C_Receptacle_USB2.0 | Connector_USB:USB_C_HRO_TYPE_C_31_M_12 | J1 |
| 1 | XC6206P332MR | Package_TO_SOT_SMD:SOT-23 | U3 |
More from daniel-starke/vkvm
2- 2 layers20 × 50 mm

- 2 layers18.3 × 36.1 mm

Similar boards
- 4 layers18 × 51 mm

- 2 layers65.4 × 133.6 mm

BSidesTLV2025GloveBadge
bsidestlv/bsidestlv-2025-badge
To solve the challenge you will need to discover a series of flags, hidden inside the badge. Each one will help you unlock the next step in the challenge, to finally reveal the ultimate secret the badge holds.
35 parts13MIT - 4 layers80 × 50.5 mm

- 4 layers44 × 44 mm

- 2 layers88 × 75 mm

Rubber drive hard
PhysicsDptAngers/GomuGomuNoDrive
This repository provides open-source hardware designs, physical bench measurement datasets, numerical simulation routines, and real-time DSP emulations for the Rubber Zener clipping topology.
62 parts1 - 2 layers37.3 × 31.8 mm

- 4 layers30 × 28 mm

Rebot ctrl
Matheus3007/pcb-lab
PCBs designed entirely as code: Python circuits + KiCad 10 + Freerouting, checked, rendered and ordered assembled from JLCPCB
58 partsMIT - 2 layers38.3 × 26.8 mm

AeroBlinker
toyJig/AeroBlinker
Custom PCB w/ KiCAD that reads Receiver Signals to control light flash patterns - Aeronautics Team
42 parts
Questions
How big is the Vkm PCB?
It measures 18.5 × 35.8 mm and has 2 copper layers, 1 mm thick.
What parts does the Vkm use?
35 parts, built around the XC6206P332MR and B5819W SL. The full list of its parts is on this page, with links to each part's symbol and footprint where PCBKit's library has them.
Where can I download the Vkm KiCad files?
From the daniel-starke/vkvm repository on GitHub, at the commit this page was made from: the board is hw/vkm-c/vkm.kicad_pcb. PCBKit opens the board in the browser, with nothing to install.
Can I use the Vkm design in my own project?
Its repository states no licence, so its author keeps all rights: ask daniel-starke before reusing the design.