amlogic-s9xxx-armbian红外遥控配置:支持电视遥控器控制系统
引言:告别冗余遥控器,实现一体化控制
你是否还在为电视盒子同时连接多个遥控器而烦恼?当你将Amlogic电视盒子刷入amlogic-s9xxx-armbian系统后,是否希望用原有的电视遥控器直接控制系统?本文将详细介绍如何在armbian系统中配置红外遥控功能,实现用普通电视遥控器控制你的armbian服务器,无需额外购买专用遥控器。
读完本文后,你将掌握:
- 红外遥控(IR Remote)的工作原理及在armbian中的实现方式
- 检查设备红外硬件支持状态的方法
- 安装并配置lirc与ir-keytable工具
- 捕获电视遥控器按键并映射到系统功能
- 实现常用操作(如开关机、音量调节、导航控制)的自定义配置
- 解决红外遥控常见问题的调试技巧
红外遥控工作原理与系统架构
红外遥控技术基础
红外遥控(Infrared Remote Control)是一种利用红外线进行数据传输的短距离无线通信技术,广泛应用于消费电子设备。其工作原理是通过红外发射器(遥控器)将电信号转换为红外光信号,由红外接收器(设备端)接收并转换回电信号,再通过解码得到具体的控制指令。
在Linux系统中,红外遥控功能主要通过以下组件实现:
- 内核驱动:rc-core模块提供基础红外支持,具体设备驱动(如gpio-ir-recv)负责硬件交互
- 工具链:ir-keytable用于管理按键映射,lirc提供更高级的遥控功能支持
- 应用层:通过udev规则和systemd服务实现自动加载配置
armbian红外控制架构
amlogic-s9xxx-armbian系统采用主流Linux红外控制架构,其层次结构如下:
硬件兼容性与支持状态检查
支持的Amlogic设备列表
amlogic-s9xxx-armbian项目支持多种Amlogic芯片的电视盒子,大部分设备内置红外接收器。以下是部分已验证支持红外遥控的设备型号:
| 芯片型号 | 代表设备 | 红外硬件 | 推荐内核版本 |
|---|---|---|---|
| s905x3 | X96-Max+, HK1-Box | 内置 | 5.15.y/6.1.y |
| s922x | Beelink-GT-King | 内置 | 5.15.y/6.1.y |
| s905d | Phicomm-N1 | 内置 | 5.10.y/5.15.y |
| s912 | Tanix-TX9-Pro | 内置 | 5.4.y/5.10.y |
| s905l3 | CM311-1 | 内置 | 5.15.y/6.1.y |
检查红外硬件状态
登录armbian系统后,首先检查红外接收器是否被内核识别:
# 检查红外相关内核模块是否加载
lsmod | grep -E 'rc-core|ir-'
# 查看红外接收器设备节点
ls -l /dev/input/by-path/*ir*
# 查看内核日志中的红外设备信息
dmesg | grep -iE 'ir|remote|infrared'
如果输出类似以下内容,说明红外硬件已被识别:
rc-core 24576 10 ir_lirc_codec,ir_sony_decoder,ir_jvc_decoder,ir_rc5_decoder,ir_rc6_decoder,ir_rc5_sz_decoder,ir_nec_decoder,gpio_ir_recv
/dev/input/by-path/platform-ff800000.cbus-platform-ir-receiver-event -> ../event3
[ 3.456789] meson-ir ff800000.cbus:ir-receiver: hardware reset
[ 3.567890] meson-ir ff800000.cbus:ir-receiver: using hardware decoders
安装红外控制工具链
安装必要软件包
amlogic-s9xxx-armbian系统默认未安装红外控制工具,需要手动安装:
# 更新软件源
apt update
# 安装lirc和ir-keytable工具
apt install -y lirc ir-keytable
# 安装图形化配置工具(可选)
apt install -y lirc-compat-remotes
配置内核模块加载
确保红外相关内核模块在系统启动时自动加载:
# 创建模块加载配置文件
cat > /etc/modules-load.d/ir.conf << EOF
rc-core
gpio-ir-recv
ir-lirc-codec
ir-nec-decoder
ir-rc5-decoder
ir-rc6-decoder
EOF
# 立即加载模块
modprobe rc-core
modprobe gpio-ir-recv
配置红外接收器
修改lirc配置文件
# 备份原始配置
cp /etc/lirc/lirc_options.conf /etc/lirc/lirc_options.conf.bak
# 配置lirc使用devinput驱动
cat > /etc/lirc/lirc_options.conf << EOF
[lircd]
nodaemon = False
driver = devinput
device = auto
output = /var/run/lirc/lircd
pidfile = /var/run/lirc/lircd.pid
plugindir = /usr/lib/x86_64-linux-gnu/lirc/plugins
permission = 666
allow-simulate = No
repeat-max = 600
[lircmd]
uinput = False
nodaemon = False
EOF
配置udev规则
创建udev规则,确保红外设备具有正确的权限:
cat > /etc/udev/rules.d/99-ir.rules << EOF
KERNEL=="event*", SUBSYSTEM=="input", ATTRS{name}=="*红外*", MODE="0666"
KERNEL=="event*", SUBSYSTEM=="input", ATTRS{name}=="*IR*", MODE="0666"
KERNEL=="lirc*", MODE="0666"
EOF
# 重新加载udev规则
udevadm control --reload-rules && udevadm trigger
重启lirc服务
# 重启lirc服务使配置生效
systemctl restart lircd
systemctl enable lircd
# 检查服务状态
systemctl status lircd
捕获与映射遥控器按键
识别红外接收器设备
首先确定红外接收器对应的输入设备:
ir-keytable
输出示例:
Found /sys/class/rc/rc0/ with:
Name: meson-ir
Driver: meson-ir
Default keymap: rc-empty
Input device: /dev/input/event3
LIRC device: /dev/lirc0
Supported protocols: unknown other lirc rc-5 rc-5-sz jvc sony nec sanyo mce_kbd rc-6 sharp xmp
Enabled protocols: lirc nec
bus: 25, vendor/product: 0000:0000, version: 0x0000
Repeat delay = 500 ms, repeat period = 125 ms
记录下Input device路径(如/dev/input/event3)和LIRC device路径(如/dev/lirc0)。
捕获原始按键码
使用ir-keytable捕获遥控器按键的原始扫描码:
# 清除现有按键映射
ir-keytable -c -d /dev/input/event3
# 进入捕获模式
ir-keytable -t -d /dev/input/event3
此时,对准红外接收器按下遥控器上的按键,将看到类似以下输出:
1620000000.123456: event type EV_MSC(0x04): scancode = 0x12345678
1620000000.123456: event type EV_KEY(0x01) key_down: KEY_POWER(0x0074)
1620000000.123456: event type EV_SYN(0x00).
1620000000.234567: event type EV_KEY(0x01) key_up: KEY_POWER(0x0074)
1620000000.234567: event type EV_SYN(0x00).
记录下每个按键对应的scancode和keycode,例如上面的POWER按键scancode为0x12345678,对应的keycode是KEY_POWER(0x0074)。
创建自定义按键映射文件
创建设备特定的按键映射文件:
# 创建按键映射目录
mkdir -p /etc/rc_keymaps
# 创建自定义映射文件
cat > /etc/rc_keymaps/amlogic-ir << EOF
# table amlogic-ir, type: NEC
0x12345678 KEY_POWER
0x23456789 KEY_VOLUMEUP
0x34567890 KEY_VOLUMEDOWN
0x45678901 KEY_CHANNELUP
0x56789012 KEY_CHANNELDOWN
0x67890123 KEY_UP
0x78901234 KEY_DOWN
0x89012345 KEY_LEFT
0x90123456 KEY_RIGHT
0x01234567 KEY_ENTER
0xa1b2c3d4 KEY_BACK
0xb2c3d4e5 KEY_MENU
0xc3d4e5f6 KEY_HOME
EOF
上述示例定义了电视遥控器常见按键的映射关系,你需要根据实际捕获的scancode替换对应的十六进制数值。
应用按键映射
# 应用自定义映射
ir-keytable -w /etc/rc_keymaps/amlogic-ir -d /dev/input/event3
# 验证映射是否生效
ir-keytable -r -d /dev/input/event3
实现系统功能控制
配置lirc按键动作
创建lirc配置文件,定义按键对应的系统动作:
cat > /etc/lirc/lircd.conf.d/custom.conf << EOF
begin remote
name amlogic-remote
bits 32
flags SPACE_ENC|CONST_LENGTH
eps 30
aeps 100
header 9000 4500
one 560 1690
zero 560 560
ptrail 560
repeat 9000 2250
pre_data_bits 16
pre_data 0x1234
gap 108000
toggle_bit_mask 0x0
begin codes
KEY_POWER 0x12345678
KEY_VOLUMEUP 0x23456789
KEY_VOLUMEDOWN 0x34567890
KEY_CHANNELUP 0x45678901
KEY_CHANNELDOWN 0x56789012
KEY_UP 0x67890123
KEY_DOWN 0x78901234
KEY_LEFT 0x89012345
KEY_RIGHT 0x90123456
KEY_ENTER 0x01234567
KEY_BACK 0xa1b2c3d4
KEY_MENU 0xb2c3d4e5
KEY_HOME 0xc3d4e5f6
end codes
end remote
EOF
配置音量控制
创建udev规则使红外音量控制生效:
cat > /etc/udev/rules.d/99-input.rules << EOF
ACTION=="add", SUBSYSTEM=="input", ATTRS{name}=="meson-ir", ENV{ID_INPUT_KEYBOARD}="1"
EOF
实现电源控制功能
创建电源控制脚本:
cat > /usr/local/bin/ir-power-control << 'EOF'
#!/bin/bash
case "$1" in
KEY_POWER)
# 检查系统负载情况
load=$(uptime | awk '{print $10}' | sed 's/,//')
if (( $(echo "$load < 1.0" | bc -l) )); then
# 负载低,执行关机
systemctl poweroff
else
# 负载高,仅显示警告
echo "System load is high ($load), canceling poweroff" | wall
fi
;;
*)
echo "Unknown key: $1"
;;
esac
EOF
# 添加执行权限
chmod +x /usr/local/bin/ir-power-control
配置lirc执行电源控制脚本:
cat > /etc/lirc/lircrc << EOF
begin
prog = irexec
button = KEY_POWER
config = /usr/local/bin/ir-power-control KEY_POWER
end
begin
prog = irexec
button = KEY_VOLUMEUP
config = amixer set Master 5%+
end
begin
prog = irexec
button = KEY_VOLUMEDOWN
config = amixer set Master 5%-
end
EOF
启动irexec服务:
systemctl start irexec
systemctl enable irexec
高级配置与自定义功能
创建自定义快捷键
可以将遥控器按键映射到任意系统命令,例如:
# 编辑lircrc文件
nano /etc/lirc/lircrc
# 添加自定义快捷键配置
begin
prog = irexec
button = KEY_HOME
config = xdg-open https://github.com/ophub/amlogic-s9xxx-armbian
end
begin
prog = irexec
button = KEY_MENU
config = tmux attach -t main || tmux new -s main
end
配置应用程序控制
以控制mpv媒体播放器为例:
begin
prog = irexec
button = KEY_PLAY
config = echo "cycle pause" | socat - /tmp/mpv-socket
end
begin
prog = irexec
button = KEY_STOP
config = echo "quit" | socat - /tmp/mpv-socket
end
begin
prog = irexec
button = KEY_FASTFORWARD
config = echo "seek 60" | socat - /tmp/mpv-socket
end
begin
prog = irexec
button = KEY_REWIND
config = echo "seek -60" | socat - /tmp/mpv-socket
end
配置桌面环境控制
对于安装了桌面环境的系统,可以配置窗口管理器快捷键:
# 对于Openbox
cat >> ~/.config/openbox/lirc-rc.xml << EOF
<keyboard>
<key key="KEY_UP">
<action name="MoveFocusUp"/>
</key>
<key key="KEY_DOWN">
<action name="MoveFocusDown"/>
</key>
<key key="KEY_LEFT">
<action name="MoveFocusLeft"/>
</key>
<key key="KEY_RIGHT">
<action name="MoveFocusRight"/>
</key>
<key key="KEY_ENTER">
<action name="Select"/>
</key>
<key key="KEY_BACK">
<action name="Close"/>
</key>
</keyboard>
EOF
调试与故障排除
常见问题及解决方法
| 问题现象 | 可能原因 | 解决方法 | |
|---|---|---|---|
| 完全无法接收信号 | 红外接收器硬件未识别 | 1. 检查dmesg | grep IR输出 2. 确认rc-core模块已加载 3. 尝试更换内核版本 |
| 部分按键无响应 | 按键码未正确映射 | 1. 重新捕获按键码 2. 检查映射文件格式 3. 尝试不同的协议 | |
| 按键重复触发 | 重复延迟设置不当 | 1. 调整ir-keytable的repeat delay 2. 修改lirc配置中的repeat参数 | |
| 系统休眠后失效 | 电源管理关闭了红外设备 | 1. 禁用红外设备的电源管理 2. 添加wakeup配置 |
详细调试命令
# 查看lirc服务日志
journalctl -u lircd -f
# 测试lirc接收
irw
# 查看当前按键映射
ir-keytable -r
# 测试特定按键
irsend SEND_ONCE amlogic-remote KEY_POWER
# 查看输入设备事件
evtest /dev/input/event3
收集红外调试信息
当遇到问题需要寻求社区帮助时,可以收集以下信息:
# 创建调试信息文件
mkdir -p ~/ir-debug
dmesg > ~/ir-debug/dmesg.txt
lsmod > ~/ir-debug/lsmod.txt
ir-keytable > ~/ir-debug/ir-keytable.txt
ir-keytable -t -d /dev/input/event3 > ~/ir-debug/ir-capture.txt 2>&1
systemctl status lircd > ~/ir-debug/lircd-status.txt
cat /etc/lirc/lirc_options.conf > ~/ir-debug/lirc-options.txt
cat /etc/rc_keymaps/amlogic-ir > ~/ir-debug/keymap.txt
# 压缩调试信息
tar czf ~/ir-debug.tar.gz ~/ir-debug
总结与展望
通过本文介绍的方法,你已经成功配置了amlogic-s9xxx-armbian系统的红外遥控功能,实现了用普通电视遥控器控制系统的基本操作。我们从红外遥控的工作原理出发,详细讲解了硬件检查、软件安装、按键捕获、映射配置和功能实现的全过程,并提供了丰富的调试技巧和解决方案。
红外遥控只是armbian系统丰富功能的冰山一角,结合本文学到的知识,你还可以进一步探索:
- 配置蓝牙遥控器实现更远距离的控制
- 通过Home Assistant等智能家居平台实现红外遥控的自动化
- 开发自定义应用程序响应遥控器事件
- 贡献你的设备红外配置到项目社区
希望本文能帮助你更好地利用amlogic-s9xxx-armbian系统,打造属于自己的全能家庭服务器。如有任何问题或建议,欢迎在项目GitHub仓库提交issue或PR,与社区共同完善这一强大的开源项目。
如果你觉得本文对你有帮助,请点赞、收藏并关注项目更新,以便获取更多实用教程和技巧!
附录:参考资源
- 项目官方仓库:https://gitcode.com/GitHub_Trending/am/amlogic-s9xxx-armbian
- Armbian官方文档:https://docs.armbian.com
- Linux红外遥控文档:https://www.kernel.org/doc/html/latest/media/rc/index.html
- LIRC官方文档:https://www.lirc.org/html/index.html
- Amlogic芯片数据手册:https://www.amlogic.com
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



