当前XKB配置的键盘映射源(.xkb格式)可以通过运行获取xkbcomp $DISPLAY -
。映射到键符号是在xkb_symbols
此文件的部分中完成的。本节中的一些定义显式定义了 key type
,它指示哪些修饰符对各个keysym
级别进行索引;例如:
key <AD01> {type= "ALPHABETIC", [q, Q]};
其他行不指定其类型;例如:
key <AE01> {[1, exclam]};
在这种情况下,类型是不明确的,因为此文件的部分中定义了多个两级类型xkb_types
(TWO_LEVEL、ALPHABETIC、KEYPAD、SHIFT+ALT、PC_SUPER_LEVEL2 等)。因此,对于给定数量的级别必须有隐式(或默认)类型(例如,当未给出类型但存在两个级别时,隐式两级类型)。这些隐式类型在哪里定义的?它只是其中出现的第一种xkb_types
具有所需级别数的类型吗?
答案1
默认值在X 键盘扩展:协议规范对于第 12.2.3 节(第 41-42 页)和附录 B 中的 X11R6.4。具体而言,ONE_LEVEL、TWO_LEVEL、ALPHABETIC 和 KEYPAD 被视为规范类型,并在字母数字扩展后根据以下标准进行选择:
对于每个没有显式类型定义的键盘组,XKB 从规范的按键类型中选择一个按键类型。如果分配给组的第二个符号是 NoSymbol(按字母扩展后),则服务器分配密钥类型 ONE_LEVEL。如果该组包含单个字形的小写和大写形式(字母数字扩展后),则服务器分配键类型 ALPHABETIC。如果组中的任一符号是数字小键盘键盘符号 (KP_*),则服务器分配按键类型 KEYPAD。否则,它分配密钥类型 TWO_LEVEL。
该协议没有为具有两个以上级别的组指定规范类型。