Skip to main content

A KVM-over-IP solution running on Raspberry Pi Zero 2 W, rewritten in Python

Project description

zeropykvm

A KVM-over-IP solution running on Raspberry Pi Zero 2 W — rewritten from Zig to Python.

Attribution: This project is a Python port of darkyzhou/mykvm, originally written in Zig. All credit for the architecture and design goes to the original author.

Features

  • Zero-copy video pipeline: Uses Linux DMA-BUF to share buffers between capture device (TC358743) and hardware H.264 encoder (bcm2835-codec)
  • USB HID gadget: Emulates USB keyboard and mouse via Linux ConfigFS, with Boot Protocol support for BIOS compatibility
  • HTTPS + WebSocket: Serves a web frontend over HTTPS with WebSocket for real-time video streaming and HID control
  • E-Paper display: Optional status display on Waveshare EPD 2in13 V4
  • EDID management: Sets custom EDID on the HDMI capture device for resolution control

Demo hardware

Architecture

The Python rewrite mirrors the original Zig project's architecture:

Module Description
args.py CLI argument parsing (argparse)
utils.py Utility functions (ioctl wrapper, IP detection, FourCC)
v4l2.py V4L2 constants, ioctl numbers, and ctypes structures
dma.py DMA heap allocation and buffer management
edid.py EDID setting and HDMI signal detection
capture.py V4L2 capture device with DMABUF support
encode.py V4L2 M2M H.264 encoder with DMABUF input
usb.py USB HID gadget setup, keyboard/mouse emulation
epaper.py E-Paper display driver
http_handler.py HTTP static file serving
server.py WebSocket client management and broadcast
ws_handler.py WebSocket message handling (keyboard/mouse events)
https_server.py HTTPS/TLS server with WebSocket upgrade
video.py Zero-copy video pipeline orchestration
gencert.py Self-signed certificate generator (zeropykvm gencrt subcommand)
main.py Main entry point

Requirements

  • Python >= 3.12
  • Linux with V4L2 support (Raspberry Pi OS recommended)
  • TC358743 HDMI capture device
  • bcm2835-codec hardware encoder
  • USB gadget support (dwc2 overlay)
  • uv (recommended for dependency management)

Installation

# Install from PyPI using uv (recommended)
uv tool install zeropykvm

# Or with pip
pip install zeropykvm

# With e-Paper display support (on Raspberry Pi)
pip install zeropykvm[epaper]

Development setup

git clone https://github.com/YOUR_USERNAME/mykvm-python.git
cd mykvm-python
uv sync

# With development tools
uv sync --extra dev

# With e-Paper display support (on Raspberry Pi)
uv sync --extra epaper

Usage

# Generate a self-signed TLS certificate (no openssl required)
zeropykvm gencrt --cert cert.pem --key key.pem

# Run zeropykvm
zeropykvm --cert cert.pem --key key.pem

# With custom settings
zeropykvm --cert cert.pem --key key.pem --port 443 --bitrate 2000000

Then open https://<pi-ip>:8443/ in a browser and accept the self-signed certificate.

Testing

# Run all tests
uv run pytest

# Run with verbose output
uv run pytest -v

# Run specific test module
uv run pytest tests/test_usb.py -v

License

This project follows the same license as the original mykvm.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

zeropykvm-0.1.0.tar.gz (152.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

zeropykvm-0.1.0-py3-none-any.whl (146.7 kB view details)

Uploaded Python 3

File details

Details for the file zeropykvm-0.1.0.tar.gz.

File metadata

  • Download URL: zeropykvm-0.1.0.tar.gz
  • Upload date:
  • Size: 152.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for zeropykvm-0.1.0.tar.gz
Algorithm Hash digest
SHA256 b1970c75453a158c8674c2013ec06d5c3b43c5d9d8e681375e775a07ca8d6cc6
MD5 b445a81fd2a0eac9395f5123dab25b26
BLAKE2b-256 e92cb181bfbdcb721f463ef83f3b5cdddcb285f4d361df95041bac868a0bf3bd

See more details on using hashes here.

Provenance

The following attestation bundles were made for zeropykvm-0.1.0.tar.gz:

Publisher: pypi-deploy.yml on esoadamo/zeropykvm

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file zeropykvm-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: zeropykvm-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 146.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for zeropykvm-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 690d56483a0f8d53f0218917ac72c8d7a11422db6df967a6150a0d934121e8f6
MD5 c701c7b1d3d08e3ff5b11ef235ed1e4d
BLAKE2b-256 804f24ae79cf9084b57119562b745c6142367ae33be54e2c92077a40accab201

See more details on using hashes here.

Provenance

The following attestation bundles were made for zeropykvm-0.1.0-py3-none-any.whl:

Publisher: pypi-deploy.yml on esoadamo/zeropykvm

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page