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 .