Skip to content

hamMUSings/open-ip-kvm

 
 

Repository files navigation

Open IP-KVM

This project provides an open-source IP-KVM solution.

Related article:

DIY 一个运维神器 Open IP-KVM

English Version By Google Translate

Changes in this fork (hammusings)

  • Merged to main the CH9329 adapter driver option from ciaoly
  • Changed to ustreamer from mjpg_streamer

What is IP-KVM

KVM Over IP (IP-KVM) is a hardware based solution for remote access to your computer or server.

The unit plugs into the Keyboard, Video and Mouse ports of a computer or server and transmits those to a connected user through a network.

IP-KVM vs RD software(VNC/RDP/TeamViewer)

  • RD software requires a working OS, and must be pre-configured. It often fails in an emergency situation
  • IP-KVM is out-of-band, so it can be used to install OS, setup BIOS or fix low-level issues

Features

Demo Video

  • Web browser as client
  • 1080P 30fps video stream
  • Full mouse & keyboard support
  • UI Indicator
  • Remote Paste: Input ASCII sequence

screenshot

System Diagram

diagram

Hardware Requirements

  • HDMI-USB capture device
    • Recommendation: MS2109 based devices link
    • Input: Up to 4K 30FPS
    • Output: Up to 1080P 30FPS @ MJPEG
  • Linux single-board computer (x86_64 also works)
    • Recommendation: Phicomm N1, Raspberry Pi 4 or other models,
    • Recent linux kernel
    • 2+ USB ports
  • Adapter to Emulate HID (mouse and keyboard) (Either)
    • Arduino Leonardo link
    • CH9329 Cable / Adapter
  • Optional
    • USB-to-TTL Adapter
      • If linux sbc has no built-in serial port
      • Recommendation: PL2303HX
    • USB Wi-Fi Adapter
      • If linux sbc has no built-in Wi-Fi

Deploy and Run

1. Optional: Prepare Arduino Leonardo (if using)

Upload program
  1. Download and install Arduino IDE on your PC.
  2. Connect leonardo to PC via USB
  3. Download arduino code file virt-hid-arduino.ino, Open it with Arduino IDE, then click Sketch/Upload (Ctrl + U)
  4. Disconnect leonardo USB
Reference: How to connect serial port

image

serial

2. Prepare Linux SBC

SSH to linux SBC with your pc.

Deploy App and Dependency on Linux SBC
  • Install ustreamer
    • Many current distros have package installers for ustreamer
    • ustreamer gihub
  • Install Node.js 14.x+
  • Clone repo and install its dependency
    • git clone https://github.com/hamMUSings/open-ip-kvm
    • cd open-ip-kvm && npm install
Connect IO and edit config
  • Connect IO
    • HDMI-USB capture device via USB
    • Arduino Leonardo OR CH9329 via native serial port or USB-TTL adapter
  • Edit open-ip-kvm/server/config.json
    • ustreamer.device: path of HDMI-USB capture device
    • serialport: path of serial port
    • `driverName': CH9329 OR arduino-leonard

3. Run

  1. Connect HDMI output of target computer to HDMI-USB capture device
  2. Connect target computer to leonardo OR CH9329 via USB
  3. Run cd open-ip-kvm && npm run start on linux SBC
  4. Turn on target computer
  5. Open http://[IP of Linux SBC]:8000 in web browser

How to control

  • Mouse
    • Click anywhere to enter pointer capture mode
    • Press ESC to exit
  • Keyboard
    • Press Enter to enter key capture mode
    • press Shift + ESC to exit

License

MIT

Credits

ustreamer

For production environment, use Pi-KVM

About

Build your own open-source ip-kvm device

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages

  • JavaScript 74.9%
  • HTML 12.3%
  • C++ 7.8%
  • CSS 4.5%
  • Dockerfile 0.5%