Ich bin gerade von xf86-input-evdev auf xf86-input-libinput umgestiegen und es hat mein Tastaturlayout kaputt gemacht – Pfeiltasten mit rechter Alt-Taste, Kontextmenütaste, Entf-Taste, Numpad-Eingabe usw. waren alle seltsamerweise vertauscht. libinput debug-events
zeigte aber die richtige Taste. Nach ÜberprüfungXorg.conf
ist mir die folgende Zeile aufgefallen:
Option "XkbRules" "base"
Nach der Änderung auf evdev
funktionierte die Tastatur ordnungsgemäß.
Ich fand "Der XKB-Konfigurationsleitfaden“, in dem die verschiedenen Regeln erwähnt werden, aber nicht näher auf ihre Unterschiede eingegangen wird.
Was ist der Unterschied zwischen den beiden Layouts? Ist es in Ordnung, die evdev-Regeln auch mit libinput zu verwenden?
Antwort1
kurz und knapp:Unter Linux sollten Sie die Regeln verwenden evdev
. Wie es in der von Ihnen verlinkten XKB-Anleitung heißt:
Auf Linux-Systemen ist dieAbonnierenRegeln werden am häufigsten verwendet, auf anderen SystemenBaseRegeln werden verwendet.
Der Unterschied ist größtenteils historisch. evdev
ist das moderne Linux-Kernel-Eingabesubsystem und existierte noch nicht, als XKB zum ersten Mal geschrieben wurde. Wenn Sie sich den Quellcode für ansehenxkeyboard-konfiguration, werden Sie feststellen, dass sowohl die Regeln evdev
als auch base
die Regeln (meistens) aus denselben Vorlagen generiert werden. Vergleichen Sie diff
jedoch die generierten Dateien in Ihrer System-XKB-Datenbank mit . Sie werden viele Einträge sehen, bei denen die Regeln Symbole für bestimmte Tastaturmodelle base
laden , während die Regeln die meisten dieser modellspezifischen Einträge entfernen und einen allgemeineren Satz laden: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
Nein, wirklich, das ist der gesamte Abschnitt „Modell zu Symbolen“ aus den evdev
Regeln, während die base
Version über 60 Zeilen lang ist. Die evdev.m_s.part
Datei ist die Quellvorlage für diesen Abschnitt der Regeln; es handelt sich um eine Modell-zu-Symbol-Zuordnung (die !model = symbol
Zeile am Anfang dieses Abschnitts; daher das m_s
im Dateinamen). Der einzige andere evdev-spezifische Abschnitt der Regeln stammt aus der evdev.m_k.part
Datei, nämlich eine Modell-zu-Tastencode-Zuordnung (der !model = keycodes
Abschnitt der Regeln), und die Unterschiede sind dort ähnlich.
Weitere Einzelheiten finden Sie imSchlüsselcodesUndSymboleDateien, auf die diese Regeln verweisen (insbesondere /usr/share/X11/xkb/keycodes/evdev
und /usr/share/X11/xkb/symbols/inet
). Vielleicht interessiert Sie auchdiese Beschreibung des XKB-Regelformats.