前言:
以下内容目的是为了让部分SUSE或其他发行版的新手可以有一份统一的教程step by step地调教自己的linux让系统更完美地兼容thinkpad系列laptop,欢迎高手拍砖,请轻点.
本文是以本人的实际实验结果为主,当中参考了很多网上的资料,包括thinkwiki, linuxquestions等等,未能一一尽列
本文希望能把自己解决linux问题的整个过程和思考方法写出来给有需要的新人参考,希望能让入门的朋友学习到解决linux问题的方法,而不是仅仅会按本宣科地解决问题
well, Google ROCKs!
注意:
各位阅读本文后要动手改造的话,请做好各种备份,意外准备,本人不负责任何风险
本文以thinkpad x61为例子,其他机型请适当做变通灵活处理
本人实验过2.6.16.xx, 2.6.27.xx内核,其他版本内核请适当变通,理论上2.6.16~27都可以成功
由于本人是以suse系列做实验,其他发行版变通处理,不保证成功
附件的patch是根据suse11.1 2.6.27.25内核制作的,可以直接使用
内容以操作难度易到难顺序排列
准备工作
首先,要安装必备的开发包,没有安装的话进入yast2 -> software management, 把kernel, C/C++, Python, QT, gnome/kde等一古脑相关的开发包装上.
win key毫无用处?
win key在windows下可以唤出开始菜单, 在linux很多发行版上一般也可以唤出gnome/kde panel menu,但为什么opensuse上不行呢,gnome keyboard shortcut里面也设置不了. 先google一下,很快找到提示,原来win key默认已经被映射成叫作Super_L的键,在gconf-editor里面可以设置metacity的keybinding,所以我打开gconf-editor -> app -> metacity -> global_keybindings -> panel_main_menu,直接输入Super_L.退出,试一下,成功了~~
单独按Fn键会变成鼠标右键功能?很烦耶
注:其实这个问题的实际原因是在于我把keyboard的模型选成IBM thinkpad T60,只要选择其他键盘模型就不会有这个问题了,如果有人碰到和我一样的问题可以参考.
真不方便,因为控制Fn+Fx时候很容易就变成鼠标右键功能了.究竟怎么回事呢?为了解决这个问题,我先google一下"linux thinkpad Fn hot key", 它带领我去到thinkwiki.org这个网站.
thinkwiki内有搜索功能,用hot key搜索,
把出来的内容看了一遍,可惜里面没有描述到这个问题,但其中提到过系统可以用xmodmap来管理hot key功能映射的.根据这个提示和介绍,在terminal输入xev这个命令.这个命令可以检测键盘,鼠标的输入,将信息输出.
启动xev后,按Fn,输出以下信息:
KeyRelease event, serial 33, synthetic NO, window 0x3800001,
root 0x7c, subw 0x0, time 8672029, (251,340), root:(259,415),
state 0x0, keycode 227 (keysym 0x0, Menu), same_screen YES,
XLookupString gives 0 bytes:
XFilterEvent returns: False
结合thinkwiki上面的介绍,我大概猜猜这个信息的意思: keycode 227表示键盘中断给出的Fn 键代码, Menu代表被xmodmap映射后的功能. Menu指的就是鼠标右键功能.
好了,既然这样,我只要将keycode 227到Menu的映射去掉就可以了.为了实现这步,根据thinkwiki的描述可以用xmodmap命令的remove实现,可是怎样都不成功, man xmodmap信息和例子很少, google的信息也不太多.后来我想,系统肯定是根据某个config文件来设置的.用grep keycode * -R命令分别在/etc, /usr/share目录下寻找相关设置文件,最终找到/usr/share/X11/xcb目录,查看一下里面的文件格式,应该就是这里了,于是在grep 227 * -R一次,终于在xfree86里面找到:
// IBM ThinkPad 60 series
xkb_keycodes "thinkpad60" {
include "xfree86(xfree86)"
<MENU> = 227;
};
谁写下的啊....真多此一举阿.....把这句干掉.重启系统....这世界清静了