我有一个使用 imon 驱动程序的红外接收器,我想让它与内核一起工作。现在遥控器上的一半按键(图像)有效,但像数字键这样非常重要的想法却无效!
奇怪的想法是,内核键映射模块(rc-imon-pad)似乎是正确的,但似乎并没有真正使用它,因为在没有该模块的情况下完全相同的键也可以工作。
当我加载 imon 时,似乎 rc-imon-pad 模块总是被加载,然后我怀疑键码被缓存,所以如果我卸载 rc-imon-pad 也没有什么区别
现在我迷路了,如果我这样做了,cat /dev/input/event5
或者ir-keytable -t
无论我按哪个键都有数据,所以驱动程序注册了按钮,但似乎它们被转换为错误的键码。
我的内核是来自 Natty 的 ubuntu 库存内核(Linux xbmc 2.6.37-11-generic #25-Ubuntu SMP Tue Dec 21 23:42:56 UTC 2010 x86_64 GNU/Linux)
答案1
您可能会发现有用的xinput list
和xinput test <device>
。
例如,
$x输入列表 ⎡ 虚拟核心指针id=2 [主指针(3)] ⎜ ↳ 虚拟核心 XTEST 指针 id=4 [从指针 (2)] ⎜ ↳ SynPS/2 Synaptics TouchPad id=11 [从指针 (2)] ⎣ 虚拟核心键盘 id=3 [主键盘 (2)] ↳ 虚拟核心 XTEST 键盘 id=5 [从键盘 (3)] ↳ 电源按钮 id=6 [从键盘 (3)] ↳ 视频总线 id=7 [从键盘 (3)] ↳ 睡眠按钮 id=8 [从键盘 (3)] ↳ 华硕笔记本电脑额外按钮 id=9 [从键盘 (3)] ↳ AT Translated Set 2 键盘 id=10 [从键盘 (3)]
我可以监控我的键盘 ( xinput test 10
) 或触摸板 ( xinput test 11
,甚至xinput test "SynPS/2 Synaptics TouchPad"
)对于各种输入事件,它们会被漂亮地打印到控制台,并且参数也会被提取和打印。
这不会解决您的问题,但至少会通过破译例如cat /dev/input/event1
产生的混乱有所帮助。
编辑(来自评论中的@alphanum):
我 10 年前的回答并不准确……抱歉。享受这个快速图表:
┌─────────────────────┐ ┌─────────────────┐ ┌──────────────┐ ┌──────────────────┐
│ │ HID events │ │ xinput events │ │ │ │
│ HID/input device ├───────────►│ Device-specific ├──────────────►│ the kernel ├───►│ Userspace (apps) │
│ (e.g. USB keyboard) │ ▲ │ driver │ ▲ │ │ │ │
└─────────────────────┘ │ └─────────────────┘ │ └──────────────┘ └──────────────────┘
│ │
evtest /dev/input/XX xinput test <xinput id>
表现出2点:
- 你得到的结果
xinput test
是“xinput-unified”;即由设备驱动程序处理。这些与用户空间应用程序看到的更相似。 - 您获得的结果
evtest /dev/input/XX
更加“原始”,尚未转换为 xinput 格式。这些与您的 HID 设备所看到的更相似。
根据您是否构建物理 HID 设备或应用程序,您可以选择使用evtest
或xinput test
用于调试。比较两者还可能有助于解决设备驱动程序问题。
答案2
我有相同的遥控器,并且它可以将正确的键码发送到我的 2.6.38-gentoo-r3 内核。我没有将键码编译为模块,因为它们可能还没有时间来选择单独的键映射。要么全有要么全无,我不喜欢无数无用的模块让我混乱。相反,我让 v4l-utils 使用 udev 来处理它。
我学到了一些东西:
- 检查 ir-keytable -r 的输出,它应该列出所有适用的键码到您的遥控器。
- 手动加载密钥表: ir-keytable -c -w bleh/keymaps/imon_pad,之后 ir-keytable -r 应该会返回该表
- 你实际上可能有一个有故障的接收器,你没有提到历史。我记得至少在上面看到过一条消息lirc 列表那家伙说将箱子退回并换一个新箱子解决了他的问题。
让我们知道进展如何。