感谢支持
我们一直在努力

Linux 中的键盘映射

对于英语来说,键盘上的字母键直接和英语字母表中的字母对应,但是对于非英语的语种来说,情况就不太一样了。例如,德语中的“ß”字母就没有直接的键和它对应,为此,Linux 提供“键盘映射”或“键盘翻译”,利用键盘映射可将某些键转换为特殊键。


前面提到,X Window 直接处理了键盘的输入输出端口,因此,在 Linux 虚拟控制台下和 X Window 下使用不同的键盘映射方法。在 Linux 虚拟控制台上,可利用 loadkeys 命令将特殊按键映射为特殊字符;而在 X Window 中,必须使用 xmodmap 命令完成键盘映射。这些命令均按照字符映射表文件(文本文件)中的规定完成相应的转换。在 X Window 启动时,它会参考 Linux 文本模式下的字符映射表,因此可获得某些一致的键映射。


字符映射表文件保存在 /usr/lib/kbd/keytables 目录下,defkeymap.map 是默认的字符映射表文件。利用命令:


$ loadkeys fr.map


可装入 fr.map 所规定的字符映射表。这时,按下“.”会显示“:”。命令


$ loadkeys –d


可装入默认字符映射表。对于非默认的键盘映射,可在启动时在 shell 脚本中装入特殊的映射表。


对X Window 而言,它对键盘的处理过程分如下两个步骤:


1.X Server 首先将键码转换为键符号名(keysym)。文件 /usr/include/X11/keysymdef.h 中包含所有的符号名。X Server 能够区分修饰键带来的不同,因为 keysymdef.h 中区分了两种不同的键,例如对“a”和“A”,分别用“KS_a”和“KS_A”定义。


2.X Server 将键符号翻译为 ASCII 字符串。对于大多数的键来说,该字符串只包含一个字符,而对于功能键等特殊按键来说,则包含多个字符。例如,F5 键对应的默认 ASCII 字符串为 “5~”。


利用 xmodmap 工具可修改键盘和键符号名之间的对应关系。例如,X Window 中“A”的键码为 30,而“Q”的键码为16。如果建立文件 maptest:


keycode 38 = A


keycode 24 = Q


在 xterm 中运行


$ xmodmap maptest


之后,将发现“A”键和“Q”键交换了过来。


上述的 maptest 文件实际就是一个简单的 X Window 映射文件。但需要注意的是,文件中的 keycode 和 Linux 内核对键值的定义是不一样的,一般而言,X Window 中的键码要比内核的键值大 8。利用 showkey 命令可以查看内核对键值的定义。例如,运行 showkey 并前后按下“A”和“Q”后,程序的输出为:


$ showkey
kb mode was RAW

keycode 30 press
keycode 30 press
keycode 16 press
keycode 16 press
该程序给出的是“A”和“Q”的内核键值。
在 XF86Config 文件中,Keyboard 段用来指定键盘参数,一般而言,这些参数不需要特殊设置:
Section “Keyboard”
    Protocol    “Standard”
    AutoRepeat 500 5
EndSection

赞(0) 打赏
转载请注明出处:服务器评测 » Linux 中的键盘映射
分享到: 更多 (0)

听说打赏我的人,都进福布斯排行榜啦!

支付宝扫一扫打赏

微信扫一扫打赏