Linux input layer driver
Usually you don't have to create a config file
yourself if you use this driver as this generic
config file should already contain all
existing keys.
This driver uses /dev/input/event0 as
its input device per default. You should provide
the correct device as --device parameter on the
lircd and irrecord command line.
Sometimes the input device mapping changes
between system reboots. In that case you are
also able to specify the correct input device by
its name or physical location by preceding the
desired value with name= or
phys=. Shell wild-cards can be used
for the given value but must be protected from
the shell with proper quoting.
For example you can use:
--device=name='Budget-CI dvb ir *'
--device=phys='pci*/ir0'
With the following script you can list all names
associated with all existing Linux input
devices.
for i in /sys/class/input/input* ; do echo -n "$(basename "$i"): "; cat "$i/name"; done
This information also can be found in
/proc/bus/input/devices.
Conflict with HAL
lircd requires exclusive access to the IR-receiver to work
reliably. On some systems other processes may try to compete for
access to the same device. In these cases lircd will send the following
message to the system logs:
lircd: can't get exclusive access to events coming from
`<device-path>' interface
Another symptom is that the "irw" utility will fail to register
keystrokes from the remote-control-device.
A specific case of a potential conflict is on systems that implement
the hardware abstraction layer (HAL) from freedesktop.org. This
software is used on many Linux distributions and will take control of
a variety of devices including all input devices. All IR-receivers
which work through LIRC's devinput driver, i.e. has
'REMOTE_DRIVER="devinput"' in the configuration of LIRC, can
potentially have events intercepted by the HAL-daemon (hald) unless
hald is instructed to ignore the device.
The following example illustrates how this conflict is resolved on a
ubuntu-8.10 installation with a IR receiver on a Hauppauge HVR4000
TV-card:
1. The problem is confirmed by log entries (/var/log/daemon.log) and
irw's behaviour as described above. "irw" in a xterm-window will appear
to produce garbage characters which in fact are key-codes presented to
the x-server through HAL. Some of the keys produce working x-events
for left/right/up/down/enter and numbers, while others don't seem to
work at all.
2. HAL comes with a utility, lshal, that lists the devices it knows
about. The entry for this particular IR receiver reads:
udi = '/org/freedesktop/Hal/devices/pci_14f1_8802_logicaldev_input'
info.addons.singleton = {'hald-addon-input'} (string list)
info.callouts.add = {'debian-setup-keyboard'} (string list)
info.capabilities = {'input', 'input.keys', 'button'} (string list)
info.category = 'input' (string)
info.parent = '/org/freedesktop/Hal/devices/pci_14f1_8802' (string)
info.product = 'cx88 IR (Hauppauge WinTV-HVR400' (string)
info.subsystem = 'input' (string)
info.udi = '/org/freedesktop/Hal/devices/pci_14f1_8802_logicaldev_input' (string)
input.device = '/dev/input/event7' (string)
input.originating_device = '/org/freedesktop/Hal/devices/pci_14f1_8802' (string)
input.product = 'cx88 IR (Hauppauge WinTV-HVR400' (string)
input.x11_driver = 'evdev' (string)
input.xkb.layout = 'no' (string)
input.xkb.model = 'pc105' (string)
input.xkb.options = 'lv3:ralt_switch' (string)
input.xkb.rules = 'evdev' (string)
linux.device_file = '/dev/input/event7' (string)
linux.hotplug_type = 2 (0x2) (int)
linux.subsystem = 'input' (string)
linux.sysfs_path = '/sys/class/input/input7/event7' (string)
In short this explains that the device that LIRC was complaining about
in the log (/dev/input/event7) is controlled by hald, and already
prepared as an input-device for the system's X-server.
3. The info.product string will work as a unique identifier and can be
used to create a file containing the following XML-formatted rule to
make hald ignore the IR-receiver:
= = = cut here = = =
<?xml version="1.0" encoding="UTF-8"?>
<deviceinfo version="0.2">
<device>
<match key="info.product" contains_ncase="cx88 ir">
<merge key="info.ignore" type="bool">true</merge>
</match>
</device>
</deviceinfo>
= = = cut here = = =
The rule does a non-case-sensitive search for devices that has "cx88
ir" in its info.product attribute and places an instruction to ignore
it. Put this in a file called 10-ignore-cx88-ir.fdi. The location of
rules for HAL and further explanation of technical details is found in
it's documentation. The example system (ubuntu-8.10) needs this file
in the /usr/share/hal/fdi/preprobe/20thirdparty/ directory.
4. HAL and LIRC can now be restarted (or reboot the system). Then LIRC
will get exclusive access to the IR receiver, "irw" will display
IR-events as expected, and the following output from "lshal" confirms
that it now ignores the IR device:
udi = '/org/freedesktop/Hal/devices/temp/112'
info.ignore = true (bool)
info.parent = '/org/freedesktop/Hal/devices/pci_14f1_8802' (string)
info.product = 'Ignored Device' (string)
info.subsystem = 'input' (string)
info.udi = '/org/freedesktop/Hal/devices/ignored-device' (string)
input.device = '/dev/input/event7' (string)
input.originating_device = '/org/freedesktop/Hal/devices/pci_14f1_8802' (string)
input.product = 'cx88 IR (Hauppauge WinTV-HVR400' (string)
linux.device_file = '/dev/input/event7' (string)
linux.hotplug_type = 2 (0x2) (int)
linux.subsystem = 'input' (string)
linux.sysfs_path = '/sys/class/input/input7/event7' (string)
[LIRC homepage]
The LIRC Manual, last update: 24-May-2009
|