В чем разница между правилами base и evdev xkb?

В чем разница между правилами base и evdev xkb?

Я только что переключился с xf86-input-evdev на xf86-input-libinput, и это сломало мою раскладку клавиатуры — клавиши со стрелками, правый alt, клавиша контекстного меню, клавиша Delete, клавиша Enter на цифровой клавиатуре и т. д. — все странно поменялось местами. libinput debug-eventsХотя клавиша была указана правильная. После проверкиXorg.conf, я заметил следующую строку:

Option "XkbRules" "base"

После изменения на evdevклавиатура заработала правильно.

Я нашел "Руководство по настройке XKB», в котором упоминаются различные правила, но не вдаются в подробности их различий.

В чем разница между двумя макетами? Можно ли использовать правила evdev даже с libinput?

решение1

вкратце:В Linux вы должны использовать evdevправила. Как говорится в руководстве XKB, на которое вы ссылаетесь:

В системах Linuxевдевправила используются чаще всего, в других системахбазаправила используются.


Разница во многом историческая. evdev— это современная подсистема ввода ядра Linux, которая не существовала, когда XKB был впервые написан. Если вы посмотрите на исходный кодxkeyboard-config, вы обнаружите, что evdevи baseправила и генерируются из (в основном) одних и тех же шаблонов. Сравните сгенерированные файлы в вашей системной базе данных XKB с diff, однако. Вы увидите много записей, где baseправила загружают inetсимволы для определенных моделей клавиатур, в то время как evdevправила убирают большинство этих записей, специфичных для моделей, и загружают более обобщенный набор:

/usr/share/X11/xkb/rules/base:
[...]
! model         =       symbols
  a4techKB21    =       +inet(media_nav_common)
  asus_laptop   =       +inet(media_common)
  acer_tm_800   =       +inet(acer_laptop)
  benqx730      =       +inet(benqx)
  btc9116u      =       +inet(btc9019u)
  chromebook    =       +inet(chromebook)
  dellsk8125    =       +inet(dell)
// and about 50 more lines
// generated from xkeyboard-config/rules/base.m_s.part

/usr/share/X11/xkb/rules/evdev
[...]
! model         =       symbols
  $evdevkbds    =   +inet(evdev)+inet(%m)
  chromebook    =   +inet(evdev)+inet(chromebook)
  applealu_jis  =   +inet(evdev)+macintosh_vndr/jp(alujiskeys)
  *             =   +inet(evdev)
// ...that's all.
// generated from xkeyboard-config/rules/evdev.m_s.part

Нет, правда, это весь раздел evdevправил "модель-символ", тогда как baseверсия содержит 60 с лишним строк. Файл evdev.m_s.partявляется исходным шаблоном для этого раздела правил; это сопоставление модели-символа (строка !model = symbolв начале этого раздела; отсюда и m_sв имени файла). Единственный другой раздел правил, специфичный для evdev, взят из файла evdev.m_k.part, который представляет собой сопоставление модели-кодов клавиш ( !model = keycodesраздел правил), и различия там схожи.

Для получения более подробной информации обратитесь ккоды клавишисимволыфайлы, на которые ссылаются эти правила (особенно /usr/share/X11/xkb/keycodes/evdevи /usr/share/X11/xkb/symbols/inet). Вас может заинтересоватьэто описание формата правил XKB.

Связанный контент