momo zone

调核人的blog

Apple G6 keyboard & linux

今天 Apple G6的键盘到了,迫不及待的插到usb口上,bios post 的时候在usb controller initialize 停住了 ,准确的说是无响应,重启后依旧 ,然后我 赶紧 关机重开,仍然在usb controller initialize 停顿了一下,但终于过去了,松了一口气 。估计是bios的bug ,主板的bios很久没有更新了,由于超频的缘故我也不愿意更新 。然后启动windows server 2008 R2 。 一切都很顺利,登录后会发现一系列apple的设备,ok全部pass 。这里有个发现,bios下反应比ps/2口的反应慢半拍,不过这个没有影响了 。

接下来是难伺候的linux(设备驱动既让人恨又让人爱) 。首先一个问题是没有识别到apple keyboard ~~~~
…….. 根据经验 重启一下(这是什么经验阿) …… 好了! 无语
然后重启后又不能工作了,看来不是很稳定(udev 的问题?)
不管怎样,先进去再说,按下F12 打开console , 竟然没反应,难道F键不能用,摸索了半天发现竟然FN 键被设置成默认启用, 也就是说F12需要 FN+F12 才能用 ,不用想了这个也肯定是bug 。google 了一下找到临时解决的方法:
echo 2 > /sys/module/hid_apple/parameters/fnmode
不过每次这样搞显得很怪异
还是找源码中的bug吧。

源码还是很好找到的,在这里:
/usr/src/linux/drivers/hid/hid-apple.c
然后很容易就找到
static unsigned int fnmode = 1;


改成 =2  就好了,这就是问题根源(测试的人都睡着了?)
然后在这个代码所在的目录里执行:
make -C /usr/src/linux-2.6.30-2 SUBDIRS=$PWD
这样会把hid目录中所有的程序都编译一遍,完成后把生成的.ko copy 到/lib/modules/2.6.30-9-pae/kernel/drivers/hid/ ,一定是全部copy 不能只copy hid-apple.ko, 否则会在加载的时候提示找不到符号。
重新启动内核,ok fn恢复正常。

接下来要做什么? 毫无疑问,还差insert ,print screen, pause 这几个键 。虽然是可有可无的东西,但如果急用的时候 没有还是会让人头痛的 ,干脆加上吧! 就加在F13-F15这3个键上 (不要奇怪apple的键盘确实有F13-F19这么多功能键,不过在非MAC下的确没有用)
先执行xev 得到这些键的keycode :182-184 (十进制)
然后映射:
xmodmap -pke >>~/.Xmodmap
然后找到keycode 加入如下内容,save.
keycode 182 = Insert
keycode 183 = Print Execute dead_iota
keycode 184 = Pause

最后xmodmap ~/.Xmodmap 生效

2013-01-31 更新:

终端模式

修改/usr/share/kbd/keymaps/mac/include/mac-linux-keys-bare.inc

最后4行替换成以下内容:

keycode 97 = Control # mod by redsonic

keycode 56 = Alt_L # mod by redsonic

keycode 100 = Alt_L # mod by redsonic

keycode 42 = Shift

keycode 58 = Caps_Lock

1.将Alt_L放置在左右option-alt 物理键位上,取消Alt_R,取消Alt_GR

2.将右Control定义为和左Control相同

X Window图形模式:

使用xkb更优雅的方式而不是Xmodmap

先在kde中把键盘类型改为apple ansi, 然后修改/usr/share/X11/xkb/symbols/macintosh_vndr/apple

将xkb_symbols “alukbd”  段中的 replace key <NMLK> {  [  XF86Clear ]  };

这一行替换成

override key <NMLK> { [ Num_Lock, Pointer_EnableKeys ] };

,原因是XF86Clear 存在的话,后续更改Alt相关内容后会发生F功能键对KDE失效的问题,可能是个bug,也可能是其他配置问题。

然后修改/usr/share/X11/xkb/symbols/inet 中evdev段。

将 key <I169> { [ XF86Eject ] }; 替换成 key <I169> { [ Insert, XF86Eject ] }; //# mod by redsonic

注释掉最后几行,并添加:

// key <FK13> { [ XF86Tools ] }; // #mod by redsonic
// key <FK14> { [ XF86Launch5 ] }; // #mod by redsonic
// key <FK15> { [ XF86Launch6 ] }; // #mod by redsonic
// key <FK16> { [ XF86Launch7 ] }; // #mod by redsonic
// key <FK17> { [ XF86Launch8 ] }; // #mod by redsonic
// key <FK18> { [ XF86Launch9 ] }; // #mod by redsonic
key <FK13> { [ Print, Sys_Req ] }; // #mod by redsonic
key <FK14> { [ Scroll_Lock ] }; // #mod by redsonic
key <FK15> { [ Pause, Break ] }; // #mod by redsonic

编辑/usr/share/X11/xkb/symbols/macintosh_vndr/us

xkb_symbols “extended” {

name[Group1]= “USA”;
key <ESC> { [ Escape ] };

// Alphanumeric section
key <TLDE> { [ quoteleft, asciitilde ] };
替换为

xkb_symbols “extended” {

name[Group1]= “USA”;
key <ESC> { [ grave ] };

// Alphanumeric section
key <TLDE> { [ Escape, asciitilde ] };

1. 更改F13-F15分别为 print/sysrq , scroll_lock , pause/break

2. 恢复F16-F19原本的symbol 这肯定是KDE默认键盘布局设置的一个bug

3. 空格键左右两侧从昨到右依次为Control_L, Alt_L, Super_L , SPACE , Super_R , Alt_R, Control_R

4. 将eject键替换成insert/eject键

5. 启用Shift+Clear = enable mouse key

6. 替换`[grave]与esc[Escape]

Advertisements

发表评论

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / 更改 )

Twitter picture

You are commenting using your Twitter account. Log Out / 更改 )

Facebook photo

You are commenting using your Facebook account. Log Out / 更改 )

Google+ photo

You are commenting using your Google+ account. Log Out / 更改 )

Connecting to %s

%d 博主赞过: