{"id":48469637,"url":"https://github.com/doominator42/zerokvm","last_synced_at":"2026-04-07T06:02:22.087Z","repository":{"id":340069000,"uuid":"1164392551","full_name":"doominator42/ZeroKVM","owner":"doominator42","description":"A low-cost, easy-to-build KVM-over-IP device that acts as a DisplayLink monitor","archived":false,"fork":false,"pushed_at":"2026-03-14T18:55:17.000Z","size":365,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2026-03-15T05:26:37.093Z","etag":null,"topics":["csharp","displaylink","ip-kvm","ipkvm","kvm","kvm-over-ip","openwrt","raspberry-pi","raspberry-pi-zero-2-w","usb","usb-gadget","usb-hid"],"latest_commit_sha":null,"homepage":"","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/doominator42.png","metadata":{"files":{"readme":"readme.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":"NOTICE","maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-02-23T02:59:19.000Z","updated_at":"2026-03-14T18:55:20.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/doominator42/ZeroKVM","commit_stats":null,"previous_names":["doominator42/zerokvm"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/doominator42/ZeroKVM","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/doominator42%2FZeroKVM","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/doominator42%2FZeroKVM/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/doominator42%2FZeroKVM/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/doominator42%2FZeroKVM/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/doominator42","download_url":"https://codeload.github.com/doominator42/ZeroKVM/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/doominator42%2FZeroKVM/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31501903,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-07T03:10:19.677Z","status":"ssl_error","status_checked_at":"2026-04-07T03:10:13.982Z","response_time":105,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["csharp","displaylink","ip-kvm","ipkvm","kvm","kvm-over-ip","openwrt","raspberry-pi","raspberry-pi-zero-2-w","usb","usb-gadget","usb-hid"],"created_at":"2026-04-07T06:02:20.194Z","updated_at":"2026-04-07T06:02:22.080Z","avatar_url":"https://github.com/doominator42.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"# ZeroKVM\n\nA low-cost, easy-to-build KVM-over-IP device that acts as a DisplayLink monitor. No HDMI input or capture card, just a single USB port. No special software is required on the host, only the DisplayLink driver, which is already built-in or available on most operating systems. This device can be used to quickly access headless machines or when no video output is available for a capture card.\n\n![ZeroKVM illustration](./images/ZeroKVM-illustration.png)\n\n## Host support\n|OS|Support|Notes|\n|-|-|-|\n|Windows 10+|✅ Plug-and-Play|Windows Update should install the DisplayLink driver automatically|\n|Linux|✅ Mainline|Most distributions includes the mainline `udl` driver. The proprietary DisplayLink driver also works|\n|macOS|App required|The DisplayLink Manager app has to be installed|\n|Android|App required|The DisplayLink Presenter app has to be installed|\n\n## Development status\nImplemented features works well. The web client still needs a bit of polishing and better error handling.\n\n|Feature|Status|\n|-|-|\n|Video capture (DisplayLink)|✅|\n|Keyboard input (HID Boot Keyboard)|✅|\n|Send text as keystrokes|✅|\n|Mouse input (HID Absolute Mouse)|✅|\n|Mouse input (HID Relative Mouse)|✅|\n|Mouse input (HID Digitizer)|Planned|\n|Web client|✅|\n|8 bits color depth|Planned|\n|16 bits color depth|✅|\n|24 bits color depth|Planned|\n|HTTP Basic Authentication|Planned|\n|RNDIS Ethernet gadget|Planned|\n|CDC-ECM Ethernet gadget|Planned|\n|CDC-NCM Ethernet gadget|Planned|\n|File transfers through MTP gadget|Planned|\n|Mass Storage gadget|Planned|\n\n## Limitations\n- The DisplayLink protocol implemented is USB 2.0 only. It is usable for desktop usage, but anything with large detailed or changing areas (like media content) will drop frames. Decoding the pixels is cpu intensive and can max out an SBC like the RPi Zero 2.\n- Maximum 1920x1080 resolution\n- Does not work for pre-boot management like BIOS or OS installation/repair where the DisplayLink driver cannot run\n\n## Installation\n- For Debian, Ubuntu, RPiOS or other distro based on SystemD, see [systemd](./systemd)\n- For OpenWRT, see [openwrt](./openwrt)\n\n## Hardware requirements\n- Board with a USB device/OTG controller\n- ARM64 CPU with AdvSIMD, little-endian\n- 100 MB of RAM dedicated to the program\n\n## Runtime dependencies\n- libc\n- libssl (if using HTTPS)\n\n## Build with docker\nFor RPiOS (Debian) or other distro based on glibc\n```shell\nsh build-docker.sh linux-arm64\n```\n\nFor OpenWRT, Alpine Linux or other distro based on musl-libc\n```shell\nsh build-docker.sh linux-musl-arm64\n```\n\nThe compiled binary will be saved in `bin/linux-*/zerokvm`.\n\n## Build with dotnet CLI\n\n### Dependencies\n\n- .NET 10 SDK\n- [.NET AOT dependencies](https://learn.microsoft.com/en-us/dotnet/core/deploying/native-aot)\n- clang\n- xxd\n- libaio (C headers with static binary)\n- libturbojpeg (static binary)\n\n```shell\n# For RPiOS (Debian) or other distros based on glibc\ndotnet publish -r linux-arm64 src/ZeroKvm -o bin/linux-arm64\n\n# For OpenWRT, Alpine Linux or other distros based on musl-libc\ndotnet publish -r linux-musl-arm64 src/ZeroKvm -o bin/linux-musl-arm64\n```\n\n## License\n\nThis program is free software: you can redistribute it and/or modify it under the terms of the [GNU General Public License](https://www.gnu.org/licenses/gpl-3.0.txt) as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.\n\nThis program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n\nThis software is based in part on the work of the Independent JPEG Group.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdoominator42%2Fzerokvm","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdoominator42%2Fzerokvm","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdoominator42%2Fzerokvm/lists"}