Raspberry Pi USB HID Keyboard + RubberDucky Interpreter
Project description
RPI-HID — Raspberry Pi USB HID Automation Library
RPI-HID is a Python library that allows a Raspberry Pi Zero / Zero 2 W to act as a USB Human Interface Device (HID), emulating a keyboard to automate keystrokes on a connected system.
It provides a high-level API and an advanced Rubber Ducky–style interpreter, abstracting low-level HID report handling into clean, reusable Python functions.
Features
- USB HID keyboard emulation using Linux USB gadget mode
- High-level keyboard control API
- Advanced Rubber Ducky–style script execution
- Configurable typing delays and pauses
- Auto-run payload support using
systemd - Clean, modular, and extensible architecture
- Published and installable from PyPI
Supported Hardware
- Raspberry Pi Zero
- Raspberry Pi Zero 2 W
⚠️ Other Raspberry Pi models (3/4/5) do not support USB gadget mode.
Requirements
- Raspberry Pi OS (Lite recommended)
- Python ≥ 3.7
- USB OTG enabled (
dwc2,libcomposite) - Root access (required for
/dev/hidg0)
Installation
pip install rpi-hid
Quick Start
from rpi_hid import Keyboard
kbd = Keyboard()
kbd.winRun("notepad")
kbd.type("Hello from RPI-HID")
kbd.enter()
kbd.close()
Keyboard API
type(text: str)
Types the given string.
kbd.type("Hello World")
press(*keys)
Presses a key or key combination.
kbd.press("ENTER")
kbd.press("CTRL", "c")
kbd.press("GUI", "r")
pause(seconds: float)
Pauses execution.
kbd.pause(1.5)
winRun(command: str)
Opens the Windows Run dialog and executes a command.
kbd.winRun("cmd")
spamText(text: str, n: int = 10)
Types a string multiple times.
kbd.spamText("TEST ", 5)
Rubber Ducky Script Support
RPI-HID includes a DuckyScript interpreter with near Rubber Ducky v1 compatibility.
Supported Commands
STRINGDELAYDEFAULT_DELAYSTRING_DELAYENTER,TAB,SPACE,ESC- Modifier combos (
CTRL,ALT,SHIFT,GUI) REPEATHOLD,RELEASEREM
Example Ducky Script
REM Demo payload
DEFAULT_DELAY 200
GUI r
STRING notepad
ENTER
STRING Hello from DuckyScript
ENTER
Execute Script
from rpi_hid import DuckyInterpreter
duck = DuckyInterpreter()
duck.run_file("payload.duck")
duck.close()
AutoStart Support
Payload scripts can be configured to run automatically on boot using systemd.
Enable AutoStart
sudo venv/bin/python test.py -a activate
Disable AutoStart
sudo venv/bin/python test.py -a deactivate
List Active AutoStart Scripts
sudo venv/bin/python test.py -a list
Permissions Note
HID device access requires root privileges. When using a virtual environment, always run scripts using the venv Python binary:
sudo venv/bin/python script.py
Ethical Use
This project is intended for:
- USB HID experimentation
- Automation on owned or authorized systems
- Educational and research purposes
Users are responsible for ensuring lawful and ethical use.
License
MIT License
Author
Abhirup Rudra
Future Enhancements
- Mouse HID support
- Full Rubber Ducky v2 compatibility
- Conditional scripting logic
- GPIO-based payload selection
- udev-based privilege handling (no sudo)
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file rpi_hid-1.0.11.tar.gz.
File metadata
- Download URL: rpi_hid-1.0.11.tar.gz
- Upload date:
- Size: 7.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.9.22 {"installer":{"name":"uv","version":"0.9.22","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":null,"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ea03ae55d1c69d776e16041c2526a2d3a025f7c9466b48ae75510d3bef2c0ba6
|
|
| MD5 |
bca3fb7f87f43c93d0fcc6da73af56fb
|
|
| BLAKE2b-256 |
413fef2517e46b171fd23727f05f36a2472cd4b98a0e5fbe5218c4edd96085d3
|
File details
Details for the file rpi_hid-1.0.11-py3-none-any.whl.
File metadata
- Download URL: rpi_hid-1.0.11-py3-none-any.whl
- Upload date:
- Size: 7.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.9.22 {"installer":{"name":"uv","version":"0.9.22","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":null,"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
70b01aa2d06189dc7300ae495b34e429d13a8c7cbccbabfff7d85e146cc6a120
|
|
| MD5 |
19e61292e8725a390508ee5eb6a84abe
|
|
| BLAKE2b-256 |
086f3d190459f66daa609dc9c18d985d60ad59a4c75d4092fe9f83008c8a2901
|