0.现象
使用Fujitsu KH800键盘,linux下组合键打不出来
1. 用户空间查看keycode的工具:
console:
evtest
showkey
GUI:
xev
初步结论:
查看下来linux把Shift_L,Shift_R,Ctrl_L, Ctrl_R都映射成了Shift_L。keycode看也不能区分。应该是kernel对硬件的键值识别有问题。
2. 查看硬件信息和driver:
lsusb:
Bus 002 Device 006: ID 0c45:7603 Microdia
/dev/input/by-id/
lrwxrwxrwx 1 root root 9 2015-09-09 10:24 usb-SONiX_USB_Keyboard-event-kbd -> ../event1
lrwxrwxrwx 1 root root 9 2015-09-09 10:24 usb-SONiX_USB_Keyboard-if01-event-kbd -> ../event3
3. 寻找Microdia driver解决方案
讨论帖
http://askubuntu.com/questions/572394/ctrl-and-alt-keys-mapped-to-shift-for-some-reason
解决方法
”Linux Microdia Keyboard Chipset Driver“
https://bitbucket.org/Swoogan/aziokbd
此driver是写给Azio L70的,但是也能用。
4. 解决方案修改
不用DKMS,直接安装ko,启动后需要重新插拔键盘,再执行如下脚本
echo ‘## Starting fuji module ##’
modprobe aziokbd
echo ‘## Attempting to reload fuji usbhid module ##’
rmmod usbhid && modprobe usbhid quirks=$quirk
可以把脚本fuji放到/etc/init.d/中,补充do_start(), do_stop()脚本,然后:
update-rc.d fuji defaults。系统启动就可以自动执行脚本。