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

Uploaded Python 3

File details

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

File metadata

  • Download URL: rpi_hid-1.1.3.tar.gz
  • Upload date:
  • Size: 8.7 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.1.3.tar.gz
Algorithm Hash digest
SHA256 c9739a061238b25ddae9d077a15963b9dfca94fa2e624fe4cf7214c1bddb804e
MD5 8efaab2eeff5d23740cc12477e64c0c1
BLAKE2b-256 165e2f3a49f6e328f31f5221b1f8d95d0515b6932608a205d16c2b56ab4c1e29

See more details on using hashes here.

File details

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

File metadata

  • Download URL: rpi_hid-1.1.3-py3-none-any.whl
  • Upload date:
  • Size: 8.7 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.1.3-py3-none-any.whl
Algorithm Hash digest
SHA256 2b4137d91007c44516b5fc8761ebb7db401c1a0afaa7bcf079b36e089f8f63c4
MD5 e3107c084e002c02dd9474889fda7238
BLAKE2b-256 636375b900d0614cec19ec250cd55cc59be2edf5cac4ec98dbfbfdf48f75fb59

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