<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>映射 | Hessian's Blog</title><link>https://hessian.cn/tag/%E6%98%A0%E5%B0%84</link><description>Hessian 的技术笔记：Linux、C++、网络与嵌入式</description><language>zh-CN</language><atom:link href="https://hessian.cn/tag/%E6%98%A0%E5%B0%84/index.xml" rel="self" type="application/rss+xml"/><item><title>[转]Linux 中的键盘映射</title><link>https://hessian.cn/p/144.html</link><pubDate>Tue, 23 Aug 2011 00:17:42 +0800</pubDate><guid>https://hessian.cn/p/144.html</guid><description> 原文地址：http://www.linuxidc.com/Linux/2011-04/35197.htm&#10; &#10;对于英语来说，键盘上的字母键直接和英语字母表中的字母对应，但是对于非英语的语种来说，情况就不太一样了。例如，德语中的“ß”字母就没有直接的键和它对应，为此，Linux 提供“键盘映射”或“键盘翻译”，利用键盘映射可将某些键转换为特殊键。&#10;前面提到，X Window 直接处理了键盘的输入输出端口，因此，在 Linux 虚拟控制台下和 X Window 下使用不同的键盘映射方法。在 Linux 虚拟控制台上，可利用 loadkeys 命令将特殊按键映射为特殊字符；而在 X Window 中，必须使用 xmodmap 命令完成键盘映射。这些命令均按照字符映射表文件（文本文件）中的规定完成相应的转换。在 X Window 启动时，它会参考 Linux 文本模式下的字符映射表，因此可获得某些一致的键映射。&#10;字符映射表文件保存在 /usr/lib/kbd/keytables 目录下，defkeymap.map 是默认的字符映射表文件。利用命令：&#10;$ loadkeys fr.map 可装入 fr.map 所规定的字符映射表。这时，按下“.”会显示“:”。命令&#10;$ loadkeys –d 可装入默认字符映射表。对于非默认的键盘映射，可在启动时在 shell 脚本中装入特殊的映射表。&#10;对X Window 而言，它对键盘的处理过程分如下两个步骤：&#10;1．X Server 首先将键码转换为键符号名（keysym）。文件 /usr/include/X11/keysymdef.h 中包含所有的符号名。X Server 能够区分修饰键带来的不同，因为 keysymdef.h 中区分了两种不同的键，例如对“a”和“A”，分别用“KS_a”和“KS_A”定义。&#10;2．X Server 将键符号翻译为 ASCII 字符串。对于大多数的键来说，该字符串只包含一个字符，而对于功能键等特殊按键来说，则包含多个字符。例如，F5 键对应的默认 ASCII 字符串为 “5~”。&#10;利用 xmodmap 工具可修改键盘和键符号名之间的对应关系。例如，X Window 中“A”的键码为 30，而“Q”的键码为16。如果建立文件 maptest：&#10;keycode 38 = A&#13;keycode 24 = Q 在 xterm 中运行&#10;$ xmodmap maptest 之后，将发现“A”键和“Q”键交换了过来。&#10;上述的 maptest 文件实际就是一个简单的 X Window 映射文件。但需要注意的是，文件中的 keycode 和 Linux 内核对键值的定义是不一样的，一般而言，X Window 中的键码要比内核的键值大 8。利用 showkey 命令可以查看内核对键值的定义。例如，运行 showkey 并前后按下“A”和“Q”后，程序的输出为：&#10;$ showkey&#13;kb mode was RAW&#13;...&#13;keycode 30 press&#13;keycode 30 press&#13;keycode 16 press&#13;keycode 16 press 该程序给出的是“A”和“Q”的内核键值。&#10;在 XF86Config 文件中，Keyboard 段用来指定键盘参数，一般而言，这些参数不需要特殊设置：&#10;Section “Keyboard”&#13;Protocol “Standard”&#13;AutoRepeat 500 5&#13;EndSection</description></item></channel></rss>