你没有过因为字符终端(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) |