Skip to the content
2 layers18.3 × 36.1 mmSer, the printed circuit board in 3D

Virtual KVM

Size
18.3 × 36.1 mm
Copper layers
2
Thickness
1.6 mm
Parts
14
Nets
30
Pads
60
Tracks, vias
42, 1
Pours
4
Routed
Yes
KiCad
KiCad 5 (file 20171130)
Created
8 Nov 2023
Updated
15 Jun 2026

Overview

Ser 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.3 × 36.1 mm with 14 parts on 30 nets, routed with 42 tracks and 1 via.

It is built around the ADUM1201BR. Its parts include 4 resistors, 4 diodes, 2 capacitors and 2 ICs. It belongs with the AVR (ATmega, ATtiny) boards of this library.

Main components

1

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

14
QtyValueFootprintReferences
4500Resistor_SMD:R_0603_1608Metric_Pad1.05x0.95mm_HandSolderR1, R2, R3, R4
4LEDLED_SMD:LED_0603_1608Metric_Pad1.05x0.95mm_HandSolderD1, D2, D3, D4
268nCapacitor_SMD:C_0603_1608Metric_Pad1.05x0.95mm_HandSolderC1, C2
1ADuM1201BRPackage_SO:SOIC-8_3.9x4.9mm_P1.27mmU1
1ArduinoProMicrofootprints:ArduinoProMicro_CustomIC1
1JP1Jumper:SolderJumper-2_P1.3mm_Bridged_Pad1.0x1.5mmJP1
1USB-SERfootprints:PinHeader_1x06_P2.54mm_Vertical_CustomJT1

More from daniel-starke/vkvm

2
  • 2 layers18.5 × 35.8 mmVkm, the printed circuit board in 3D

    Vkm

    daniel-starke/vkvm

    Virtual KVM

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

    Vkm

    daniel-starke/vkvm

    Virtual KVM

    32 parts3

Similar boards

  • 2 layers66.9 × 74.5 mmDeskHop Rev1, the printed circuit board in 3D

    DeskHop Rev1

    hrvach/deskhop

    Fast Desktop Switching Device

    20 parts7.9kGPL-3.0
  • 2 layers68 × 54 mmStepcraft controller, the printed circuit board in 3D

    Stepcraft controller

    eflukx/Stepcraft-GRBLizer

    Replacement ('Arduino') controller that fits inside a Stepcraft CNC machine. Comptatible with GRBL and EstlCAM

    71 parts15
  • 4 layers75 × 50 mmCANchovy PCB, the printed circuit board in 3D

    CANchovy PCB

    fred314159265/CANchovy

    MKS CANable V2.0 based isolated USB-CAN interface

    102 parts7
  • 2 layers100 × 95.9 mmLCSDR, the printed circuit board in 3D

    LCSDR

    arsenal007/STM32-SDR_PCB

    KiCAD PCB Project of STM32 SDR, processor board

    268 parts3
  • 2 layers94 × 70 mmCore, the printed circuit board in 3D

    Core

    stanislavstarcha/powerbox

    Add paths to your bash/zsh rc for convenience

    77 parts
  • 2 layers19.8 × 33.5 mmRs422-master, the printed circuit board in 3D

    Rs422-master

    multigcs/riocore

    riocore

    3 parts91GPL-2.0

Questions

How big is the Ser PCB?

It measures 18.3 × 36.1 mm and has 2 copper layers, 1.6 mm thick.

What parts does the Ser use?

14 parts, built around the ADUM1201BR. 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 Ser KiCad files?

From the daniel-starke/vkvm repository on GitHub, at the commit this page was made from: the board is hw/ser/ser.kicad_pcb. PCBKit opens the board in the browser, with nothing to install.

Can I use the Ser design in my own project?

Its repository states no licence, so its author keeps all rights: ask daniel-starke before reusing the design.