LIRC
来自 官方网站
- LIRC (Linux Infrared Remote Control) 是一个软件包,可以解码和发送许多(但不是全部)常用遥控器的红外信号。
本文介绍了使用串行或 USB 红外设备设置和使用 LIRC。
LIRC 是一个守护进程,可以将受支持的遥控器上的按键转换为特定于程序的命令。在此上下文中,“特定于程序”一词意味着按键可以根据哪个程序正在运行并从 LIRC 接收命令而执行不同的操作。
- 按下遥控器上的按钮会导致其发送红外或射频信号。
- 信号由连接到 Linux 计算机的接收器接收。
- 内核(通过正确的模块)使用来自遥控器的脉冲数据呈现在设备上,例如
/dev/lirc0
、/dev/input/eventX
、/dev/ttyUSBX
或/dev/ttyS0
。 /usr/bin/lircd
使用来自/etc/lirc/lircd.conf.d/foo.conf
的信息将脉冲数据转换为按钮按下信息。- 使用 LIRC 的程序根据
~/.config/lircrc
或程序特定的映射将来自/usr/bin/lircd
的按钮按下信息转换为用户定义的操作。
安装
安装 lirc 软件包。如果您需要音频驱动程序,请安装 lirc-gitAUR。
配置
接收器和发射器配置
LIRC 服务的驱动程序和/或设备可能需要指定才能正常运行。如果服务在运行依赖 LIRC 的程序(如 irrecord)时突然停止,请在 journalctl 输出中查找如下消息
Driver `devinput' not found or not loadable (wrong or missing -U/--plugindir?). readlink() failed for "auto": No such file or directory
在配置文件中设置这些,然后重启服务。
/etc/lirc/lirc_options.conf
[lircd] driver = driver-name device = /dev/path-to-dev
串口
现代内核具有 serial_ir 模块,它取代了旧的 lirc_serial 驱动程序。它甚至支持连接到主板串口的 DIY 接收器和发射器。安装 setserialAUR 并运行
# setserial /dev/ttyS0 uart none # modprobe serial_ir
加载 serial_ir 模块后,设备 /dev/lirc0
将由内核创建。如果不是,请检查 日志 中是否有任何相关错误。串口设备的 LIRC 配置示例
/etc/lirc/lirc_options.conf
[lircd] driver = default device = auto [modinit] code = /usr/bin/setserial /dev/ttyS0 uart none code1 = /usr/sbin/modprobe serial_ir
声卡
带有连接的外部 DIY 电路的声卡可用于接收 和 发送 红外代码。
audio_alsa 驱动程序 包含在 lirc 中,但仅支持接收。
使用 alsamixer
取消麦克风输入静音并设置足够的增益。您可以使用 audacity 检查波形和增益。应该有可区分的方波脉冲:既不是平直的,也不是过载的。同样,良好的解调脉冲也很容易通过耳朵感知。请注意,LIRC 和 irrecord
读取右声道中的正脉冲。负脉冲将不起作用。
/etc/lirc/lirc_options.conf
driver = audio_alsa device = default
audio 驱动程序 包含在 lirc-gitAUR 中,并支持接收和发送。请注意,默认延迟约为 0.02 可能会导致“Warning: Output underflow”和传输损坏 - 接收器将不会响应它。尝试更高的值,例如 0.05。
增加声卡输出音量,否则 LED 信号会很弱且范围很小。LED 闪烁可以用智能手机相机检测到,因为它对红外波长敏感。
/etc/lirc/lirc_options.conf
driver = audio device = ALSA:default@48000:0.05
远程配置
目录 /etc/lirc/lircd.conf.d/
包含用于遥控器的系统范围配置文件。每个 *.conf 文件对应一个设备,并描述其协议、扫描码和键码。它允许 LIRC 接收和发送特定硬件的信号。这些文件未包含在 lirc 软件包中,应在某处找到或由用户创建。
搜索远程配置
可以在 LIRC 遥控器数据库 中找到大量配置文件。访问该 URL 或使用 irdb-get(1) 搜索数据库。
使用 irdb-get
查找 “Streamzap” 遥控器的配置文件的示例
$ irdb-get find stream
atiusb/atiusb.lircd.conf digital_stream/DTX9900.lircd.conf snapstream/Firefly-Mini.lircd.conf streamzap/PC_Remote.lircd.conf streamzap/streamzap.lircd.conf x10/atiusb.lircd.conf
$ irdb-get download streamzap/streamzap.lircd.conf
Downloaded sourceforge.net/p/lirc-remotes/code/ci/master/tree/remotes/streamzap/streamzap.lircd.conf as streamzap.lircd.conf
一旦确定,将所需的 .conf 复制到 /etc/lirc/lircd.conf.d/
以允许守护程序初始化对其的支持。
# cp streamzap.lircd.conf /etc/lirc/lircd.conf.d/
创建远程配置
可以使用 irrecord(1) 创建遥控器配置,它会指导用户完成该过程。如果使用检测到的遥控器,请按如下方式调用它
# irrecord --device=/dev/lirc0 MyRemote
该程序将指示用户开始敲击遥控器上的按键以学习它,最终映射出每个按钮及其相应的扫描码。完成后,将生成的文件保存到 /etc/lirc/lircd.conf.d/foo.conf
并继续。考虑与他人共享配置文件。
应用程序特定操作
通过将各自的配置文件放在 ~/.config/lircrc/
中,将键码绑定到应用程序特定的操作,如果需要,应手动创建该目录,请参阅 lircrc(5)。这仅适用于支持 LIRC 的应用程序,例如 MPlayer、VLC、MythTV 和 totem(Kodi 也支持 LIRC,但以非标准方式进行,请参阅 Kodi#使用遥控器)。
在单独的文件中定义这些应用程序特定的配置,并将它们包含在 lircrc 中,例如
include "~/.config/lircrc/mplayer" include "~/.config/lircrc/mythtv" include "~/.config/lircrc/vlc"
以普通用户身份运行
默认情况下,lircd 以 root 身份运行。为了提高稳定性和安全性,上游建议以普通用户身份运行它。请参阅 此 链接的附录 14。
使用 AUR 软件包 lirc-user-service
提供了 lirc-user-serviceAUR,它可以自动完成所有操作。
测试
启动/启用 lircd.service
。
接收命令
运行 irw(1),将遥控器指向接收器并按下一些按钮。接收到的代码将打印到 stdout。
$ irw
000000037ff07bfe 00 One mceusb 000000037ff07bfd 00 Two mceusb 000000037ff07bfd 01 Two mceusb 000000037ff07bf2 00 Home mceusb 000000037ff07bf2 01 Home mceusb
如果 irw
没有输出
- 运行 mode2 或 xmode2 以查看 LIRC 是否实际从红外传感器读取到任何内容,如果没有 - 检查硬件
- 如果 mode2 接收到脉冲数据,请检查
/etc/lirc/lircd.conf.d/
中的配置文件是否有错误
发送命令
列出已注册的遥控器(配置文件)
$ irsend LIST "" ""
LG_6710CMAP01A
列出特定设备的可用代码
$ irsend LIST LG_6710CMAP01A ""
0000000000007887 KEY_POWER 000000000000f807 KEY_MUTE 000000000000e817 KEY_VOLUMEUP ...
选择已发现的设备 LG_6710CMAP01A
并发送命令 KEY_POWER
$ irsend SEND_ONCE LG_6710CMAP01A KEY_POWER
故障排除
远程功能如同键盘
当使用 Xorg 时
Xorg 检测到一些遥控器,例如 Streamzap USB PC Remote,作为人机接口设备 (HID),这意味着某些或所有按键将显示为击键,就像从物理键盘输入一样。如果要使用 LIRC 管理设备,此行为将带来问题。
要禁用,请创建以下文件并重启 X
/etc/X11/xorg.conf.d/90-streamzap.conf
Section "InputClass" Identifier "Ignore Streamzap IR" MatchProduct "Streamzap" MatchIsKeyboard "true" Option "Ignore" "true" EndSection
不要忘记根据 Name
中显示的属性更改 MatchProduct
属性,该属性来自以下输出
$ grep -e IR /proc/bus/input/devices
例如,对于 N: Name="cx88 IR (WinFast DTV2000 H rev."
,使用 WinFast
不使用 Xorg 时
通过创建 /etc/modprobed.d/streamzap.conf
来黑名单有问题的模块,以抑制此行为。为 Streamzap 遥控器提供了一个示例。
install ir_sharp_decoder /bin/false install ir_xmp_decoder /bin/false install ir_rc5_decoder /bin/false install ir_nec_decoder /bin/false install ir_sony_decoder /bin/false install ir_mce_kbd_decoder /bin/false install ir_jvc_decoder /bin/false install ir_rc6_decoder /bin/false install ir_sanyo_decoder /bin/false
更改默认配置
从 irw
获取不到任何输出的用户可能在 /etc/lirc/lirc_options.conf
中错误地设置了默认配置(或者可能已被更新覆盖)。
首先,检查 /dev/lirc0
是否存在
$ mode2 --driver default --device /dev/lirc0
在按下遥控器上的按钮时观察输出。如果存在输出,请编辑 /etc/lirc/lirc_options.conf
,并根据需要更改 driver 和 device。
如果没有显示输出,则任务变为找到正确的驱动程序/设备组合。首先检查 lirc 默认检测到的组合。从 v4l-utils 软件包运行 ir-keytable
并检查输出。它看起来会类似于这样
Found /sys/class/rc/rc0/ (/dev/input/event5) with: Driver ite-cir, table rc-rc6-mce Supported protocols: unknown other lirc rc-5 jvc sony nec sanyo mce-kbd rc-6 sharp xmp Enabled protocols: lirc Extra capabilities: <access denied>
在这种情况下,LIRC 自动检测到 /dev/input/event5
作为 IR 设备,它使用 devinput
驱动程序。通过运行以下命令检查此组合是否有效
$ mode2 --driver devinput --device /dev/input/event5
现在尝试按下遥控器上的按钮。如果没有输出,请尝试不同的驱动程序和设备组合。一旦确定了有效组合,请在 /etc/lirc/lirc_options.conf
中相应地更改 driver 和 device。
示例
MCE RC6 兼容接收器的示例配置
/etc/lirc/lirc_options.conf
[lircd] nodaemon = False driver = default device = /dev/lirc0 output = /var/run/lirc/lircd pidfile = /var/run/lirc/lircd.pid plugindir = /usr/lib/lirc/plugins permission = 666 allow-simulate = No repeat-max = 600 [lircmd] uinput = False nodaemon = False