当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 17 篇帖子 ]  前往页数 1, 2  下一页
作者 内容
1 楼 
 文章标题 : [教学]当你的键盘上有些键位坏了怎么办?(教你如何更改键位)
帖子发表于 : 2007-09-21 19:06 
头像

注册: 2006-12-05 22:23
帖子: 222
地址: http://www.wengyuanhang.com/
送出感谢: 0 次
接收感谢: 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,不过似乎没有反应,我不知道是不是这个命令,哪位大大如果知道麻烦告知一下。)

这样就搞定了。


_________________
虔诚的信徒啊!请相信KyTor吧!
http://www.wengyuanhang.com/
------------------
愿上帝赐我平静,接受我无法改变的事;
愿上帝赐我勇气,改变我能够改变的事;
愿上帝赐我智慧,能明辨这两者的差异;


最后由 KyTor 编辑于 2007-09-21 20:04,总共编辑了 1 次

页首
 用户资料  
 
2 楼 
 文章标题 :
帖子发表于 : 2007-09-21 19:12 
头像

注册: 2006-10-27 11:14
帖子: 1140
地址: 悉尼
送出感谢: 0 次
接收感谢: 0 次
我怎么记得现在已经不用xmodmap了呢。。。试试看这个。


页首
 用户资料  
 
3 楼 
 文章标题 :
帖子发表于 : 2007-09-21 19:20 

注册: 2006-01-18 15:01
帖子: 1074
送出感谢: 0 次
接收感谢: 1
xmodmap只改x的keysym。对终端无效。


页首
 用户资料  
 
4 楼 
 文章标题 :
帖子发表于 : 2007-09-21 19:25 
头像

注册: 2006-12-05 22:23
帖子: 222
地址: http://www.wengyuanhang.com/
送出感谢: 0 次
接收感谢: 0 次
xiechy 写道:
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


_________________
虔诚的信徒啊!请相信KyTor吧!
http://www.wengyuanhang.com/
------------------
愿上帝赐我平静,接受我无法改变的事;
愿上帝赐我勇气,改变我能够改变的事;
愿上帝赐我智慧,能明辨这两者的差异;


最后由 KyTor 编辑于 2007-09-21 20:09,总共编辑了 1 次

页首
 用户资料  
 
5 楼 
 文章标题 :
帖子发表于 : 2007-09-21 19:34 

注册: 2006-01-18 15:01
帖子: 1074
送出感谢: 0 次
接收感谢: 1
代码:
#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的这一步很多厂商都不一样。

例如我的
代码:
keycode 125 = Decr_Console   
keycode 126 = Incr_Console   
keycode 127 = Last_Console


页首
 用户资料  
 
6 楼 
 文章标题 :
帖子发表于 : 2007-09-21 19:48 
头像

注册: 2006-12-05 22:23
帖子: 222
地址: http://www.wengyuanhang.com/
送出感谢: 0 次
接收感谢: 0 次
xiechy 写道:
代码:
#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的这一步很多厂商都不一样。

例如我的
代码:
keycode 125 = Decr_Console   
keycode 126 = Incr_Console   
keycode 127 = Last_Console


有点不明白,即使不同的机子keycode定义不同,那就看清楚数字代表的码,然后再改,我说过这只是以自己的为例子。


_________________
虔诚的信徒啊!请相信KyTor吧!
http://www.wengyuanhang.com/
------------------
愿上帝赐我平静,接受我无法改变的事;
愿上帝赐我勇气,改变我能够改变的事;
愿上帝赐我智慧,能明辨这两者的差异;


页首
 用户资料  
 
7 楼 
 文章标题 :
帖子发表于 : 2007-09-21 19:55 

注册: 2006-01-18 15:01
帖子: 1074
送出感谢: 0 次
接收感谢: 1
还有,x的keycode和终端keycode是不等的,不能通过查看x的keycode来设定dumpkey,它是对终端keycode的dump。x的keycode到keysym的binding,很依赖终端的keycode。在你这终端暂时没用,但是可能在x上就有用了。如果被占据,可能就会有其他毛病。


页首
 用户资料  
 
8 楼 
 文章标题 :
帖子发表于 : 2007-09-21 19:55 
头像

注册: 2006-12-05 22:23
帖子: 222
地址: http://www.wengyuanhang.com/
送出感谢: 0 次
接收感谢: 0 次
这是内核中的keycode定义。谁说没有定义。在你的机子上dumpkeys,不代表别人的也一样。这样很危险,scancode到keycode的这一步很多厂商都不一样。

