我找到了一个旧的红外遥控器,其接收器连接为 USB。我将其连接到我的 Linux 机器(Mint LMDE 内核 3.2.0-4-amd64)。它被识别lsusb
为“Zydacron HID 远程控制”。
它有效......几乎......我可以改变音量,启动/停止媒体播放器,选择播放列表中的曲目。
但有些按键似乎没有反应(未配置)。
- 如何配置所有按键?
- 我应该安装“lirc”吗?
答案1
所以我必须回到这个问题上,因为我找到了一个没有 LIRC 的“更好”的解决方案(恕我直言)!
正如我所说,我第一次连接 USB 接收器时,遥控器上的几乎所有按钮都可以工作,无需任何其他软件或任何配置。
根据不同的建议(不仅在这里),我安装了 LIRC 和为我最常使用的软件找到的插件。
经过一些困难后,我配置了 LIRC,因为计算机正在接收扫描代码并且它们已被翻译。在此之后,我启动了“Totem”并激活了 LIRC 插件......但没有任何作用了! :-( 甚至不是之前可以用的钥匙
Banshee 或 VLC 也是如此!
但是,当我关闭应用程序或禁用 LIRC 插件时,我的密钥会再次起作用,我可以设置音量、开始、停止和暂停任何 mp3 或视频...等。
据我了解,让 LIRC 识别遥控器是不够的,我必须为每个我想使用的程序编写一个配置文件......即使是在没有 LIRC 的情况下工作的按键。听起来很疯狂……不谈这样一个事实:找到每个插件都接受的 LIRC 操作似乎相当困难,而且某些软件(例如 Banshee)并没有提供比我在没有 LIRC 的情况下已经拥有的更多可能性(甚至更少)。
所以我搜索...
首先发现,从2.6.36内核开始,集成了LIRC的驱动。这就是为什么当我配置 LIRC 时,我必须使用“devinput”驱动程序。
从这个版本开始,所有遥控器都被识别为外接键盘!这也解释了为什么大多数按键开箱即用。因此,由于它是键盘,我们要做的就是将非工作键“重新映射”到另一个代码/操作上。方法如下:
首先执行“lsusb”并识别您的遥控器:
Bus 006 Device 002: ID 13ec:0006 Zydacron HID Remote Control
您必须写下ID13ec:0006,这会有用的。
现在以长格式显示 /dev/input/by-id 的内容。
ls -l /dev/input/by-id/
lrwxrwxrwx 1 root root 10 Apr 15 19:27 usb-13ec_0006-event-kbd -> ../event10
通过 ID 以及与其关联的事件,您可以找到正确的行!现在,有了这些信息,我们将尝试从远程读取
sudo /lib/udev/keymap -i input/event10
当您按下遥控器上的按键时,您应该会看到扫描码和当前关联的键码:
scan code: 0xC00CD key code: playpause
scan code: 0x70028 key code: enter
scan code: 0x7002A key code: backspace
scan code: 0x7001E key code: 1
scan code: 0x70022 key code: 5
请注意,某些键可能会返回键码,但您的窗口管理器(在我的例子中为 Gnome3)可能无法识别该键码。或者键码不正确。就我而言,我必须将键号重新映射到键盘(比利时键盘),并将特殊键(音频、视频、DVD...)重新映射到一些未使用的功能键。
现在我们将编写我们的键盘映射文件。您可以使用任何名称,就我而言,我将其命名为“zydacron”
sudo vi /lib/udev/keymaps/zydacron
该文件夹中已经有多个文件。格式非常简单:
<scan code> <keycode> <# comment eventually>
例子 :
0x70027 kp0
0x7001E kp1
0x7001F kp2
0xC0047 f13 # music
0xC0049 f14 # photo
0xC004A f15 # video
0xC00CD playpause # Play/Pause
您只能放置需要重新映射的密钥!你会在这个页面找到官方所有关键代码列表。再次强调,这并不意味着您的窗口管理器支持此列表中的每个关键代码,您必须进行测试才能确定。
文件完成后,我们可以使用以下命令对其进行测试:
sudo /lib/udev/keymap input/event10 /lib/udev/keymaps/zydacron
如果某些功能不起作用,您将必须尝试另一个键码。然后重做映射。
当一切如您所愿时,我们会将其永久化。编辑文件 /lib/udev/rules.d/95-keymap.rules
sudo vi /lib/udev/rules.d/95-keymap.rules
在文件中之后标签=“keyboard_usbcheck”但之前GOTO=“键盘结束”添加以下行:
ENV{ID_VENDOR_ID}=="13ec", ENV{ID_MODEL_ID}=="0006", RUN+="keymap $name zydacron"
您可以将供应商 id 和型号 id 识别为通过以下命令找到的 ID 的两个部分LSSB,以及我的文件的名称。将其调整为您自己的值。
重新启动udev进程:
sudo service udev restart
(或重新启动计算机),就完成了。
现在每次插入接收器时,无论在哪个 USB 端口上,也无论系统给出的事件编号,映射都会自动完成
小提示:我将一个键映射为“tab”,另一个键映射为“F10”,这在 Banshee 中非常有用,可以“跳转”子窗口并打开主菜单。