evdev: Bindings to libevdev

[ bsd3, library, system ] [ Propose Tags ]

Provides access to the Linux event device interface.

[Skip to Readme]


Maintainer's Corner

Package maintainers

For package maintainers and hackage trustees


Versions [RSS],,,,,,,,,,,, 2.1.0, 2.2.0, 2.3.0, 2.3.1, (info)
Change log CHANGELOG.md
Dependencies base (>=4.11 && <5), bytestring (>=0.10 && <0.13), containers (>=0.6.2 && <0.7), extra (>=1.6.18 && <1.8), filepath-bytestring (>=1.4.2 && <1.5), monad-loops (>=0.4.3 && <0.5), mtl (>=2.2 && <2.4), rawfilepath (>=1.0 && <1.2), time (>=1.9.3 && <1.14), unix (>=2.8 && <2.9) [details]
License BSD-3-Clause
Author George Thomas
Maintainer George Thomas
Category System
Home page https://github.com/georgefst/evdev
Source repo head: git clone git://github.com/georgefst/evdev.git
Uploaded by GeorgeThomas at 2023-09-01T11:12:18Z
Distributions NixOS:
Reverse Dependencies 1 direct, 0 indirect [details]
Downloads 3371 total (36 in the last 30 days)
Rating 2.0 (votes: 1) [estimated by Bayesian average]
Your Rating
  • λ
  • λ
  • λ
Status Docs available [build log]
All reported builds failed as of 2023-09-01 [all 1 reports]

Readme for evdev-

[back to package description]


This library provides access to the Linux evdev interface, for reading input events from devices. It uses c2hs-generated bindings to libevdev, which should be available on almost any modern Linux distro.

It aims to expose the full set of functionality exposed by libevdev, while providing stronger types, and a higher level of abstraction - no worrying about memory management, ordering of operations etc.

For a higher-level, more functional API based on event streams, see evdev-streamly.

This package uses ByteStrings (a.k.a RawFilePaths) ubiquitously. You may want to substitute use of packages like filepath, directory, unix and process with ByteString-friendly alternatives:


Your user will need to be a member of the input group in order to read from devices. Try usermod -a -G input $USER.

To create virtual devices (i.e. to use the Evdev.UInput module) you will need permission to write to /dev/uinput. This can usually be achieved by creating a group specially for uinput permissions:

sudo groupadd uinput
sudo usermod -a -G uinput $USER
echo 'KERNEL=="uinput", GROUP="uinput", MODE:="0660", OPTIONS+="static_node=uinput"' | sudo tee -a /etc/udev/rules.d/99-uinput.rules > /dev/null

Log out and back in for this to take effect (or try sudo udevadm control --reload-rules && sudo udevadm trigger).