即使每台机子的dumpkeys不同,那又怎样,文章里说过dumpkeys的就是自己的机子加有坏键的键盘,这样难道有什么问题?


_________________
虔诚的信徒啊!请相信KyTor吧!
http://www.wengyuanhang.com/
------------------
愿上帝赐我平静,接受我无法改变的事;
愿上帝赐我勇气,改变我能够改变的事;
愿上帝赐我智慧,能明辨这两者的差异;


页首
 用户资料  
 
9 楼 
 文章标题 :
帖子发表于 : 2007-09-21 19:59 

注册: 2006-01-18 15:01
帖子: 1074
送出感谢: 0 次
接收感谢: 1
例如,我可以两个组合键,然后产生一个单一的终端keycode,在内核暂时没有完全认出来你的键盘的时候,这个scancode到keycode的组合本来就很不完整。大把多mini键盘是这样。


页首
 用户资料  
 
10 楼 
 文章标题 :
帖子发表于 : 2007-09-21 20:02 
头像

注册: 2006-12-05 22:23
帖子: 222
地址: http://www.wengyuanhang.com/
送出感谢: 0 次
接收感谢: 0 次
xiechy 写道:
例如,我可以两个组合键,然后产生一个单一的终端keycode,在内核暂时没有完全认出来你的键盘的时候,这个scancode到keycode的组合本来就很不完整。大把多mini键盘是这样。



头晕了,那你的意思应该如何完美解决坏键的问题。在x下与文本下?


_________________
虔诚的信徒啊!请相信KyTor吧!
http://www.wengyuanhang.com/
------------------
愿上帝赐我平静,接受我无法改变的事;
愿上帝赐我勇气,改变我能够改变的事;
愿上帝赐我智慧,能明辨这两者的差异;


页首
 用户资料  
 
11 楼 
 文章标题 :
帖子发表于 : 2007-09-21 20:16 
头像

注册: 2005-08-14 21:55
帖子: 58428
地址: 长沙
送出感谢: 4
接收感谢: 272
我的esc怀了。要在tty下面使用。想个办法出来吧。比如。在grub的时候,上次关闭了菜单,又想进菜单。搞死我了。nnnnnnnnnd


_________________
● 鸣学


页首
 用户资料  
 
12 楼 
 文章标题 :
帖子发表于 : 2007-09-21 20:32 

注册: 2006-01-10 19:09
帖子: 1334
送出感谢: 0 次
接收感谢: 0 次
我的坏过空格 真是郁闷 这么大的键也会坏 真不爽


页首
 用户资料  
 
13 楼 
 文章标题 :
帖子发表于 : 2007-09-21 20:43 
头像

注册: 2006-07-02 11:16
帖子: 12522
地址: 廣州
送出感谢: 0 次
接收感谢: 8
其实一个键盘 < 20元..


_________________
^_^ ~~~
要理解递归,首先要理解递归。

地球人都知道,理论上,理论跟实际是没有差别的,但实际上,理论跟实际的差别是相当大滴。


页首
 用户资料  
 
14 楼 
 文章标题 :
帖子发表于 : 2007-09-21 22:05 

注册: 2006-01-18 15:01
帖子: 1074
送出感谢: 0 次
接收感谢: 1
eexpress 写道:
我的esc怀了。要在tty下面使用。想个办法出来吧。比如。在grub的时候,上次关闭了菜单,又想进菜单。搞死我了。nnnnnnnnnd

grub的时候还没有载入内核,这个时候是由bios来控制键位的,没有任何办法。
但是载入系统中之后,却是很容易的。
esc的键位keycode是:
代码:
#define KEY_ESC                 1


首先
代码:
showkeys -s

把你想要用来代替esc键的键按下,然后看输出的scancode代码。
在启动脚本中执行:
代码:
setkeycodes <scancode-which-you-want-to-use> 1

即可。
在X下面会自动的也把这个键当作esc,因为x的keycode是由终端keycode生成的。


页首
 用户资料  
 
15 楼 
 文章标题 :
帖子发表于 : 2007-09-21 22:08 

注册: 2006-01-18 15:01
帖子: 1074
送出感谢: 0 次
接收感谢: 1
具体的东西我写过howto的。详细原理内容自己搜。


页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 17 篇帖子 ]  前往页数 1, 2  下一页

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:Sogou [Spider] 和 4 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译