Turn your Raspberry Pi into a browser-based KVM.
- Video capture (HDMI/DVI/VGA)
- Keyboard forwarding
- Mouse forwarding
- Fullscreen mode
- Paste text from clipboard
- Support for QWERTY and AZERTY keyboard layouts
- Raspberry Pi OS Stretch or later
- python3-venv
All-in-one kits are available from tinypilotkvm.com.
- Raspberry Pi 4 (all variants work)
- HDMI to USB dongle
- In smaller form factor
- They have no brand name, and there are several variants, but they're all built on the same MacroSilicon 2109 chip.
- They're available for $10-15 on eBay and AliExpress.
- USB-C to USB-A cable (Male/Male)
- microSD card (Class 10, 8 GB or larger)
- HDMI to HDMI cable
- Or [other] to HDMI, depending on how your target machine displays output.
- (Optional) A USB-C OTG split connector: Supports continuous power when the target computer turns off.
- Requires two additional USB-A to microUSB cables.
- If you're using this split connector, choose a USB-C to USB-A cable that's 12" or shorter to minimize voltage drop along the cable.
- (Optional) VGA to HDMI Adapter
- If your target computer has VGA output, the above adapter is confirmed to work with TinyPilot.
See "TinyPilot: Build a KVM Over IP for Under $100" for a more detailed tutorial on how to assemble these parts to create a TinyPilot.
You can install TinyPilot on a compatible Raspberry Pi in just two commands.
curl \
--silent \
--show-error \
https://raw.githubusercontent.com/mtlynch/tinypilot/master/quick-install | \
bash - && \
sudo reboot
The installation process:
- Creates a service account for TinyPilot with limited priviliges.
- Installs TinyPilot as a systemd service so it runs automatically on every boot.
- Installs TinyPilot's dependencies.
When your Pi reboots, you should be able to access TinyPilot by visiting your Pi hostname in the browser. For example, if your device is named raspberrypi
:
TinyPilot accepts various options through environment variables:
Environment Variable | Default | Description |
---|---|---|
HOST |
0.0.0.0 |
Network interface to listen for incoming connections. |
PORT |
8000 |
HTTP port to listen for incoming connections. |
KEYBOARD_PATH |
/dev/hidg0 |
Path to keyboard HID interface. |
MOUSE_PATH |
/dev/hidg1 |
Path to mouse HID interface. |
KEYBOARD_LAYOUT |
QWERTY |
Keyboard layout on target computer. Options are: QWERTY , AZERTY , NORWEGIAN . |
DEBUG |
undefined | Set to 1 to enable debug logging. |
The installation script is idempotent, so you can upgrade to the latest stable release of TinyPilot and its dependencies by just re-running the quick install script.
If you're having trouble with TinyPilot, you can run /opt/tinypilot/dev-scripts/dump-logs
to print logs for all the software components related to TinyPilot. This log is useful if you file a bug report.
You can read more details about the logs in the wiki.
TinyPilot does not support authentication. You should only use TinyPilot on networks that you trust. Anyone who accesses the TinyPilot URL can shutdown or restart your Pi and type arbitrary commands into the device to which your Pi is connected.
If you need authentication, the simplest solution would be to adjust your Nginx configuration (included by default with the installation) to require HTTP Basic Authentication.
If this project is useful to you, consider making a financial contribution to support its development:
If you're interested in seeing what's happening with the project at a granular level, weekly updates appear every Friday on What Got Done:
- TinyPilot Wiki: Guides for tasks related to TinyPilot.
- TinyPilot Ansible Role: Use Ansible to install TinyPilot and all dependencies as a systemd service.
For news about major TinyPilot releases and other updates about the project, sign up for the TinyPilot mailing list: