找回密码
 注册
搜索
热搜: 超星 读书 找书
查看: 5797|回复: 1

[【原创】] 通过修改键盘映射替代损坏按键 (“软件学与用”参赛贴)

[复制链接]
发表于 2006-12-26 21:53:19 | 显示全部楼层 |阅读模式
通过修改键盘映射替代损坏按键


   我买的神舟笔记本电脑因为使用不当,致使Ctrl键与PageUp键损坏。而该电脑仅有键盘左下角一个Ctrl键,损坏之后给日常使用带来许多不便。由于我装的是Windows 2000 + Debian Linux双系统,而登录Windows被我先前设置为需要按下Ctrl+Alt+Del才能出现登录窗口,Ctrl键的损坏使得我暂时不能进入Windows,因此在我购买外置USB键盘之前,我都是在Linux下工作,并最终通过修改键盘映射,将不常用的按键映射到Ctrl和PageUp上,解决了按键损坏带来的问题。而后,我也找到了Windows下修改键盘映射的方法。现将诸方法与网友共分享,以供参考。

一、Linux下的键盘映射修改方法

1、使用GNOME中的键盘首选项解决Ctrl键损坏的问题

   在GNOME下可以方便地修改键盘的布局选项,这其中就有Ctrl键的位置设置。我最初就是用这个方法在GNOME下解决Ctrl键损坏的问题的。由于CapsLock键不常用,因为就用它来代替坏掉的Ctrl键。

   方法:选择 系统->首选项->键盘,弹出键盘首选项设置对话框。在“布局选项”选项卡中,设置“Ctrl key position”为“Swap Ctrl and CapsLock”。这样Ctrl键就与CapsLock键交换,就可以用CapLock键来代替坏掉的Ctrl键了。当然,你也可以选择“Make CapsLock an additional Ctrl”。


2、使用loadkeys改变tty终端下的键盘映射

   虽然在GNOME下解决了Ctrl键的使用问题,可是切换到终端下,Ctrl与CapsLock又恢复了原来的行为。这时我们可以通过loadkeys来改变终端下的键盘映射。

   通过查询manpage可知,系统提供的键盘布局文件是放在/usr/share/keymaps目录下的。找到其中的defkeymap.kmap.gz文件(在/usr/share/keymaps/i386/qwerty目录下),复制到用户的HOME目录中,解压并打开它。我们要做的就是把Ctrl键映射到CapsLock键上。找到其中包含Caps_Lock的那一行:keycode 58 = Caps_Lock,那就是CapsLock键对应的扫描码了。将它改成:keycode 58 = Control即可。如果想将Ctrl与CapsLock键交换,可以找到含有Control字样的keycode定义:keycode 29 = Controlkeycode 97 = Control,它们分别对应左、右Ctrl键(当然在我机器上只有左边的扫描码为29的Ctrl)。将其改为:keycode 29 = Caps_Lock即可。

   在终端下,Shift+PageUp/PageDown是常用的屏幕向上/下翻页的快捷键。而PageUp键的损坏影响了这一功能的使用。我通过将PageUp映射到不常用的“鼠标右键菜单”键上,解决了终端下的翻页问题。方法是:运行showkey命令,这时可以通过按下键盘上的按键,程序会显示该键按下与释放所对应的扫描码。由此法可得到鼠标右键菜单键对应的扫描码为0x7f,即127。又在另一台机器上找到PageUp对应的扫描码为104。在defkeymap.kmap文件中找到keycode 104对应的那两行:
  1. keycode 104 = Prior
  2.    shift   keycode 104 = Scroll_Backward
复制代码
把扫描码127的那一行改成:
  1. keycode 127 = Prior
  2.    shift   keycode 127 = Scroll_Backward
复制代码
即可。

   现在我们已经有了修改过后的defkeymap.kmap文件。要在终端中使用这个键盘映射,我们只需要执行loadkeys defkeymap.kmap即可。可是这样每次进入终端都要执行这个命令,十分不爽,而我们又不应该将其加入.bashrc中,否则运行gnome-terminal时也会执行loadkeys命令,而虚拟终端下执行loadkeys会产生错误。这时,我们可以将在/etc目录下找到的kmap文件——/etc/console/boottime.kmap.gz按如上的方法修改,并将修改过后的文件用gzip压缩后替换原来的文件。这样,系统启动后就会加载这个文件,使得每个终端睛的键盘映射都得到了改变。

3、使用setxkbmap在GNOME下将PageUp映射到鼠标右键菜单键上

   虽然前面讲了在GNOME将Ctrl键映射到CapsLock键上的方法,但是还没有解决将PageUp键映射到鼠标右键菜单键上的问题。桌面环境自带的键盘首选项里没有相关的选项。经过在网上的寻找及自己的研究,我终于解决了这个问题:使用setxkbmap。

   百度上能找到的修改X下的键盘映射的文章几乎都是讲使用xmodmap,执行xmodmap -pke > ~/.xmodmaprc后修改.xmodmaprc文件以达到修改的目的。但我试验后发现不成功。后来在国外的网站上看到说现在的桌面环境,如GNOME、KDE等已经不再使用xmodmap了,而采用XKB进行键盘管理。通过setxkbmap可以较为方便地达到设定的目的。

   例如,执行setxkbmap -option ctrl:swapcaps就可以将Ctrl键与CapsLock键进行切换。setxkbmap -print就可以显示当前键盘的布局及选项设置。执行setxkbmap -option就可以恢复到默认选项。

   通过查看manpage得知,XKB的所有组件的源文件都在/usr/lib/X11/xkb目录下。而我的机器找到的是在/usr/share/X11/xkb目录下。通过grep -R swapcaps *找到目录下所有包含swapcaps字样的文件,由此可知,swapcaps是在symbos/ctrl文件里定义的。打开该文件,可以见到swapcaps是如此定义的:
  1. partial modifier_keys
  2. xkb_symbols "swapcaps" {
  3.    key <CAPS>   {  symbols[Group1]= [ Control_L ] };
  4.    key <LCTL>   {  symbols[Group1]= [ Caps_Lock ] };
  5. };
复制代码
以管理员身份编辑该文件,将这一部分复制一份,并修改为:
  1. partial modifier_keys
  2. xkb_symbols "swapmenu" {
  3.    key <MENU>   {  symbols[Group1]= [ Prior ] };
  4.    key <PGUP>   {  symbols[Group1]= [ Menu ] };
  5. };
复制代码
其中MENU即是“鼠标右键菜单键”,它的定义是在symbols/pc文件里找到的。


   修改保存后,仍然不能使用setxkbmap -option ctrl:swapmenu。这时我们需要将先前用grep搜索到的文件里包含swapcaps的那一段统统复制一份,并将swapcaps改为swapmenu。需要修改的文件有:symbols.dir、rules/base、rules/base.lst与rules/base.xml。这样,我们就可以通过setxkbmap -option ctrl:swapmenu来将PageUp键与鼠标右键菜单键交换。此后鼠标右键菜单键就可以被当作PageUp键使用了。

二、Windows下的键盘映射修改方法

   后来我买了个USB键盘(我懒得花钱去修键盘),总算进了Windows。我就想,Windows下也应该有修改键盘映射的方法吧。于是,我在网上好不容易找到了修改键盘映射的软件——sharpkeys。

   Sharpkeys可以从http://www.randyrants.com下载并免费使用。我使用的是它的1.1版本。它通过修改Windows 2000/XP/2003的注册表里的特殊项来达到键盘映射的目的。下面我就来给大家演示一下如何使用。

   以管理员身份运行sharpkeys。点击“Add”按钮,即可弹出如图所示的对话框。左边即是原来的按键,右边则为将要映射到的按键。例如将CapsLock键映射为Ctrl键,则在左边选择Caps Lock,右边选择Left Ctrl即可。另外,点击“Type Key”即可弹出一对话框,接收用户的按键,并自动选择对应的列表中的选项。例如要将鼠标右键菜单键映射为PageUp键,则可点击“Type Key”按钮,按下鼠标右键菜单键,并点击OK,再在右边选择Page Up即可。



   完成设置之后,在主窗口中点击“Write to Registry”即可将改动写入注册表。注销后即可生效。怎么样?现在按CapsLock+Alt+Del键就可以调出登录对话框了。


(完)

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
回复

使用道具 举报

发表于 2007-1-11 19:01:06 | 显示全部楼层
学习了,我的坏键盘有可以用了!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|网上读书园地

GMT+8, 2024-5-19 05:36 , Processed in 0.296875 second(s), 6 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表