在 PC 键盘上按动按键时,会生成大致基于按键位置的 PC 扫描代码。例如,德语键盘上的 Z 键生成的代码与英语键盘的 Y 键相同,因为它们处在键盘的同一个位置。大多数按键都有一个单字节扫描代码,而有些按键具有以 0xe0 为前缀的双字节扫描代码。
Workstation Player 内部使用简化版 PC 扫描代码,该代码是一个九位数值,称为 v-scan 代码。v-scan 代码以三位十六进制数的形式进行写入。第一个数位是 0 或 1。例如,键盘左侧的 Ctrl 键对应一个单字节扫描代码 (0x1d),其 v-scan 代码是 0x01d。键盘右侧的 Ctrl 键扫描代码是双字节 (0xe0, 0x1d),其 v-scan 代码是 0x11d。
PC 上的 XFree86 服务器采用从 X 按键代码到 PC 扫描代码或 v-scan 代码的一对一映射,这也是 Workstation Player 所用的方法。当 Workstation Player 驻留在 XFree86 服务器上并运行本地虚拟机时,它会使用从 X 按键代码到 v-scan 代码的内置映射。该映射与键盘无关,应当适合于大部分语言。在其他情况下(非 XFree86 服务器或非本地服务器),Workstation Player 必须使用一组特定于键盘的表将键盘符号映射到 v-scan 代码。
X 服务器使用二级按键编码,其中包括 X 按键代码和键盘符号。X 按键代码是一个单字节值。按键的按键代码分配情况取决于 X 服务器的实施情况和物理键盘。因此,X 应用程序一般无法直接使用按键代码。按键代码会映射到采用 space、escape、x 和 2 等类似名称的键盘符号。您可以使用 X 应用程序来控制映射,方法是使用 XChangeKeyboardMapping()
函数或 xmodmap 程序。要查看键盘映射,您可以使用 xev 命令显示键入到窗口的按键的按键代码和键盘符号。
按键代码大致与物理按键相对应,而键盘符号则与按键顶部的符号相对应。例如,当 XFree86 服务器在 PC 上运行时,德语键盘的 Z 键和英语键盘的 Y 键具有相同的按键代码。然而,德语 Z 键的键盘符号和英语 Z 键的键盘符号相同,且不同于英语 Y 键的键盘符号。