Пользовательская раскладка клавиатуры не используется дословно

Я создал пользовательскую раскладку клавиатуры, ~/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 c98.xkm; xkbcomp c98.xkm c98_xkm.xkb создает файл, который эквивалентен оригиналу (как и любой декомпилированный код).

Однако, делая это через xkbcomp c98.xkb $DISPLAY; xkbcomp $DISPLAY c98_display.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 можно найти здесь .