# uinput-ioctls **uinput-ioctls** provides Rust bindings and constants for the Linux [`uinput`](https://www.kernel.org/doc/html/latest/input/uinput.html) subsystem's ioctl interface. It exposes `ioctl_*` helper functions and constants based on the Linux kernel's `uinput.h`, allowing you to interact with virtual input devices (keyboards, mice, gamepads, etc.) through Rust in a low-level but type-safe way. This crate does not attempt to abstract or validate ioctl usage; it only provides constants and wrappers. Higher-level logic (such as event management or device configuration) should be built on top. --- ## ✨ Features - Idiomatic Rust wrappers around `uinput` ioctl definitions. - Uses the [`nix`](https://crates.io/crates/nix) crate for safe `ioctl` macros. - Includes all `UI_*` constants and corresponding helper functions: - `ui_dev_create`, `ui_dev_destroy` - `ui_dev_setup`, `ui_abs_setup` - `ui_set_evbit`, `ui_set_keybit`, ... - `ui_begin_ff_upload`, `ui_end_ff_upload`, etc. --- ## 🧰 Example [Mouse example](https://github.com/joleuger/vuinputd/blob/main/vuinput-examples/src/bin/mouse-advanced.rs) [Keyboard example](https://github.com/joleuger/vuinputd/blob/main/vuinput-examples/src/bin/keyboard-advanced.rs) > ⚠️ Requires Linux and appropriate permissions to access `/dev/uinput`. --- ## 🧩 Related Crates * [`uinput`](https://crates.io/crates/uinput): High-level abstraction for creating virtual input devices. * [`nix`](https://crates.io/crates/nix): Provides low-level Unix system call wrappers and `ioctl` macros. --- ## 📜 License Licensed under the [MIT License](LICENSE). --- ## 👤 Author **Johannes Leupolz** [dev@leupolz.eu](mailto:dev@leupolz.eu)