昨天在狗东上买了个雷柏v500合金版黑轴机械键盘,今天到货之后满怀兴奋地装上到了我从公司带回来的thinkpad上,结果发现alt键和ctrl键是失灵的。
进一步测试发现,这两个键并没有失灵,它们特喵的被映射到了shift键上……
面对这种情况,我虽然感到很失望,但一点也不意外,毕竟Linux这个系统的风格就是这样的。自己动手,丰衣足食,驱动不合适,自己写一个啊!
否则我也不会到现在为止在Linux下连一个好用的qq版本都找不到了。
在网上搜索了一番之后,找到了这个:https://github.com/kinglongmee/rapoo-keyboard-driver
git clone下来,照着README.md,sudo make; sudo make install; ./installdriver.sh,咦,为什么报错:
rmmod: ERROR: Module hid_rapoo is not currently loaded
rmmod: ERROR: Module hid_generic is not currently loaded
重试指令,不行;
重启机器了,还是不行;
究竟是什么原因呢?
难道是linux head 4.4.10的版本太新了?不至于吧,这个git repo可是5个月之前才更新的。
所以这个报错信息是什么意思呢?
先查了一下rmmod这个命令,man rmmod,哦,是remove module的意思。
那么报is not currently loaded,就能明白是怎么回事了:如果说一个模块目前没有被加载,那么它确实是没办法被移除的。
好了,所以,这两个模块是什么呢?为什么要移除这两个模块呢?
首先分析了一下installdriver.sh:
#!/bin/bash
#install rapoo v500 driver
rmmod hid-rapoo hid-generic
modprobe hid-rapoo
modprobe hid-generic
如果第一行代码是移除模块,那么后两行代码可能是加载模块的意思。
所以一个可能就是,我编译了这个git repo;我改了这两个模块;我把这两个模块卸下来再装上,于是它们会带着我自定义的配置;似乎还蛮合理呢。
上网百度了一下,这两个模块似乎是跟USB接口,各种人机交互接口有关系的,(百度百科http://baike.baidu.com/item/USB-HID)
也就是说我电脑的USB接口的模块没有挂载是吗?
这怎么可能?那么我电脑的USB接口岂不是不能用了吗?怎么会有如此愚蠢的操作系统,启动之后不加载USB接口的?
咦,不过还真有可能……
我猛然回忆起两个月之前我为了给笔记本电脑省电,装了ubuntu下的tlp,其中还在battery mode中设置了usb口禁用。
哦?好吧,我插上电试试,这样应该就会启动ac mode了吧。
不行啊还是会报错。
好吧,那我删掉tlp试试:
sudo apt-get remove tlp && restart
重新开机,进入目录,执行命令sudo make; sudo make install; ./installdriver.sh
静默,一片静默。
程序安静地走完了它的进程。
那么按照unix系统的编程风格呢,没有消息就是好消息,是不是我的键盘可以用了呢?
我插上键盘,按下atl+tab键。
窗口切换了。
Good.问题解决了。