http://forum.ubuntu.org.cn/viewtopic.php?f=42&t=76400&start=0 有时候我们会遇到十分郁闷的事情,那就是键盘上的一个或者几个键坏了,这个时候怎么办,换个新的,那需要钱,而且只坏了那么一两个键就要换个新的那真是不甘心啊。当然这种情况玩游戏的人经常会遇到,在xp下有一款更改键位的软件,可是在linux下怎么办。 本人就遇到这种情况,环境为ubuntu. 经过突击,寻了无数资料后,终于放弃有现成软件的想法,改自己来配置。 下面先贴个网址http://www.cbi.pku.edu.cn/chinese/documents/csdoc/cman/xmodmap.html 这个网址中详细介绍了xmodmap的用法。xmodmap就是我们用来修改键位的利器。呵呵,省下一笔钱。 xmodmap - 在 X 环境中调节键盘映射和鼠标键映射 xmodmap 用来 编辑 或 显示 键盘的 修饰键映射(modifier map) 和 键盘映射表(keymap table), 客户程序 用 它们 把 键码(keycode) 事件 转换为 keysym. 通常 在 用户会话 的 启动脚本 中 使用 xmodmap, 把 键盘 配置成 用户 喜爱的 风格. xmodmap [-options ...] [filename] 选项 (OPTIONS) xmodmap 可以 使用 下列 选项: -display display 这个选项 指定 主机 和 显示器. -help 这个选项 在 标准错误设备 显示 命令行参数 的 说明. 如果 出现了 无法识别 的参数, xmodmap 也会 执行 这个 功能. -grammar 这个选项 在 标准错误设备 显示 表达式 的 语法. 该语法 适用于 文件 或 -e expression 选项. -verbose 这个选项 要求 xmodmap 在 分析 输入数据 的 时候 显示 日志信息. -quiet 这个选项 要求 关闭 verbose 日志信息. 这是 缺省选项. -n 这个选项 不要求 xmodmap 真的改变 (键盘,鼠标) 映射, 而只是 显示出 它 可能 做什么, 如同 make(1) 的 相同 选项 一样. -e expression 这个选项 执行 一个 给定的 表达式. 命令行上 可以 指定 任何 数量 的 表达式. -pm 这个选项 要求 在 标准输出设备 显示 当前的 修饰键(modifier)映射. -pk 这个选项 要求 在 标准输出设备 显示 当前的 键盘映射表(keymap). -pke 这个选项 要求 在 标准输出设备 显示 当前的 键盘映射表(keymap). 输出格式能够 作为 xmodmap 的 输入. -pp 这个选项 要求 在 标准输出设备 显示 当前的 鼠标(pointer)映射. - 单独的 短横线(-) 说明 把 标准输入设备 作为 输入文件 使用. filename 指定 一个文件, 其中 包含 xmodmap 将要 执行的 表达式. 这个文件 通常 命名为 .xmodmaprc, 存放在 用户的 根目录下. (大家好好看看我给的那个网址里面xmodmap的用法,我在这里就不重复了。) 下面我以我本身的例子讲讲是如何操作的。 假设我的两个shift键都不能用(坏键),没办法,这个时候我只能找其它键来代替了。嗯,选定右ctrl键了(用右ctrl来代替shift键了。) 首先我们输入 xmodmap -pke -pke 这个选项 要求 在 标准输出设备 显示 当前的 键盘映射表(keymap). 输出格式能够 作为 xmodmap 的 输入. 将看到下面的输出: ... keycode 61 = slash question keycode 62 = Shift_R ... keycode 108 = KP_Enter keycode 109 = Control_R keycode 110 = Pause Break keycode 111 = Print Sys_Req ....... 看到keycode 62 = Shift_R与keycode 109 = Control_R没,就是这两行拉,只要替换一下就OK 接着我们在$HOME目录下建立文件.Xmodmap, 以我为例,kytor@kytor-desktop:~$ gedit .Xmodmap 输入以下内容: remove Shift = Shift_R remove Control = Control_R keycode 62 = Control_R keycode 109 = Shift_R add Shift = Shift_R add Control = Control_R OK,保存。 重启一下,它会提示是否加载.Xmodmap,你只要选是就OK了。 (我试过立即使它立即生效,xmodmap .Xmodmap,不过似乎没有反应,我不知道是不是这个命令,哪位大大如果知道麻烦告知一下。) 这样就搞定了。 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> xmodmap只改x的keysym。对终端无效。 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 是的,如果是文本的,我在网上找到一篇解决的方法。 首先找一个键盘是好,换掉那个坏的键盘,进入系统,建立一个文本文件,名字是dumpkey,内容很简单: 代码: dumpkeys >newkey.map 因为坏了shift键的键盘你打不出来“>”。然后关机,换上那个坏的键盘,进入系统 给dumpkey文件加上执行权限 chmod 755 dumpkey 然后执行 ./dumpkey 在当前目录生成newkey.map文件,编辑它,比如我的内容有一段是这样: 代码: keycode 117 = F17 altgr control keycode 117 = VoidSymbol shift alt keycode 117 = VoidSymbol keycode 118 = KP_MinPlus altgr control keycode 118 = VoidSymbol shift alt keycode 118 = VoidSymbol keycode 119 = Pause keycode 120 = keycode 121 = keycode 122 = keycode 123 = keycode 124 = keycode 125 = keycode 126 = keycode 127 = keycode 128 = nul altgr control keycode 128 = VoidSymbol shift alt keycode 128 = Vo idSymbol keycode 129 = nul altgr control keycode 129 = VoidSymbol shift alt keycode 129 = VoidSymbol keycode 130 = nul 注意keycode 120到 127 都没有定义,说明你的键盘上有没有用的键,你就可以把其中一个改成你要定义的键,至于具体是哪个keycode对应键盘上哪个键就要自己去试,好像用 showkey命令看的也不准确。我是懒的去找,干脆全部都改成 =Shift 。 当然如果没有空闲的键,你就要交换,把两个键的keycode交换应该就可以了。 然后保存退出,执行命令 代码: loadkeys newkey.map 现在试一下看看是不是有些键能当shift用了 如果可以用,你就可以把loadkey /your/dir/of/newkey.map写到开机自动运行的script里去,以后就不用每次输了。 要注意的是这个办法只对文本模式有用,你进了xwindow就不起作用了,X 下面要使用xmodmap >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> #define KEY_KPCOMMA 121
#define KEY_HANGEUL 122 #define KEY_HANGUEL KEY_HANGEUL #define KEY_HANJA 123 #define KEY_YEN 124 #define KEY_LEFTMETA 125 #define KEY_RIGHTMETA 126 #define KEY_COMPOSE 127 这是内核中的keycode定义。谁说没有定义。在你的机子上dumpkeys,不代表别人的也一样。这样很危险,scancode到keycode的这一步很多厂商都不一样。 例如我的 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 还有,x的keycode和终端keycode是不等的,不能通过查看x的keycode来设定dumpkey,它是对终端keycode的dump。x 的keycode到keysym的binding,很依赖终端的keycode。在你这终端暂时没用,但是可能在x上就有用了。如果被占据,可能就会有其 他毛病。 |