Eu criei um layout de teclado personalizado, ~/dot/c98.xkb
. Parece assim:
// 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" {
};
};
Obviamente, há coisas realmente nos blocos vazios, mas eu pulei para economizar espaço.
Compilar e descompactar através de xkbcomp c98.xkb c98.xkm; xkbcomp c98.xkm c98_xkm.xkb
cria um arquivo equivalente ao original (tão semelhante quanto qualquer código decompilado).
No entanto, fazê-lo através de xkbcomp c98.xkb $DISPLAY; xkbcomp $DISPLAY c98_display.xkb
resulta em uma mensagem de erro (ainda funciona, porém; mensagem copiada abaixo) e um arquivo que tem alguma semelhança com o original:
keycodes
inclui evdev+aliases(qwerty)
em vez de apenas evdev
. Ele foi renomeado para evdev+aliases(qwerty)
. types
contém muitas coisas, mas não o que eu especifiquei (parece incluir apenas complete
) e foi renomeado para complete
/ compat
contém o que eu disse, mas com mais virtual_modifiers
. Esse também é chamado complete
. symbols
contém o que deveria, exceto que o campo name[group1]
foi alterado para English (US)
e alguns dos campos type
têm valores estranhos - eu acho que armazena índices e não nomes, e desde o campo types
está corrompido ... O nome deste bloco foi alterado para pc+us+inet(evdev)
. geometry
parece conter exatamente o que deveria, incluindo o nome do bloco. Parece que xkbcomp
copia apenas alguns dos blocos por algum motivo, deixando os campos keycodes
e types
sozinhos.
A mensagem de erro mencionada ao tentar definir o layout é:
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
O código-fonte completo, bem como a comparação entre c98_xkm.xkb
e c98_display.xkb
, podem ser encontrados aqui .