Microdia keyboard driver

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。系统启动就可以自动执行脚本。

5 Appendix

5.1: Source code

aziokbd fork on github

5.2: /etc/init.d/fuji

https://github.com/cfig/utils/blob/master/aziokbd/fuji