Skip to main content

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

  • STRING
  • DELAY
  • DEFAULT_DELAY
  • STRING_DELAY
  • ENTER, TAB, SPACE, ESC
  • Modifier combos (CTRL, ALT, SHIFT, GUI)
  • REPEAT
  • HOLD, RELEASE
  • REM

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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

rpi_hid-1.0.9.tar.gz (7.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

rpi_hid-1.0.9-py3-none-any.whl (7.4 kB view details)

Uploaded Python 3

File details

Details for the file rpi_hid-1.0.9.tar.gz.

File metadata

  • Download URL: rpi_hid-1.0.9.tar.gz
  • Upload date:
  • Size: 7.8 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

Hashes for rpi_hid-1.0.9.tar.gz
Algorithm Hash digest
SHA256 b4ea68ff1fb8fe431c1935867a5abdf76e3916422a845237c5db18b379fe9252
MD5 a14abac9385c1e0b8f507557b1ff7345
BLAKE2b-256 34f8ca486caedd0e8172503bc4df38c54364d809151047306c3bb181db57ac17

See more details on using hashes here.

File details

Details for the file rpi_hid-1.0.9-py3-none-any.whl.

File metadata

  • Download URL: rpi_hid-1.0.9-py3-none-any.whl
  • Upload date:
  • Size: 7.4 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

Hashes for rpi_hid-1.0.9-py3-none-any.whl
Algorithm Hash digest
SHA256 5aae1a538cca3681e264af122d95547f76b6adcc64fdc5c38e4a25713d483246
MD5 3166b3fceb51c4768012012a6552f025
BLAKE2b-256 84c719567f5b894d2b6866a926bd57f225ea80e55d0d7330b2cf89b85cc2b542

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page