Technical insight - uinput




Kernel 2.6 with evdev, uinput support and libusb >= 1.0 are necessary to compile and execute. And, obviously, USB support, minimum kernel configuration as follows :


Device Drivers  --->
 USB support  --->
  <*> Support for Host-side USB
  ---   USB Host Controller Drivers
  < >   EHCI HCD (USB 2.0) support
  <*>   OHCI HCD support
  <*>   UHCI HCD (most Intel and VIA) support


Loading uinput module

If uinput is built as a kernel module, it must be loaded before launching the application, as superuser :


# modprobe uinput


Make sure you autoload the module if your distro does not by default, this is distro-specific (in gentoo : /etc/modules.autoload.d/kernel-2.6 or /etc/conf.d/modules in baselayout-2).


Permissions for uinput

/dev/input/uinput device requires write access for user running the application, you can perform as superuser :


# chmod 666 /dev/input/uinput


if permissions are not appropriate. A better automatic solution is to use udev rules, a sample is provided with this package. Copy sample file to /etc/udev/rules.d/ (or another path depending on your distro) and reload udev rules (or reboot). Sample provided assumes you have created a uinput group and have assigned your user(s) to it, you can change to another group if you so wish. Content of the rules file :


KERNEL=="uinput", GROUP:="uinput", MODE:="0660"


Note that for some distros (such as Ubuntu Maverick), uinput is built in the kernel (hence no module loading) and default device is /dev/uinput, but the sample udev rules file provided will function anyway.


Permissions for pid file

On execution, chmfp creates a pid file to avoid multiple instances running. This pid file is created in /var/tmp/ as a default directory, you can change this in chmfp.h before compilation. This directory requires read/write access for user executing the application.