6 releases

0.0.7 Dec 8, 2023
0.0.6 Apr 26, 2023
0.0.5 Jun 30, 2020
0.0.4 Apr 22, 2020

#113 in Unix APIs

Download history 100/week @ 2024-01-03 108/week @ 2024-01-10 93/week @ 2024-01-17 101/week @ 2024-01-24 96/week @ 2024-01-31 77/week @ 2024-02-07 129/week @ 2024-02-14 154/week @ 2024-02-21 197/week @ 2024-02-28 175/week @ 2024-03-06 1988/week @ 2024-03-13 1235/week @ 2024-03-20 1481/week @ 2024-03-27 1565/week @ 2024-04-03 1045/week @ 2024-04-10 856/week @ 2024-04-17

5,108 downloads per month
Used in 2 crates


569 lines


uhid-virt provides a safe wrapper around uhid-sys

Forked from uhid-fs, so what changed? Removal of ArrayVec dependency, and attempts to write in to borrows slices rather than creating and cloning new vectors everywhere. Where possible it tries to be an almost drop-in replacement for tokio_linux_uhid.

What is UHID?

UHID lets you write userspace drivers for HID devices in Linux. No need for a kernel module, just run your program and you can register an HID device.

There are a lot of things you can do with this, to name a few:

  • Forwarding or emulating keypresses through control daemon
  • Emulate a mouse/keyboard for shortcuts/macros/task automation (independent of X11/Wayland/system console)
  • Add support for HID devices that are only supported on Windows / other platforms
  • Write drivers for a new HID device (i.e. DIY Arduino water touchpad)

Kernel Docs Description

UHID allows user-space to implement HID transport drivers. Please see hid-transport.html for an introduction into HID transport drivers. This document relies heavily on the definitions declared there.

With UHID, a user-space transport driver can create kernel hid-devices for each device connected to the user-space controlled bus. The UHID API defines the I/O events provided from the kernel to user-space and vice versa.

See the Kernel UHID doc page for a full explanation of the mechanics.


See the example folder. Sending a newline will make the mouse move to the right.

See flukejones/rog-core and sameer/gearvr-controller-uhid for a real-world use cases.


~54K SLoC