dell笔记本linux系统下键盘“双击”和“卡住”问题的暂行解决办法

760 查看

dell笔记本E系列,比如E7440/E7450/E6XXX等,在各种linux系统下,都可能出现2种问题:
1) 键盘卡住,也就是一个键按下去,只有key press没有key release事件发生,这会造成一个字幕被连续多打,直到按下另一个键为止,比如keyyyyyyyyyyyyyyyyyyyyyyyyy....
2) 键盘双击,这个比键盘卡住好多了,也就是偶尔按下一个键,会出来两个字符,比如keyy

关于这个问题,dell的support论坛上早已经炸了:http://en.community.dell.com/support-forums/laptop/f/3518/t/19593360
整整一年多了,还没能完全解决

dell也在对各种机型不断地推出新版bios程序以期望解决该问题,不过到目前为止还没有在所有linux发行版上得到确定的解决; 有人报告说在A14 bios的E7440下,装最新的UBUNTU问题得到解决,不过我用的debian 8 jessie目前还是老样子,还有其它如fedora/open suse等等发行版也还是不行

刚好厂里新换了一台工作机,是dell E7440, bios是A14版,也出现double-letter(键盘双击)的问题,由于升级A15 bios失败(dell太龊了,放个bios程序出来都不能让人好好使用),所以只能按照如下办法解决这个键盘问题:

其实就是在/sys/bus/serio/devices/serio0/force_release 这个文件中加入所有非控制字符按键的keycode,也就是说,除去alt,ctrl,shift,fn这四个确实需要“一直被按住”的功能的按钮之外,其余的键盘按钮的keycode都可以被加入这个文件;

如果你是dell E7440, 只要以root权限将这些按钮的keycode写入这个文件就可以了:
echo '2-13,41,15-27,43,30-40,44-53,57,158,369-370' > /sys/bus/serio/devices/serio0/force_release

这些就是将e7440的键盘keycode列表(除去alt等等控制键)写入force_release文件
为了让它开机自动运行,你可以把这个命令加到/etc/rc.local中

对于其它机型,我不确定keycode是否和e7440一样,那么可以以root权限运行“showkey -k”命令,然后一个个确定你自己的键盘的keycode,再编写好keycode列表写入文件; 上面的keycode就是我在我的e7440上一个个通过showkey -k确认的

写入文件的keycode列表的格式很简单:以逗号分割的多个keycode,每个keycode可以是单独的code(如41)也可以是code范围(如2-13)

写入该文件之后,再cat出来可能会看到code的顺序跟你写入的有出入,这个是因为程序会自动帮你sort/merge相邻的code,总的内容是不变的所以没关系

经实测,双击问题大大减轻,几乎没有,偶尔有一次也估计是我真的手抖双击了,可以忍受(也可能是键盘硬件有点问题,不过真的还算可以接受)

当然,要想根本解决,还需dell自己发布真正能彻底解决问题的bios系统, 或是如果真是硬件问题,需要全部召回更换...

持续关注中