{"id":21564667,"url":"https://github.com/nihiue/open-ip-kvm","last_synced_at":"2025-04-05T18:07:55.458Z","repository":{"id":62314583,"uuid":"558885074","full_name":"Nihiue/open-ip-kvm","owner":"Nihiue","description":"Build your own open-source ip-kvm device","archived":false,"fork":false,"pushed_at":"2022-11-27T15:33:09.000Z","size":58,"stargazers_count":470,"open_issues_count":6,"forks_count":87,"subscribers_count":9,"default_branch":"main","last_synced_at":"2025-03-29T17:09:38.674Z","etag":null,"topics":["arduino","ip-kvm","linux-board","raspberry-pi"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","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/Nihiue.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}},"created_at":"2022-10-28T14:16:11.000Z","updated_at":"2025-03-26T00:24:05.000Z","dependencies_parsed_at":"2022-10-30T15:45:34.931Z","dependency_job_id":null,"html_url":"https://github.com/Nihiue/open-ip-kvm","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Nihiue%2Fopen-ip-kvm","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Nihiue%2Fopen-ip-kvm/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Nihiue%2Fopen-ip-kvm/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Nihiue%2Fopen-ip-kvm/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Nihiue","download_url":"https://codeload.github.com/Nihiue/open-ip-kvm/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247378142,"owners_count":20929296,"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":["arduino","ip-kvm","linux-board","raspberry-pi"],"created_at":"2024-11-24T10:16:49.030Z","updated_at":"2025-04-05T18:07:55.419Z","avatar_url":"https://github.com/Nihiue.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Open IP-KVM\r\n\r\nThis project provides an open-source IP-KVM solution.\r\n\r\nRelated article:\r\n\r\n[DIY 一个运维神器 Open IP-KVM](https://zhuanlan.zhihu.com/p/578602475)\r\n\r\n[English Version By Google Translate](https://zhuanlan-zhihu-com.translate.goog/p/578602475?_x_tr_sl=zh-CN\u0026_x_tr_tl=en)\r\n\r\n## What is IP-KVM\r\n\r\nKVM Over IP (IP-KVM) is a hardware based solution for remote access to your computer or server.\r\n\r\nThe unit plugs into the Keyboard, Video and Mouse ports of a computer or server and transmits those to a connected user through a network.\r\n\r\n\u003c!-- ![kvm](https://user-images.githubusercontent.com/5763301/198827953-2509f245-0274-4556-9f3e-969b4b33a728.png) --\u003e\r\n\r\n### IP-KVM vs RD software(VNC/RDP/TeamViewer)\r\n\r\n* RD software requires a working OS, and must be pre-configured. It often fails in an emergency situation\r\n* IP-KVM is out-of-band, so it can be used to install OS, setup BIOS or fix low-level issues\r\n\r\n## Features\r\n\r\n[Demo Video](https://www.bilibili.com/video/BV1c841177hF/)\r\n\r\n* Web browser as client\r\n* 1080P 30fps video stream\r\n* Full mouse \u0026 keyboard support\r\n* UI Indicator\r\n* Remote Paste: Input ASCII sequence\r\n\r\n![screenshot](https://user-images.githubusercontent.com/5763301/198885015-f1cd83d7-6717-410c-8837-68b347f4b29c.png)\r\n\r\n## System Diagram\r\n\r\n![diagram](https://user-images.githubusercontent.com/5763301/198833599-87af1bec-92c7-4c87-80cf-8658b842cff5.jpg)\r\n\r\n## Hardware Requirements\r\n\r\n* HDMI-USB capture device\r\n  * Recommendation: `MS2109` based devices [link](http://en.macrosilicon.com/info.asp?base_id=2\u0026third_id=50)\r\n  * Input: Up to 4K 30FPS\r\n  * Output: Up to 1080P 30FPS @ MJPEG\r\n* Linux single-board computer\r\n  * Recommendation: `Phicomm N1`, [Raspberry Pi 4](https://www.raspberrypi.com/products/raspberry-pi-4-model-b/) or other models,\r\n  * Recent linux kernel\r\n  * 2+ USB ports\r\n* Arduino Leonardo [link](https://docs.arduino.cc/hardware/leonardo)\r\n  * Emulate HID (mouse and keyboard)\r\n* Optional\r\n  * USB-to-TTL Adapter\r\n    * If linux sbc has no built-in serial port\r\n    * Recommendation: `PL2303HX`\r\n  * USB Wi-Fi Adapter\r\n    * If linux sbc has no built-in Wi-Fi\r\n\r\n\r\n## Deploy and Run\r\n\r\n### 1. Prepare Arduino Leonardo\r\n\r\n\u003cdetails\u003e\r\n\r\n\u003csummary\u003eUpload program\u003c/summary\u003e\r\n\r\n1. Download and install [Arduino IDE](https://www.arduino.cc/en/software/) on your PC.\r\n2. Connect leonardo to PC via USB\r\n3. Download arduino code file [virt-hid-arduino.ino](https://raw.githubusercontent.com/Nihiue/open-ip-kvm/main/virt-hid-arduino/virt-hid-arduino.ino), Open it with Arduino IDE, then click `Sketch/Upload (Ctrl + U)`\r\n4. Disconnect leonardo USB\r\n\r\n\u003c/details\u003e\r\n\r\n\u003cdetails\u003e\r\n\r\n\u003csummary\u003eReference: How to connect serial port\u003c/summary\u003e\r\n\r\n![image](https://user-images.githubusercontent.com/5763301/198872791-cbac6e09-562a-43ae-82fb-a5533461d36b.png)\r\n\r\n![serial](https://user-images.githubusercontent.com/5763301/198873347-8bade4fc-e682-4f46-a115-ec6dc4e09d22.jpg)\r\n\r\n\u003c/details\u003e\r\n\r\n### 2. Prepare Linux SBC\r\n\r\nSSH to linux SBC with your pc.\r\n\r\n\u003cdetails\u003e\r\n\r\n\u003csummary\u003eDeploy App and Dependency on Linux SBC\u003c/summary\u003e\r\n\r\n* Build and install [MJPG-Streamer](https://github.com/jacksonliam/mjpg-streamer)\r\n  * [How to build MJPG-Streamer](https://www.acmesystems.it/video_streaming)\r\n* Install Node.js 14.x+\r\n  * [Install NodeJS on Armbian](https://www.autoptr.top/htmls/i12bretro/0507)\r\n* Clone repo and install its dependency\r\n  * `git clone https://github.com/Nihiue/open-ip-kvm.git`\r\n  * `cd open-ip-kvm \u0026\u0026 npm install`\r\n\u003c/details\u003e\r\n\r\n\u003cdetails\u003e\r\n\r\n\u003csummary\u003eConnect IO and edit config\u003c/summary\u003e\r\n\r\n* Connect IO\r\n  * HDMI-USB capture device via USB\r\n  * Arduino Leonardo via native serial port or USB-TTL adapter\r\n* Edit `open-ip-kvm/server/config.json`\r\n  * `mjpg_streamer.device`: path of HDMI-USB capture device\r\n  * `serialport`: path of serial port\r\n\r\n\u003c/details\u003e\r\n\r\n\r\n### 3. Run\r\n\r\n1. Connect HDMI output of target computer to HDMI-USB capture device\r\n2. Connect target computer to leonardo via USB\r\n3. Run `cd open-ip-kvm \u0026\u0026 npm run start` on linux SBC\r\n4. Turn on target computer\r\n5. Open `http://[IP of Linux SBC]:8000` in web browser\r\n\r\nHow to control\r\n\r\n* Mouse\r\n  * Click anywhere to enter `pointer capture` mode\r\n  * Press `ESC` to exit\r\n* Keyboard\r\n  * Press `Enter` to enter `key capture` mode\r\n  * press `Shift + ESC` to exit\r\n\r\n## License\r\n\r\nMIT\r\n\r\n## Credits\r\n\r\n[mjpg_streamer](https://github.com/jacksonliam/mjpg-streamer)\r\n\r\nFor production environment, use [Pi-KVM](https://pikvm.org/)\r\n\r\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnihiue%2Fopen-ip-kvm","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnihiue%2Fopen-ip-kvm","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnihiue%2Fopen-ip-kvm/lists"}