This project creates a web-accessable IPMI / IP KVM system utilizing any OTG enabled Raspberry Pi device (theoretically - testing only done on RPi4) that provides full keyboard and mouse control, monitor view, and the ability to reboot computers with standard motherboards remotely (WOL & GPIO-Relay). This projects intends to also create an interface with consistent and minimal programmatic requirements (i.e. use of web stack languages only) with modularity and organization. This project is EXTREMELY light weight and easy to install and configure. Additionally, this allows further development with minimal orientation overhead.
The project's working features (with caveats):
- Future Work: Send shortcuts via HTML button interface
- Future Work: Scroll wheel support
- Future Work: Try HLS stream
- Future Work: Verify detachability
- Future Work: Perform
.img
test - Future Work: Support
licomposite
"stall" - Future Work: Add a
dd
file converter and/or alteraccept
attribute of fileinput
tag
- Future Work: Identification of GPIO pin configuration for support of the following: - Relay Channel IOT - Upstream USB Switch YKUP - USB Switchable Hub YKUSH3 - LIRC Transmitter/Receiver ENER314-IR
- Future Work: Configure
/network/interfaces
for user - Future Work: Detect MAC addresses with button
- Future Work: Add "Copy Command" button to fork process output
- Future Work: Twilio-based multi-factor authentication
- Future Work: PAM authentication || equivalent
- Future Work: Link/iFrame to gateway address (for port forwarding configuration)
- Future Work: no-ip2 API DDNS support in interface
- Future Work: VPN configuration information
- Future Work: Embedded VNC Client using noVNC
Future Work: Dataplicity "Wormhole" Instructionvideo stream is "insecure" content
- Future Work: Configure as
systemd
service - Future Work: Add
dtoverlay=dwc2
to/boot/config.txt
**Image needs updating to show possible GPIO configurations
-
Enable the dwc2 dtoverlay in
/boot/config.txt
on your Pi4 -
Install node/npm/pip in
-
Run
npm install
-
Run
sudo bash < project-directory >/configuration/composit-gadget-setup_v1.sh
-
Run
sudo node app.js
-
Navigate to
http://localhost:3000
in your browser -
See below for remote access instruction
**Post issue for installation guidance (or look at /configuration/install.sh
)
-
Log into router
-
Set up up port forwarding to :port that is chosen for the Interface during install [3000 recommended]
-
Create a hostname (no-ip client to be set up in install)
-
Capture Card Options:
-
Cables:
- Ensure all cables are data-transfer capable
- Cheaper capture cards exist; the one chosen allows for throughput of video to a display
- The complete RPi4 starter kit might be a bit overkill but easy one-stop-shop for beginner
This project hosts a node-generated server on an OTG-capable Raspberry Pi device. The install script creates the libcomposite device on the Pi. The code then transcribes the information that is fed through the browser and relays it to the target computer using socket.io. Video is achieved using JSMPEG (would like to find something even faster like WebRTC maybe). There are likely many approaches to current solutions. For instance, the mouse report descriptor is that for a generic mouse with basic functions. It might be possible to create a report descriptor that generates output reports from the mouse to provide absolute position on the screen. Additionally, it might be possible to detect the display resolution and calibrate the mouse movement. Currently, it doesn't seem that that level of rigor is worth it. Other improvements like this could likely be made as well.
I do plan on going back and cleaning up this code to be more readable but we will see if that happens anytime soon.