关闭

通过修改键盘映射替代损坏按键

4592人阅读 评论(0) 收藏 举报
分类:

[ZZ]通过修改键盘映射替代损坏按键

我买的神舟笔记本电脑因为使用不当,致使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 = Control,keycode 97 = Control,它们分别对应左、右Ctrl键(当然在我机器上只有左边的扫描码为29的Ctrl)。将其改为:keycode 29 = Caps_Lock即可。

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

keycode 104 = Prior
shift   keycode 104 = Scroll_Backward

把扫描码127的那一行改成:
Copy code

keycode 127 = Prior
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是如此定义的:
Copy code

partial modifier_keys 
xkb_symbols "swapcaps" {
key <CAPS>   { symbols[Group1]= [ Control_L ] };
key <LCTL>   { symbols[Group1]= [ Caps_Lock ] };
};

以管理员身份编辑该文件,将这一部分复制一份,并修改为:
Copy code

partial modifier_keys 
xkb_symbols "swapmenu" {
key <MENU>   { symbols[Group1]= [ Prior ] };
key <PGUP>   { symbols[Group1]= [ Menu ] };
};

其中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键就可以调出登录对话框了。
(完)

1
0
查看评论

keymap键盘映射

  • 2011-12-24 05:08
  • 35KB
  • 下载

如何用键盘映射修改键盘坏键?

买了一部二手的笔记本,发现有三个键是坏的(说多了都是泪啊,以后买二手笔记本的时候,先把打开记事本把所有的按键按一遍。。。屌丝就是伤不起!) 如果换一个新的键盘,要180块大洋!你妈,老子整个本才450!然而,屌丝还是有屌丝的机智的,google了一下,在ubuntu系统下,有个命令叫做xmodmap...
  • u012668018
  • u012668018
  • 2014-01-02 22:34
  • 2194

修改windows的注册表以实现修改键盘按键的映射

修改windows的注册表实现键盘键位映射的修改
  • u010695008
  • u010695008
  • 2016-06-24 14:01
  • 896

mac book pro 全新安装 windows系统 进行键盘映射,启动标准F1,F2

mac book pro 全新安装 windows系统,进行键盘映射,启动标准F1,F2
  • collonn
  • collonn
  • 2016-12-21 11:28
  • 1329

键盘映射工具-更改Windows系统按键工具

  • 2009-08-11 19:34
  • 30KB
  • 下载

【linux】修改纯终端下键盘映射

为了方便使用 vim 编辑器,把 Caps_Lock 和 Control_L 键交换,或者把 Caps_Lock 换成 Control_Ldebian:1)修改文件: /etc/console-setup/cached.kmap.gz2)首先备份文件: cd /etc/console-setup...
  • damiaomiao666
  • damiaomiao666
  • 2016-03-28 10:52
  • 730

鼠标动作映射到按键

  • 2012-10-21 09:09
  • 2KB
  • 下载

键盘按键映射

  • 2013-08-13 16:28
  • 49KB
  • 下载

RemapKey等:小巧实用的键盘映射工具

分享几款易用而免费的键盘映射类工具软件:KeyTweak、remapkey、keybmap,以及通过注册表修改键盘映射的方法。所谓键盘映射(或称为键盘修改、keyboard remap、key remap),是指通过软件,把键盘的A键用作B键。为什么需要键盘映射?例1:旧款 ThinkPad 没有 ...
  • Zhongxiucheng
  • Zhongxiucheng
  • 2013-03-18 10:58
  • 4574

Python Tkinter 事件和映射

Events and Bindings As was mentioned earlier, a Tkinter application spends most of its time inside an event loop (entered via the m...
  • bnanoou
  • bnanoou
  • 2014-08-08 09:28
  • 8960
    个人资料
    • 访问:1201185次
    • 积分:16516
    • 等级:
    • 排名:第746名
    • 原创:473篇
    • 转载:343篇
    • 译文:3篇
    • 评论:41条
    博客专栏