{"id":13574855,"url":"https://github.com/Noskcaj19/hardware-kvm","last_synced_at":"2025-04-04T18:32:37.959Z","repository":{"id":103708995,"uuid":"541584102","full_name":"Noskcaj19/hardware-kvm","owner":"Noskcaj19","description":"\"Software\" KVM that requires no client software","archived":false,"fork":false,"pushed_at":"2022-10-04T23:13:37.000Z","size":16,"stargazers_count":12,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"main","last_synced_at":"2024-11-05T10:44:54.418Z","etag":null,"topics":["esp32","kvm","software-kvm"],"latest_commit_sha":null,"homepage":"","language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Noskcaj19.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}},"created_at":"2022-09-26T12:50:29.000Z","updated_at":"2024-10-29T01:29:57.000Z","dependencies_parsed_at":"2024-03-17T04:41:17.395Z","dependency_job_id":null,"html_url":"https://github.com/Noskcaj19/hardware-kvm","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Noskcaj19%2Fhardware-kvm","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Noskcaj19%2Fhardware-kvm/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Noskcaj19%2Fhardware-kvm/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Noskcaj19%2Fhardware-kvm/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Noskcaj19","download_url":"https://codeload.github.com/Noskcaj19/hardware-kvm/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247229854,"owners_count":20905142,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["esp32","kvm","software-kvm"],"created_at":"2024-08-01T15:00:55.232Z","updated_at":"2025-04-04T18:32:37.953Z","avatar_url":"https://github.com/Noskcaj19.png","language":"C","funding_links":[],"categories":["C"],"sub_categories":[],"readme":"# Hardware KVM\n\n[Barrier](https://github.com/debauchee/barrier) (or [input-leap](https://github.com/input-leap/input-leap)) are excellent programs implementing a \"Software KVM\" allowing a single mouse and keyboard to be seamlessly shared between multiple computers with the software installed.\n\nHowever, sometimes you may not want to or be unable to install the client software on a computer.\n\nThis project allows Barrier to control computers with _no software installed_ by using a microcontroller that presents itself as a USB mouse and keyboard to the computer.  Most Barrier commands can be implemented using an absolute mode mouse and keyboard.\n\n\n**Be warned, there are many bugs**\n\n**This is a hack**, it can never be perfect due to limitations of USB.  Also, the code is hacked together.  There are many bugs I know of, and many I don't.\n\nFundamentally, it's just a USB mouse and keyboard, so it's not likely to kill your computer, but use this hack at your own risk.\n\n# Usage\n\n## Hardware\n\nAn ESP32 is required to be the virtual USB HID mouse and keyboard. \n\nUse `esp-idf` to build and flash the code in the `esp_device` folder to the ESP32.\n\nThe code assumes a `ESP32-S3-DevKitC-1` and is configured to use both onboard USB ports.  Other form factors can work, but the usb device pinouts will have to be changed.\n\n## Host software\n\nThe `host_driver` folder must be compiled and run.\n\nThe host software does not need to be run on a computer running the barrier software, but it must be able to connect to the barrier server and be connected to the serial port of the ESP32.\n\nRunning it on the Barrier server will reduce latency.\n\n* `BARRIER_SERVER` - defaults to `localhost:24800`\n* `BARRIER_SCREEN_WIDTH` - defaults to `2560`\n* `BARRIER_SCREEN_HEIGHT` - defaults to `1600`\n* `KVM_SERIAL_ADDRESS` - defaults to `/dev/ttyUSB0`\n* `KVM_SERIAL_BAUD` - defaults to `460800`\n* `BARRIER_DEVICE_NAME` - defaults to `Hardware Barrier`\n\nThen configure the client in the server like any other client.\n\n# Features and limitations\nSupports mouse movement (absolute mode only, although relative mode is in theory possible) and 6KRO keyboard\n\n\nDoes not (currently) support host to client clipboard, but can be implemented by intercepting the paste shortcut and entering the clipboard as text.\n\nCannot and will not support client to host clipboard or drag and drop in either direction.\nThis is both a limitation of a USB mouse and keyboard being input only devices and that this project should be able to be used in security sensitive situations, where data exfiliation is not acceptable.\n\nDoes not (currently) support TLS encryption.  **It is assumed the local network is trustworthy**.\n\nThe Barrier protocol parserusing an ESP32 opens the possiblity of using WIFI.\n\n# Architecture\n\nThe host driver connects to the Barrier server as a client and connects to the ESP32 over serial UART.\n\nWhen the Barrier server starts sending KVM commands to the host driver the host driver forwards these commands over serial to the ESP32.\n\nThe ESP32 reads these commands from serial and then performs the actions as a USB HID mouse and keyboard.\n\n## Future improvements\nAn ESP32 was specifically chosen for it's wifi connectivity so that the device could be fully self contained and connect directly to the Barrier server, but I'm lazy and haven't gotten around to it.\nOn the other hand, direct connection to the host computer has much lower latency, so it's likely a good idea to keep the functionality.\n\nThe Barrier protocol parser should be able to be compiled and run on the ESP32.  This would allow the ESP32 to connect directly to the Barrier server over the network, and could reduce the complexity of the host program.","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FNoskcaj19%2Fhardware-kvm","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FNoskcaj19%2Fhardware-kvm","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FNoskcaj19%2Fhardware-kvm/lists"}