Skip to the content
2 layers18.5 × 35.8 mmVkm, the printed circuit board in 3D

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

2

README

README.md

vkvm

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).

txt
+------------+       +----------------------+      +---------------+
|            |  <--- | 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:

LEDStateMeaning
always offNo remote device connected.
LED0blinkingPower from remote device but not USB connection.
LED1always onFully connected to remote device.

Documentation

Building

Linux GCC Build Status Windows Visual Studio Build Status

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:

Choose the appropriate Makefile to match your target system configuration.
Windows with MinGW and GCC:

sh
make -f Makefile.mingw

Linux with GCC:

sh
make -f Makefile.linux

This 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):

sh
pio run -e arduino -t upload
pio run -e vkm-b-controller -t upload
pio run -e vkm-b-periphery -t upload

Note 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:

sh
make -f Makefile.mingw DEBUG=1

Linux with GCC:

sh
make -f Makefile.linux DEBUG=1

The 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:

sh
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 .pioinit

The 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:

sh
cat /sys/kernel/debug/<dev>/events

This 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
QtyValueFootprintReferences
7100nCapacitor_SMD:C_0603_1608MetricC2, C3, C5, C6, C8, C9, C10
410kResistor_SMD:R_0603_1608MetricR3, R4, R7, R8
210uCapacitor_SMD:C_0603_1608MetricC7, C11
22.2kResistor_SMD:R_0603_1608MetricR5, R6
233kResistor_SMD:R_0603_1608MetricR9, R10
25.1kResistor_SMD:R_0603_1608MetricR1, R2
2B5819WSLDiode_SMD:D_SOD-123D1, D2
2STM32F042F6PxPackage_SO:TSSOP-20_4.4x6.5mm_P0.65mmU1, U2
13V3TestPoint:TestPoint_Pad_D1.0mmTP6
15VTestPoint:TestPoint_Pad_D1.0mmTP5
1820RResistor_SMD:R_0603_1608MetricR11
1Conn_01x03vkm-c:PinHeader_1x03_P2.54mm_Horizontal_EdgeJ3
1Conn_01x09Connector_PinHeader_2.54mm:PinHeader_1x09_P2.54mm_VerticalJ2
1GNDTestPoint:TestPoint_Pad_D1.0mmTP7
1GREENLED_SMD:LED_0603_1608MetricD3
1USB1TestPoint:TestPoint_Pad_D1.0mmTP3
1USB2TestPoint:TestPoint_Pad_D1.0mmTP4
1USB_AConnector_USB:USB_A_TH_AM90J4
1USB_C_Receptacle_USB2.0Connector_USB:USB_C_HRO_TYPE_C_31_M_12J1
1XC6206P332MRPackage_TO_SOT_SMD:SOT-23U3

More from daniel-starke/vkvm

2
  • 2 layers20 × 50 mmVkm, the printed circuit board in 3D

    Vkm

    daniel-starke/vkvm

    Virtual KVM

    32 parts3
  • 2 layers18.3 × 36.1 mmSer, the printed circuit board in 3D

    Ser

    daniel-starke/vkvm

    Virtual KVM

    14 parts3

Similar boards

  • 4 layers18 × 51 mmRPROM, the printed circuit board in 3D

    RPROM

    niklasekstrom/RPROM

    ROM emulator based on the RP2350B microcontroller

    44 parts47
  • 2 layers65.4 × 133.6 mmBSidesTLV2025GloveBadge, the printed circuit board in 3D

    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 mmLoeti, the printed circuit board in 3D

    Loeti

    elagil/loeti

    Soldering equipment for JBC irons

    110 parts5
  • 4 layers44 × 44 mmNode pcb, the printed circuit board in 3D

    Node pcb

    marino222/digital-clock72

    Kinetic Art Clock consisting of LCD displays

    55 parts2MIT
  • 2 layers88 × 75 mmRubber drive hard, the printed circuit board in 3D

    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 mmKeyChain, the printed circuit board in 3D

    KeyChain

    Brammert42/EPKeychain

    A keychain equipped with a RP2040 and a E-ink

    88 parts
  • 4 layers30 × 28 mmRebot ctrl, the printed circuit board in 3D

    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 mmAeroBlinker, the printed circuit board in 3D

    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.