Chinaunix首页 | 论坛 | 博客
  • 博客访问: 64113
  • 博文数量: 14
  • 博客积分: 260
  • 博客等级: 二等列兵
  • 技术积分: 154
  • 用 户 组: 普通用户
  • 注册时间: 2011-03-05 22:58
个人简介

临渊羡鱼,不如退而结网。

文章分类

全部博文(14)

文章存档

2014年(3)

2012年(11)

我的朋友

分类: LINUX

2012-08-12 23:16:04

你没有过因为字符终端(Console)与 X 之间切换的不一致而烦恼,Console 到 X ,Alt-Fx ,Ctrl-Alt-Fx 都可以。而 X 到 Console 要 Ctrl-Alt-Fx ?重新映射一下键盘可以解决这个不一致的问题(当然还可以做其它的事)。下面我简要介绍一下方法,供有兴趣的同学参考。

这里首先说说 Console 下面的按键映射。Console 下面按键映射,可以用 showkey loadkeys dumpkeys 这三个工具搞定,基本流程是用 showkey 查看按键的 keycode, 用 dumpkeys DUMP 当前的 keymap 进行修改,当然也可以从其它地方找来一个 keymap 来改,最后用 loadkeys 来加载新的 keymap。如果把加载的命令放到 /etc/rc.local 里面,启动后就自动加载了。所有的知识都在 showkey loadkeys dumpkeys 和 keymaps 的 man 手册里面。这里只结合我的 keymap 进行简要介绍。

第一行:
keymaps 0-1,4-5,8-9,12
这行很重要,因为 keymap 可以最多有 256 列,所以要先声明该 keymap 定义哪些列。这里只定义 0-1, 4-5, 8-9, 12 这7行。如果像下面这种定义方式(参见 man keymaps,COMPLETE KEYCODE DEFINITIONS),定义一个 keycode 对应的 keysym,也就是该键对应的动作,就要把这7列都注明,定义为 VoidSymbol 表示没有动作。像这种定义方式,第8列开始,以后没有提及,就自动定义为 VoidSymbol 了。

keycode  47 = +v  +V  Control_v VoidSymbol Meta_v Meta_V Meta_Control_v

那这7列都代表什么意思呢?

第0列(以0起记)表示纯按该键的动作(例如,v),第1列表示 Shift-v,第4列表示 Control-v,第5列表示 Control-Shift-v,第8列表示 Alt-v,第9列表示 Alt—Shift-v,第12列表示 Control-Alt-v。

为什么是这样呢?因为每个 modifier ,就象 Control 这种键,都有一个权重 (weight)。分别对应如下:

modifier                weight

Shift                   1
AltGr                   2
Control                 4
Alt                     8
ShiftL                  16
ShiftR                  32
CtrlL                   64
CtrlR                   128
CapsShift               256

第0列对应权重为0,即不加任何 modifier 纯按该键(plain)。第1列为1,即 Shift。第5列为5,即 Control+Shift。依次类推直到256。


第二行:
alt_is_meta
表示 alt meta 通用,加上就行了。


再下面就是定义每个键对应的动作了。不过再介绍另外一种定义方式(参见 man keymaps,SINGLE MODIFIER DEFINITIONS):

control keycode   7 = Control_asciicircum

像这种定义方式,只定义了 Control-7,其他没有提及的按默认,来自内核。

再回到开头,怎样定义切换 Console 与 X 的按键呢?我是直接定义 F1-12 为切换 Console_1 - Console_12,而 F1-12 自身的输入用 Shift-F? 代替。像下面这样:

keycode  59 = Console_1       F1
keycode  60 = Console_2       F2
keycode  61 = Console_3       F3
keycode  62 = Console_4       F4
keycode  63 = Console_5       F5
keycode  64 = Console_6       F6
keycode  65 = Console_7       F7
keycode  66 = Console_8       F8
keycode  67 = Console_9       F9
keycode  68 = Console_10       F10
keycode  87 = Console_11       F11
keycode  88 = Console_12       F12

另外,为了方便,我把 Escape 和 Caps_Lock 调换了一下,把右 Alt 也定义成 Alt(有些键盘默认是定义成 AltGr 的),定义了 AAlt-Shift-v,把它绑定为 scroll-other-window-down。我的 keymap 附后,有兴趣的同学自己看吧。
 wl.kmap.txt  

细心的同学可能会发现,那 X 下面不需要设置吗?需要的,下篇我再简要说说 X 下面的设置,呵!
阅读(3143) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~