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.ducky")
duck.close()

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.2.3.tar.gz (9.4 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.2.3-py3-none-any.whl (10.1 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: rpi_hid-1.2.3.tar.gz
  • Upload date:
  • Size: 9.4 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.2.3.tar.gz
Algorithm Hash digest
SHA256 7345ae5d93ca18f396c245f5a914addf243dbd2630f311d848dff618466e2380
MD5 ae40f70598d4e07d8926139fb3191516
BLAKE2b-256 d66b311f71916d05bd9d60b512c74139832782c96d69b63f8553e6d38be22b71

See more details on using hashes here.

File details

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

File metadata

  • Download URL: rpi_hid-1.2.3-py3-none-any.whl
  • Upload date:
  • Size: 10.1 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.2.3-py3-none-any.whl
Algorithm Hash digest
SHA256 214c6ba55db272f687f28fc477c038ec1a895bbc830455ba1e701895071420f1
MD5 bc13bf85b52b4bc17ae758c21ab90de7
BLAKE2b-256 96a8b1935a00ef83678c513bda5764e6632b5fc03f43968fd32641dce917d21c

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