perform actions according to USB HID
usbhidaction can be used to execute
commands when certain values appear on HID controls. The normal operation
for this program is to read the configuration file and then become a daemon
and execute commands as the HID items specify. If a read from the HID device
fails, the program dies; this will make it die when the USB device is
The options are as follows:
- Specify a path name for the config file.
- Toggle the daemon flag.
- Specify a path name for the device to operate on. If device is numeric, it is taken to be the USB HID device number. If it is a relative path, it is taken to be the name of the device under /dev. An absolute path is taken to be the literal device pathname.
- Ignore HID items in the config file that do not exist in the device.
- Be verbose, and do not become a daemon.
The config file will be re-read upon receiving
The configuration file has a very simple format. Each line describes an action; if a line begins with a whitespace it is considered a continuation of the previous line. Lines beginning with `#' are considered as comments.
Each line has three parts: a name of a USB HID item, a value for that item, and an action. There must be whitespace between the parts.
The item names are similar to those used by usbhidctl(1), but each part must be prefixed by its page name.
The value is simply a numeric value. When the item reports this value, the action will be performed. If the value is `*', it will match any value.
The action is a normal command that is executed by using fork(2). Before it is executed some substitution will occur: `$n' will be replaced by the nth argument on the command line, `$V' will be replaced by the numeric value of the HID item, `$N' will be replaced by the name of the control, and `$H' will be replaced by the name of the HID device.
/usr/share/misc/usb_hid_usages The HID usage table.
The following configuration file can be used to control the master volume and muting of an azalia(4) device using the multimedia keys on a Belkin USB keyboard.
# The volume range is 0..1. Moving 0.05 volume steps, each keypress # moves quickly through the volume range but still has decent # granularity. Consumer:Volume_Increment 1 sndioctl -f $1 output.level=+0.05 Consumer:Volume_Decrement 1 sndioctl -f $1 output.level=-0.05 Consumer:Mute 1 sndioctl -f $1 output.mute=!
A sample invocation using this configuration would be
$ usbhidaction -f /dev/uhid1 -c conf snd/0
usbhidctl(1), usbhid(3), uhid(4), usb(4)
usbhidaction command first appeared in