我阅读了很多文本才走到这一步:) 升级到 17.04 之后,LIRC 不再适用于我的 NUC7i5......所以我发现了使用 ir-keytable 的方法。(这篇文章对我帮助很大!)
因此,卸载 LIRC 后,我的 ir-keytable 看起来像这样(有趣的是 lirc-protocol 仍然启用):
sudo ir-keytable
Found /sys/class/rc/rc0/ (/dev/input/event6) with:
Driver ite-cir, table rc-rc6-mce
Supported protocols: unknown other lirc rc-5 rc-5-sz jvc sony nec sanyo mce_kbd rc-6 sharp xmp
Enabled protocols: lirc
Name: ITE8708 CIR transceiver
bus: 25, vendor/product: 1283:0000, version: 0x0000
Repeat delay = 500 ms, repeat period = 125 ms
然后我发现我拥有的旧 Mac 遥控器正在使用 NEC 协议,因此我创建了自己的 rc_keymaps 并像这样激活了 NEC 协议:
cp /lib/udev/rc_keymaps/nec_terratec_cinergy_xs /etc/rc_keymaps/nec_mac
sudo ir-keytable -p nec
现在我可以运行 ir-keytable-test 来查看远程键的扫描码:
sudo ir-keytable -t
Testing events. Please, press CTRL-C to abort.
1504134142.373150: event type EV_MSC(0x04): scancode = 0x77e15025
1504134142.373150: event type EV_SYN(0x00).
1504134143.213712: event type EV_MSC(0x04): scancode = 0x77e13025
1504134143.213712: event type EV_SYN(0x00).
1504134143.935559: event type EV_MSC(0x04): scancode = 0x77e16025
1504134143.935559: event type EV_SYN(0x00).
1504134145.042733: event type EV_MSC(0x04): scancode = 0x77e19025
1504134145.042733: event type EV_SYN(0x00).
1504134145.844078: event type EV_MSC(0x04): scancode = 0x77e1a025
1504134145.844078: event type EV_SYN(0x00).
这些扫描码对于修改复制的键映射文件很有用:
sudo nano /etc/rc_keymaps/nec_mac
修改后的结果如下:
cat /etc/rc_keymaps/nec_mac
# table nec_mac type: NEC
0x77e15025 KEY_VOLUMEUP
0x77e13025 KEY_VOLUMEDOWN
0x77e1a025 KEY_PLAYPAUSE
0x77e19025 KEY_PREVIOUSSONG
0x77e16025 KEY_NEXTSONG
清除 ir-keytable 的旧键表并加载新的 rc_keymaps 文件 nec_mac 后,遥控器在 17.04 和 Rhythmbox 中部分工作(我的 rc.local 中确实有这些命令可以在启动时激活键映射):
sudo ir-keytable -c
sudo ir-keytable -p nec -w /erc/rc_keymaps/nec_mac
但是有两个按钮不起作用:KEY_PREVIOUSSONG 和 KEY_NEXTSONG。我确实有一个无线 Logitech 键盘(k830,带 USB 接收器)……这里所有的媒体键都可以与 Rythmbox 配合使用。如果我尝试该sudo showkey
命令并按下键盘 KEY_NEXTSONG 和红外遥控器 KEY_NEXTSONG,我会得到相同的键码:
keycode 163 press
keycode 163 release
如果我在完成所有这些配置后尝试再次安装 LIRC,则红外遥控器要么不再工作,要么陷入某种“无限循环”(例如,按一次 KEY_VOLUMEUP,音量就会一直调高)。
那么有人知道如何在没有 LIRC 的情况下处理 ir-keytable 以使这两个键在 rhythmbox 中工作吗?
我的内核版本应该是 up2date: 4.10.0-33-generic
谢谢你的提示。
答案1
我在 Macbook Pro (2011) 上运行了 4.4.0-generic,并配有苹果遥控器,也遇到了同样的问题。先介绍一下背景,然后再介绍我如何修复它:
背景:
我的内核(使用基于 ubuntu 16.4 的 Mint 18.1 安装,比您的内核旧)在我安装任何东西之前就识别了遥控器。音量调高、音量调低、播放/暂停与键盘键的工作方式相同,下一曲目和上一曲目则不然。我重新安装了 lirc 包并在遥控器的 mac mini 规范中进行了编辑。没有变化。运行 irw 我可以看到内核识别遥控器并为每个按钮创建一个事件。
有些人提到,新内核无法像旧内核那样与遥控器配合使用,因此放弃或回滚到早期内核,但这是我所做的。
修复它:
我安装了 evtest 包
$ sudo apt install evtest
运行 evtest。该程序为您提供了每个输入设备的列表。选择遥控器的编号并按回车键。在我的笔记本电脑上,列表包括
/dev/input/event6: Apple Computer, Inc. IR Receiver
/dev/input/event7: Apple Inc. Apple Internal Keyboard / Trackpad
为了查看苹果遥控器,我输入 6 。
$ sudo evtest
Select the device event number [0-16]: 6
Input driver version is 1.0.1
Input device ID: bus 0x3 vendor 0x5ac product 0x8242 version 0x111
Input device name: "Apple Computer, Inc. IR Receiver"
Supported events:
Event type 0 (EV_SYN)
Event type 1 (EV_KEY)
Event code 28 (KEY_ENTER)
Event code 114 (KEY_VOLUMEDOWN)
Event code 115 (KEY_VOLUMEUP)
Event code 139 (KEY_MENU)
Event code 158 (KEY_BACK)
Event code 159 (KEY_FORWARD)
Event code 164 (KEY_PLAYPAUSE)
Key repeat handling:
Repeat type 20 (EV_REP)
Repeat code 0 (REP_DELAY)
Value 250
Repeat code 1 (REP_PERIOD)
Value 33
Properties:
Testing ... (interrupt to exit)
Event: time 1509552582.912009, type 1 (EV_KEY), code 164 (KEY_PLAYPAUSE), value 1
Event: time 1509552582.912009, -------------- SYN_REPORT ------------
Event: time 1509552583.034614, type 1 (EV_KEY), code 164 (KEY_PLAYPAUSE), value 0
Event: time 1509552583.034614, -------------- SYN_REPORT ------------
Event: time 1509552586.159731, type 1 (EV_KEY), code 159 (KEY_FORWARD), value 1
Event: time 1509552586.159731, -------------- SYN_REPORT ------------
Event: time 1509552586.338556, type 1 (EV_KEY), code 159 (KEY_FORWARD), value 0
Event: time 1509552586.338556, -------------- SYN_REPORT ------------
Event: time 1509552587.375649, type 1 (EV_KEY), code 158 (KEY_BACK), value 1
Event: time 1509552587.375649, -------------- SYN_REPORT ------------
Event: time 1509552587.626549, type 1 (EV_KEY), code 158 (KEY_BACK), value 2
Event: time 1509552587.626549, -------------- SYN_REPORT ------------
Event: time 1509552587.650543, type 1 (EV_KEY), code 158 (KEY_BACK), value 0
Event: time 1509552587.650543, -------------- SYN_REPORT ------------
现在让我们看看当我按下键盘上的下一曲目按钮和上一曲目按钮时会发生什么:
Select the device event number [0-16]: 7
Event: time 1509552799.129798, type 1 (EV_KEY), code 165
(KEY_PREVIOUSSONG), value 1
Event: time 1509552799.129798, -------------- SYN_REPORT ------------
Event: time 1509552799.265788, type 1 (EV_KEY), code 165
(KEY_PREVIOUSSONG), value 0
Event: time 1509552799.265788, -------------- SYN_REPORT ------------
Event: time 1509552800.641684, type 1 (EV_KEY), code 163 (KEY_NEXTSONG), value 1
因此,键盘生成了正确的代码“KEY_PREVIOUSSONG”、“KEY_NEXTSONG”,但遥控器却没有。
因此,编辑文件 /etc/lirc/hardware.conf
嗯,在我的计算机上目录 /etc/lirc 不存在。所以...
$ apt install lirc
安装软件包文件后,脚本会自动运行。您必须从列表中选择远程硬件,然后按 Enter 键。我选择了“mac mini blah blah”,然后从下一个列表(我认为是发射器)中选择了 none。现在有一个文件 /etc/lirc/hardware.conf。它大部分是空的,指向特定于此遥控器的文件。因此,编辑此文件 - 很难找出位置,我找到了它
cd /usr/share/lirc/remotes/apple/
nano lircd.conf.macmini
将单词 KEY_REWIND 更改为 KEY_PREVIOUSSONG,将 KEY_FORWARD 更改为 KEY_NEXTSONG。
现在重新启动 lirc 守护进程来识别新的配置。
sudo /etc/init.d/lirc restart
现在左右按钮都可以使用了。:)