Bindings to libevdev.
Provides access to the Linux event device interface.
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 ByteString
s (a.k.a RawFilePath
s) 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
).