lircd - Decode infrared signals and provide them on a
socket.
lircd [options] [config file]
The main task of lircd is to decode the infrared signals and
provide an uniform interface for client applications. Clients can connect to
lircd through a Unix domain socket, by default /var/run/lirc/lircd. Using
this socket they will get the infrared codes received by lircd and they can
send commands to lircd.
- config
file
- The configuration file, by default /etc/lirc/lircd.conf. A relative path
is interpreted from /etc/lirc. The default configuration file includes all
files in /etc/lircd.conf.d.
- Each remote which should be decoded by lircd usually requires that a
specific file is used e. g., by copying it to /etc/lirc/lirc.conf.d/. The
format is described in lircd.conf(5). Configuration files could be found
using irdb-get(1) or lirc-setup(1). It's also possible to generate a
config file using irrecord(1)
Common options:
- -d, --device
<device>
- Select the character device which lircd should read from. The default is
currently /dev/lirc0 on most systems.
- Some drivers, including the default devinput driver, supports the
auto device which picks the first usable device found for the
actual driver.
-
- When using the devinput driver name=STRING or phys=STRING
can be used to select the device; lircd will look in /dev/input to find a
device with a matching description. This is useful in case the device name
isn't fixed. STRING may contain the '*' and '?' wildcards and '\'
to mark them as literal. Use mode2 --driver devinput --list-devices
to list the actual devices.
- -H, --driver
<driver>
- The driver to use. Using --driver help lists all available drivers,
see DRIVER LOADING below.
- -h, --help
- Displays short help message.
Other options:
- -a,
--allow-simulate
- Enable the SIMULATE command which can be issued using irsend(1) or the
client API. This will allow simulating arbitrary IR events from the
command line. Use this option with caution because it will give all users
with access to the lircd socket wide control over the system. E.g., if you
have configured your system to shut down by a button press on your remote
control, everybody will be able to shut down your system from the command
line.
- -c, --connect
[host[:port]][,[host[:port]]]
- Connects to other lircd servers that provide a network socket at the given
host and port number (see --listen). The number of such connections
is currently limited to 100. The connecting lircd instance will receive IR
events from the lircd instance it connects to. To connect to multiple
servers, add them as a comma separated list.
- -e, --effective-user
<uid>
- If started as user root, lircd drops it privileges and runs as user
<uid> after opening files etc.
- -i,
--immediate-init
- Lircd normally initializes the driver when the first client connects. If
this option is selected, the driver is instead initialized immediately at
start.
- -A, --driver-options
key:value[|key:value...]
- Set one or more options for the driver. The argument is a list of
key:value pairs delimited by '|'. The key can not contain spaces, but such
are allowed in the value part. Certain characters including '#' and ';'
are used as comment markers in the config file and are not allowed
anywhere.
- -Y, --dynamic-codes
[EXPERIMENTAL]
- Allows use of codes which have been decoded for one remote but are not
defined in lircd.conf. New codes are dynamically created with a default
name. This feature is experimental and subject to all sorts of changes. It
has not ben tested thoroughly.
- -l, --listen
[[address:]port]]
- Let lircd listen for network connections on the given address/port. The
default address is 0.0.0.0, which means that connections on all network
interfaces will be accepted. The address must be given in dotted numerical
form. Port defaults to 8765. The listening lircd instance will send all IR
events to the connecting lircd instances without any security checks.
- On non-glibc platforms the address:port argument is mandatory, but can be
given as an empty string e. g. --listen= which then defaults to
0.0.0.0:8765.
- -L, --logfile
<logfile path>
- Select the lircd daemon log file. logfile is either the string 'syslog'
indicating that syslog(1) should be used or a log file path. The default
is to use syslog.
- -D, --loglevel
[level]
- Determine the amount of logging information. level can be a
symbolic syslog level: 'error','warning, 'info', 'notice' or 'debug'.
lircd 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 'debug'.
- On non-glibc platforms the level argument is mandatory, but can be
given as an empty string e. g. --loglevel= which then defaults to
debug.
- The level can also be an integer in the range 3 (almost no messages) to
10.
- -O, --options-file
<path>
- File containing default values for all options. A relative path is
interpreted from current directory. See [FILES] below.
- -o, --output <output
socket>
- Select Unix domain socket, which lircd will write remote key codes to. The
default currently is /var/run/lirc/lircd.
- -p, --permission
<perm>
- Gives the file permission of the output socket if it has to be created in
octal representation. See chmod(1). If no --permission option is given
when the socket is initially created the default is to give all users read
and write permissions (0666 in octal representation). If the socket
already exists this option has no effect.
- -p, --pidfile
<path>
- Select the lircd daemon pid file, defaults to
/var/run/lirc/lircd.pid.
- -U --plugindir
<path>
- Sets the directory from which lircd loads it's userspace drivers. These
are *.so files, by default found as described under DRIVER LOADING. The
argument is a :-separated search path.
- -r, --release
[suffix]
- This option is deprecated and will be removed in an upcoming release. See
lircd-uinput(8) for a replacement.
- Enables automatic generation of release events for each button press.
lircd will append the given suffix to the button name for each release
event. If no suffix is given the default suffix is '_EVUP'.
- Note the suffix _UP, which was used by lircd prior to 0.10.0, is
used by the linux kernel for other purposes since 4.7.
- -R, --repeat-max
<limit>
- Sets an upper limit to the number of repeats when sending a signal. The
current default is 600. A SEND_START request will repeat the signal this
many times. Also, if the number of repeats in a SEND_ONCE request exceeds
this number, it will be replaced by this number.
When decoding a button press or receiving a SIGHUP signal
lircd.conf lircd broadcasts messages to all connected clients.
For each decoded button press a package is made available on the
socket. This is printable data formatted as:
<code> <repeat count> <button name> <remote control name>
e.g.,
0000000000f40bf0 00 KEY_UP ANIMAX
The fields are:
- code
- A 16 hexadecimal digits number encoding of the IR signal. It's usage in
applications is deprecated and it should be ignored.
- repeat
count
- shows how long the user has been holding down a button. The counter will
start at 0 and increment each time a new IR signal has been received.
- button
name
- is the name of a key defined in the lircd.conf file.
- remote control
name
- is the mandatory name attribute in the lircd.conf config file.
These packets are broadcasted to all clients. The only other
situation when lircd broadcasts to all clients is when it receives the
SIGHUP signal and successfully re-reads its config file. Then it will send a
SIGHUP packet to its clients indicating that its configuration might have
changed. The sighup packet is three lines
BEGIN
SIGHUP
END
Applications can also send commands to lircd over the socket
interface. The most common task is sending data, but there are also other
commands. Each command is a single printable line, terminated with a
newline. For each command, lircd replies with a reply package.
Supported commands:
- SEND_ONCE
<remote control> <button name> [repeats]
- Tell lircd to send the IR signal associated with the given remote
control and button name, and then repeat it repeats
times. repeats is a decimal number between 0 and repeat_max. The
latter can be given as a --repeat-max command line argument to lircd, and
defaults to 600. If repeats is not specified or is less than the
minimum number of repeats for the selected remote control, the minimum
value will be used.
- SEND_START
<remote control name> <button name>
- Tell lircd to start repeating the given button until it receives a
SEND_STOP command. However, the number of repeats is limited to
repeat_max. lircd won't accept any new send commands while it is
repeating.
- SEND_STOP
<remote control name> <button name>
- Tell lircd to abort a SEND_START command.
- LIST [remote
control]
- Without arguments lircd replies with a list of all defined remote
controls. Given a remote control argument, lircd replies with a list of
all keys defined in the given remote.
- SET_INPUTLOG
[path]
- Given a path, lircd will start logging all received data on that file. The
log is printable lines as defined in mode2(1) describing pulse/space
durations. Without a path, current logfile is closed and the logging is
stopped.
- DRV_OPTION
key value
- Make lircd invoke the drvctl_func(DRVCTL_SET_OPTION, option) with option
being made up by the parsed key and value. The return package reflects the
outcome of the drvctl_func call.
- SIMULATE key
data
- Given key data, instructs lircd to send this to all clients i. e.,
to simulate that this key has been decoded. The key data must be
formatted exactly as the packet described in [SOCKET BROADCAST MESSAGES
FORMAT], notably is the number of digits in code and repeat count
hardcoded. This command is only accepted if the --allow-simulate command
line option is active.
- SET_TRANSMITTERS
transmitter mask
- Make lircd invoke the drvctl_func(LIRC_SET_TRANSMITTER_MASK,
&channels), where channels is the decoded value of transmitter
mask. See lirc(4) for more information.
- VERSION
- Tell lircd to send a version packet response.
The protocol guarantees that broadcasted messages won't interfere
with reply packets. But broadcasts may appear at any point between packets.
The only exception are SIGHUP packages. These may appear just after you have
sent a command to lircd, so you have to make sure you don't confuse them
with replies.
The format of the reply packet is
BEGIN
<command>
[SUCCESS|ERROR]
[DATA
n
n lines of data]
END
If the command was successful, data is only sent for the commands
that return some information. Note that a packet containing 0 lines of data
can be a valid reply.
Traditionally lircd has been running as root since
accessing kernel devices like /dev/lirc0 by default requires root
privileges. However, running a long-running service like this is a major
security issue.
The lirc distribution contains example udev rules which makes
/dev/lirc[0-9] , USB and serial devices accessible by the lirc
user. Using these rules, it is possible to run lircd as a regular
user and group such as lirc.
- /etc/lirc/lircd.conf
- Main config file, see lircd.conf(5).
- /etc/lirc/lirc_options.conf
- The options file. lircd handles the values under the [lircd] section in
this file. The location can be changed using the -O/--options-file
command-line option or using the environment variable LIRC_OPTIONS_PATH.
The values here are used as defaults for any option not present on command
line.
Drivers are loaded dynamically. This is done from a traditional
*ux ´:´-separated path where each component in the path is
searched (leading part first, trailing last).
The path used for this is determined by (falling priority):
- The --plugindir option.
- The 'plugindir' entry in the [lircd] section of the lirc_options.conf
file.
- The environment variable LIRC_PLUGINDIR.
- A hardcoded default (/usr/lib/x86_64-linux-gnu/lirc/plugins).
- HUP
- On receiving SIGHUP lircd re-reads the lircd.conf configuration file (but
not lirc_options.conf) and adjusts itself if the file has changed.
- USR1
- On receiving SIGUSR1 lircd makes a clean exit.
lircd is a daemon. It should be started in some
system-dependent init script. By default, lirc ships with systemd files
enabling user to control the lircd service.