Я только что переключился с 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.