lircd-uinput - Forward lirc button presses as uinput events
lircd-uinput [ options
]... [lircd output socket
lircd-uinput [ options
reads decoded button press events from a lircd(8)
output socket and injects these as key events to the kernel uinput device. The
kernel makes these events available to other applications on a
device, just as for regular input hardware.
is designed to run as a systemd service.
The lircd output socket
argument is an optional path to the lircd output
socket. It defaults to the output
value in the [lircd] section of the
lirc_options config file, falling back to /var/run/lirc/lircd.
If a plain file is given instead of a socket it is supposed to contain button
press events formatted as documented in lircd(8)
will in this case send the codes in this file and exit.
In order to work, release events must be sent to the uinput device. See REPEAT
can only handle button events named using the official
namespace i. e., buttons known to the kernel. See NOTES.
Unless the /dev/uinput
default permissions are changed lirc-uinput
needs to run as root. See NOTES.
device created by the kernel can be tricky to
locate, and is not stable. See NOTES.
- -u --uinput <device>
- uinput kernel device, defaults to /dev/uinput.
- -r --release-suffix
- lircd-uinput generates different events depending on
if the button name ends with the release-suffix or not. Defaults to
_EVUP . See REPEAT HANDLING
- -R --repeat <delay[,period]
- Set kernel autorepeat parameters of the created
/dev/input/event device. delay is the time before repeating
a key event, period is the time between repeated key events. Both
values are in milliseconds, separated by a comma. Any value can be omitted
or set to 0 in which case the kernel/system defaults are used. See REPEAT
- -a --add-release-events
- Generate synthetic release events. This option is mandatory
unless lircd is using the deprecated --release option. The
timeout used can be modified using the release-timeout key in the
lircd-uinput section of the lirc_options.conf file. Useless
if used with a text file as input. . See REPEAT HANDLING
- -d --disabled <disabled buttons file
- The path of a file which contains name of buttons to be
disabled, one per line. By default, lircd-uinput sends all buttons
found in input. See NOTES.
- -O --options-file <path>
- Options file holding default values. Defaults to
- -L, --logfile <logfile path>
- Select the log file, either the string 'syslog' indicating
that syslog(1) should be used or a log file path. The default is to use
- -D, --loglevel [level]
- Determine the amount of logging information. level
can be a symbolic syslog level: 'error','warning, 'info', 'notice' or
´debug'. lircd-uinput also defines three additional levels
'trace', 'trace1' and 'trace2' which gives even more messages ('trace2'
bringing the most). However, in the log these messages are marked as
- -h --help
- Display usage summary.
- -v --version
- Display version info.
After receiving a keypress event the kernel will start emitting repeat events to
applications until lircd-uinput
emits a corresponding release event.
The release events could be created by lircd(8)
using the deprecated
option. Such events typically has an _EVUP
appended to the original keypress event.
The preferred way is that lircd-uinput
creates release events using the
option. Combining both of these options might give
Note that the linux kernel uses the suffix _UP (which was used py lircd prior to
0.10.0) for other purposes since 4.7.
In any case, the repeat events generated by the kernel can be tweaked using the
option. This can set the time between the keypress event and
the first repeat event and the time between each repeat event. The
option should only be used if no other program or udev rule is
automatically setting up key repeat parameters. By design the repeat
parameters can't be set in an atomic way during input device registration so
this option is prone to race conditions.
Note that the lircd-uinput
repeat-event handling differs from
which implements (emulates) hardware autorepeat in the events
sent to uinput (event.value == 2). lircd-uinput
only sends keypress and
release events, trusting the kernel autorepeat support.
By default, the dev/uinput
device is not writable for regular users. Thus
needs to run as root unless these permissions are changed.
One way to achieve this is an udev rule. The lirc distribution contains an
example rule which makes the lircd-uinput
device writable for users in
the group lirc. Another way is to use lircd-setup(8)
to change the
permissions. As distributed, the lirc_options.conf
file contains an
commented example using setfacl(1)
can only forward lircd button events with names from the
legal namespace defined by the kernel. A complete list of possible button
names is available in /usr/include/linux/input-event-codes.h
using irrecord -l
. Other button names are silently dropped.
The event keycode depends on the name that was given a button in the lircd
config file e.g., if the button is named KEY_1
the keycode 1
will be generated.
The kernel makes the events generated by lircd-uinput
available on a
device like /dev/input/event12.
This device name is
not stable and typically varies after a reboot. The lirc distribution contains
a udev rule which if installed creates a device link named
which always can be used.
is designed to replace the currently deprecated
option to lircd(8).
forwards all events unless blocked by the --disabled
option. On the
other hand, lircd --uinput
does not forward all events - the
heuristics used has been changed over versions.
Since the device name is fixed, only one instance of lircd-uinput
on a system.