@hackage evdev2.3.1.1

Bindings to libevdev

Evdev

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:

Permissions

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).