最近在看网课学习的时候,经常需要来回在视频中跳过一些不必要的废话,或者又需要来会倒着去看一部分内容。早些年买的一个翻页笔虽然有简单的按键切换功能,但是因为按键较少而且不支持长按连续触发,使用体验并不是那么好。然后突然想起还有一个小米电视盒子的蓝牙遥控器,为了把这东西连上并且用的舒服一点稍微折腾了一下,在这里与大家分享折腾过程中的坑与发现。
-
连接遥控板
本文中所用的遥控板是小米早期的蓝牙遥控板,板面仅有
[电源,方向键,确认,主页,返回,菜单,音量 +/-]
按键不是太多,但是也够用。但是想用就先得把他连上去,连上去,这可就废了一番力气。1. 进入遥控板配对模式(主页键 + 菜单键一起按)
2. 在 PC 上配对
很显然,如果你看到这就直接去蓝牙菜单里配对,那你肯定会失败,向导会很快告诉你连接失败,并且在 dmesg 里跳出一串关于 SMP 的消息,比如:
Bluetooth: hci0: unexpected SMP command 0x0b from xx:xx:xx:xx:xx:xx
并且你搜索这段报错还不会直接给你一个很确定的解决方案。也许此时会有人直接去配对手机,手机也会告诉你连接失败,原因是错误的 PIN。那么这意味着跟这个遥控器需要一个 PIN 码吗?其实不然,根据多方查询,发现正确的连接方式是使用
bluetoothctl
,步骤如下:~> bluetoothctl #启动蓝牙 [bluetoothctl]# power on #启用并使用默认 agent [bluetoothctl]# agent on [bluetoothctl]# default-agent #启用可发现模式 [bluetoothctl]# discoverable on #开始搜索 [bluetoothctl]# scan on #手动信任该设备,当设备不需要配对码 (PIN) 时,该选项是必需的 [bluetoothctl]# trust <MAC address> #配对设备 [bluetoothctl]# pair <MAC address> #这里重复其实是我怕有问题 [bluetoothctl]# trust <MAC address> #连接设备 [bluetoothctl]# connect <MAC address>
到这里,会有个提示确认的选项,确认后,这个蓝牙遥控器就可以正常使用了,这时查看连接列表,发现连接的是一个 “Xiaomi RC” 的设备,而不是在向导里搜索到的 “小米蓝牙遥控板”,具体为什么,猜测可能跟 BLE 有问题,有兴趣的可以研究一下具体问题所在。
-
自定义按键
在后续使用当中啊,发现遥控器上的确认并不能暂停视频,而且这个主页键感觉就很鸡肋。为了让这个遥控器物尽所用,那么自定义按键就势在必行。其实吧,这个遥控器,他看起来是个遥控器,实际上呢他是个
白色遥控器键盘。自定义键盘的方式就很多了。这里并没有选用xmodmap
而是选用修改 hwdb 的方式,是因为我没找到 xmodmap 怎么指定仅某个设备生效,而 HWDB 可以针对性的修改一个设备的按键映射,不会影响其他设备。修改的步骤如下-
首先安装 evtest
-
sudo evtest
-
在列表中找到需要修改的键盘
-
记录设备相关信息,如下,请注意 bus,vendor,product 关键词
Input device ID: bus 0x5 vendor 0x2717 product 0x3200 version 0x110 Input device name: "XiaoMi RC"
-
测试需要修改的按键,获得类似如下信息; 第一行的 value 指 SCAN_CODE,第二行 value 指触发状态(1 按下 0 起来)
Event: time 1606598332.311370, type 4 (EV_MSC), code 4 (MSC_SCAN), value 70028 Event: time 1606598332.311370, type 1 (EV_KEY), code 57 (KEY_SPACE), value 1 Event: time 1606598332.311370, -------------- SYN_REPORT ------------ Event: time 1606598332.551757, type 4 (EV_MSC), code 4 (MSC_SCAN), value 70028 Event: time 1606598332.551757, type 1 (EV_KEY), code 57 (KEY_SPACE), value 0
-
创建规则文件,路径为
/etc/udev/hwdb.d/
创建90-xiaomirc.hwdb
文件 -
编辑规则文件,如下
evdev:input:b0005v2717p3200* KEYBOARD_KEY_70028=space KEYBOARD_KEY_7004a=pause
第一行用于精确匹配设备,b 后是 BusID,v 后是 VendorID,p 后是 ProductID
第二,三行将 SCAN_CODE 为 70028(确认键) 和 7004a(主页键) 的按键映射为 space 和 pause,pause 键在 Linux 并没有实际上的用处,这里我用他作为显示桌面的快捷键。
映射的按键代码可在此查询 keymap-list -
保存,输入以下命令生效
sudo udevadm hwdb --update sudo udevadm trigger
-
enjoy it!
-
-
简结
至此,所有操作步骤就完成了,现在的实际体验真的很不错,连接,唤醒都很及时,也不会断连。如果有需求呢还是可以尝试一下,发挥您的想象力,开发更多的用途。本文的相关方法可能也同样适用于部分类似的设备,可以参考。
因为时间原因,也没法腾出更多的时间去研究其中的各种问题,如果有了解相关细节的大能,请您不吝赐教,留下您的解答;如果文章中有问题,也请各位指出,谢谢!