Was ist der Unterschied zwischen den Basis- und den EVDEV-XKB-Regeln?

Was ist der Unterschied zwischen den Basis- und den EVDEV-XKB-Regeln?

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-eventszeigte aber die richtige Taste. Nach ÜberprüfungXorg.confist mir die folgende Zeile aufgefallen:

Option "XkbRules" "base"

Nach der Änderung auf evdevfunktionierte 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. evdevist 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 evdevals auch basedie Regeln (meistens) aus denselben Vorlagen generiert werden. Vergleichen Sie diffjedoch die generierten Dateien in Ihrer System-XKB-Datenbank mit . Sie werden viele Einträge sehen, bei denen die Regeln Symbole für bestimmte Tastaturmodelle baseladen , während die Regeln die meisten dieser modellspezifischen Einträge entfernen und einen allgemeineren Satz laden:inetevdev

/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 evdevRegeln, während die baseVersion über 60 Zeilen lang ist. Die evdev.m_s.partDatei ist die Quellvorlage für diesen Abschnitt der Regeln; es handelt sich um eine Modell-zu-Symbol-Zuordnung (die !model = symbolZeile am Anfang dieses Abschnitts; daher das m_sim Dateinamen). Der einzige andere evdev-spezifische Abschnitt der Regeln stammt aus der evdev.m_k.partDatei, nämlich eine Modell-zu-Tastencode-Zuordnung (der !model = keycodesAbschnitt 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/evdevund /usr/share/X11/xkb/symbols/inet). Vielleicht interessiert Sie auchdiese Beschreibung des XKB-Regelformats.

verwandte Informationen