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.
When using the devinput driver, you can use name=STRING or
phys=STRING 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 dmesg(1) to find the
name and bus address (the names used under /dev/input/by-id are not
always usable).
-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 default port is 8765. No
security checks are currently implemented. The listening lircd
instance will send all IR events to the connecting lircd instances.
-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'.
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]
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
'_UP'.
-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.
-u, --uinput
[DEPRECATED] Enable automatic generation of Linux input events.
Obsoleted by the lircd-uinput(8) tool and the lircd-uinput.service
systemd service.
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.
LIRC_OPTIONS_PATH
Options file path, see FILES.
LIRC_PLUGINDIR
Plugin load path, se DRIVER LOADING.
LIRC_DEBUG_OPTIONS
If set, enables debugging in early stages when the --debug option
is yet not parsed.
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. You should start it in some init script depending on your system. Besides the systemd setup which is installed by default there are also example scripts for other distros and init systems in the contrib directory.
irdb-get(1) lirc-setup(1) lircd.conf(5) irrecord(1) lirc(4) lircd-uinput(8)
Personal Opportunity - Free software gives you access to billions of dollars of software at no cost. Use this software for your business, personal use or to develop a profitable skill. Access to source code provides access to a level of capabilities/information that companies protect though copyrights. Open source is a core component of the Internet and it is available to you. Leverage the billions of dollars in resources and capabilities to build a career, establish a business or change the world. The potential is endless for those who understand the opportunity.
Business Opportunity - Goldman Sachs, IBM and countless large corporations are leveraging open source to reduce costs, develop products and increase their bottom lines. Learn what these companies know about open source and how open source can give you the advantage.
Free Software provides computer programs and capabilities at no cost but more importantly, it provides the freedom to run, edit, contribute to, and share the software. The importance of free software is a matter of access, not price. Software at no cost is a benefit but ownership rights to the software and source code is far more significant.
Free Office Software - The Libre Office suite provides top desktop productivity tools for free. This includes, a word processor, spreadsheet, presentation engine, drawing and flowcharting, database and math applications. Libre Office is available for Linux or Windows.
The Free Books Library is a collection of thousands of the most popular public domain books in an online readable format. The collection includes great classical literature and more recent works where the U.S. copyright has expired. These books are yours to read and use without restrictions.
Source Code - Want to change a program or know how it works? Open Source provides the source code for its programs so that anyone can use, modify or learn how to write those programs themselves. Visit the GNU source code repositories to download the source.
Study at Harvard, Stanford or MIT - Open edX provides free online courses from Harvard, MIT, Columbia, UC Berkeley and other top Universities. Hundreds of courses for almost all major subjects and course levels. Open edx also offers some paid courses and selected certifications.
Linux Manual Pages - A man or manual page is a form of software documentation found on Linux/Unix operating systems. Topics covered include computer programs (including library and system calls), formal standards and conventions, and even abstract concepts.