我创建了一个自定义键盘布局,~/dot/c98.xkb
.它看起来像这样:
// vim: ft=xkb
xkb_keymap {
xkb_keycodes "k" { include "evdev(evdev)" };
xkb_geometry "g" { include "pc(pc105)" };
xkb_types "t" {
};
xkb_compat "c" {
};
xkb_symbols "s" {
};
};
显然,空块中实际上有东西,但我跳过它以节省空间。
编译和反编译它xkbcomp c98.xkb c98.xkm; xkbcomp c98.xkm c98_xkm.xkb
会创建一个与原始文件等效的文件(与任何反编译代码类似)。
然而,执行此操作xkbcomp c98.xkb $DISPLAY; xkbcomp $DISPLAY c98_display.xkb
会导致错误消息(尽管它仍然有效;消息复制如下),并且文件与原始文件略有相似:
keycodes
包括evdev+aliases(qwerty)
而不只是evdev
.它已更名为evdev+aliases(qwerty)
.types
包含很多东西,但不是我指定的(似乎只是包含complete
),并且已重命名为complete
/compat
包含我告诉它的内容,但还有更多virtual_modifiers
。那个也叫complete
。symbols
包含它应该包含的内容,除了该name[group1]
字段已更改为English (US)
,并且某些字段type
具有奇怪的值 - 我猜它存储索引而不是名称,并且由于该types
字段已损坏...该块的名称已更改为pc+us+inet(evdev)
。geometry
似乎包含了它应该包含的内容,包括块名称。
由于某种原因,似乎xkbcomp
只复制了一些块,而忽略了keycodes
和types
字段。
尝试设置布局时的上述错误消息是:
X Error of failed request: BadAtom (invalid Atom parameter)
Major opcode of failed request: 135 (XKEYBOARD)
Minor opcode of failed request: 18 (XkbSetNames)
Atom id in failed request: 0x435345
Serial number of failed request: 70
Current serial number in output stream: 73
完整的源代码以及c98_xkm.xkb
和之间的差异c98_display.xkb
可以找到这里。