Zum Inhalt springen

XKB

Aus wiki.archlinux.de

„XKB“ wurde von Dirk (Diskussion) als in Bearbeitung markiert. Um Bearbeitungskonflikte zu vermeiden, kontaktiere Dirk (Diskussion) bitte, bevor du den Artikel bearbeitest.


Dieser Artikel oder Artikelabschnitt ist noch nicht vollständig!


Hinweis: Dieser Wiki-Artikel hat den primären Zweck, die Funktionsweise von XKB zu erläutern. Informationen zum Setzen des Tastaturlayouts mittels XKB finden sich am Ende des Artikels.

Die X keyboard extension, oder kurz XKB, ist ein unter X optionales und unter Wayland standardmäßiges System zur Definition eigener, und Anpassung bestehender, Tastaturlayouts, ähnlich wie es exklusiv für X mittels der Xmodmap möglich ist. XKB hat dabei einen modernen Ansatz und erlaubt neben der einfachen Tastenbelegung sehr viele und komplexe Anpassungen des Layouts, ist dadurch aber auch um ein vielfaches komplexer.

Installation

XKB wird über das Paket libxkbcommon bereitgestellt, es muss allerdings im Normalfall nicht installiert werden, da sowohl die gängigen Desktopumgebungen als auch Fenstermanager indirekt durch deren Abhängigkeiten von XKB abhängen.

Für X gibt es diverse Programme, über die XKB konfiguriert werden kann. Da XKB unabhängig von X ist, und die Programme daher nichts X-spezifisches machen, können diese teilweise auch innerhalb von Wayland-Kompositoren benutzt werden. libxkbcommon bringt zudem xkbcli mit, um sich verschiedene XKB-Konfigurationen ausgeben zu lassen.

Die Verwendung von XKB ist abhängig des benutzten Desktop Environments, Fenstermanagers, oder Kompositors. Siehe hier.

Überblick

Die systemweite Konfiguration von XKB liegt bei Arch unter /usr/share/X11/xkb/. In dessen Unterverzeichnis symbols befinden sich die die verfügbaren Tastaturlayoutdefinitionsdateien. Die gleiche Struktur kann für die userbezogene Konfiguration unter ~/.config/xkb/ aufgebaut werden.

XKB geht in dieser Reihenfolge durch die spezifizierten Verzeichnisse. XKB iteriert dabei so lange durch die Verzeichnisse, bis die angeforderte Information gefunden wurde.

  1. $XDG_CONFIG_HOME/xkb/ oder $HOME/.config/xkb/, wenn die Umgebungsvariable XDG_CONFIG_HOME micht gesetzt wurde
  2. Aus historischen Gründen noch $HOME/.xkb/, sollte aber nicht mehr genutzt werden
  3. $XKB_CONFIG_EXTRA_PATH oder wenn nicht gesetzt /etc/xkb.
  4. $XKB_CONFIG_ROOT oder wenn nicht gesetzt /usr/share/X11/xkb

Die Dateien in diesen Verzeichnissen werden automatisch erkannt und können über ihren Namen, oder die von XKB aus den Dateien heraus generierten IDs direkt benutzt werden.

Abschnitte

XKB-Dateien werden in Abschnitte unterteilt. Diese Umfassen die eigentlichen Tastenkonfigurationen (xkb_symbols), die verschiedenen Varianten des Layouts, die physikalische Beschreibung der Tastatur, etc. In diesem Wiki-Artikel werden nur die xkb_symbols behandelt. Diese Unterteilung macht es aber möglich, verschiedene einzelne Konfigurationen in anderen Layouts einzubinden.

Das Einbinden erfolgt dabei immer im gleichen Muster: layoutname(layoutvariante). Der Layoutname entspricht dem Dateinamen, die Variante wird bei der Definition eines xkb_symbols-Abschnitts angegeben.

Auch selbstreferentielle Einbindungen sind möglich. Das Beispiel hier im Wiki unterteilt die einzelnen Definitionen in eigene Abschnitte, und referenziert diese mittels mein-layout(abschnittsname) im „Header“, um sie automatisch zu laden, wenn das Layout verwendet wird.

Will man nicht, dass ein Abschnitt eingebunden werden kann, so muss man ihn mit dem Keyword hidden definieren:

hidden xkb_symbols "versteckt" {
  ...
};

Hierdurch kann der Abschnitt nur innerhalb der aktuellen Definition verwendet werden.

Weitere Abschnittsoptionen sind unter anderem partial, um einen Abschnitt zu definieren der nicht den kompletten Tastaturbereich abdeckt, keypad_keys für einen Abschnitt, der nur die Tasten des Nummernfeldes behandelt, oder modifier_keys um einen Abschnitt zu definieren, in dem Modifier Keys, wie ⇧ Shift, Alt, etc. definiert werden. Einige der Angaben können auch kombiniert werden. Es hat sich bei mehreren Angaben etabliert, diese auf eine eigene Zeile zu setzen.

partial function_keys modifier_keys 
xkb_symbols "special-keys" {
  ...
};

Dies definiert unter dem Namen special-keys einen unvollständigen Abschnitt (partial) mit Funktionstasten und den Modifier Keys.

Informationen anzeigen

xkbcli mit geöffnetem interaktiven Fenster (weiß) zeigt einige Informationen zu verschiedenen gedrückten Tasten. Der hintere Teil der sehr breiten Ausgabe ist Abgeschnitten.

Mit libxkbcommon wird unter anderem auch das Tool xkbcli installiert, das es ermöglicht, allerlei Informationen bezüglich der aktuellen Konfiguration auszulesen.

Mittels xkbcli interactive-wayland (bzw. ...x11 oder ...evdev) kann man ein kleines Fenster öffnen, über das man ähnlich wie mit xev oder wev die gedrückten Tasten überprüfen kann. Verlassen kann man das Programm, indem man den Prozess beendet. xkbcli zeigt zu den Tasten diverse Informationen im Stil von information [ wert ] an. Für die Anzeige im Wiki wurden die Informationen untereinander geschrieben, beim Ausführen sind diese alle in einer Zeile.

seat0:
keycode [ AE01 ]
keysyms [ 1                            ]
unicode [ 1 ]
layout [ English (US) (0) ]
level [ 0 ]
mods [ Mod2 NumLock ]
leds [ Num Lock ]

Hier wurde einzig und alleine die Taste 1 gedrückt. Es werden der für die Definition des Layouts benötige Keycode, der Keysym, dessen Unicode-Repräsentation, sowie die gedrückten Modifier Keys angezeigt. Beim Drücken von ⇧ Shift + 1 wird neben dem Drücken von Shift auch die nun veränderte Ausgabe gezeigt.

seat0: keycode [ AE01 ] keysyms [ exclam                       ] unicode [ ! ]
...
mods [ -Shift Mod2 NumLock ] leds [ Num Lock ]

Zudem werden am Ende die aktiven Modifier angezeigt.

Man kann mittels xkbcli how-to-type auch abfragen, wie man ein bestimmtes Zeichen tippen kann.

xkbcli how-to-type !
keysym: exclam (0x21)
KEYCODE  KEY NAME  LAYOUT   LAYOUT NAME          LEVEL#  MODIFIERS
10       AE01      1        English (US)         2       [ Shift ]

Dies gibt die Informationen zu Keycode und -name, sowie das Layout aus, zeigt den Keysym, auf welchem Level das gewünschte Zeichen liegt, und mit welchen Modifier Keys man dies erreichen kann.

xkbcli how-to-type ẞ
keysym: U1E9E (0x1001e9e)
KEYCODE  KEY NAME  LAYOUT   LAYOUT NAME          LEVEL#  MODIFIERS
39       AC02      1        English (US)         4       [ Shift Mod5 ]
39       AC02      1        English (US)         4       [ Lock Mod5 ]

Hier wird das große Eszett (ẞ) abgefragt. Gemäß Beispielkonfiguration nach diesem Wikiartikel ist dieses über zwei Kombinationen erreichbar: ⇧ Shift + Alt_R, sowie ⇪ Capslock + Alt_R.

Andersherum funktioniert die Abfrage auch. So kann man zum Beispiel nach dem Ä (in der Terminologie „Adiaeresis“, siehe Weblinks) fragen.

xkbcli how-to-type --keysym Adiaeresis
keysym: Adiaeresis (0xc4)
KEYCODE  KEY NAME  LAYOUT   LAYOUT NAME          LEVEL#  MODIFIERS
38       AC01      1        English (US)         4       [ Shift Mod5 ]
38       AC01      1        English (US)         4       [ Lock Mod5 ]

Auch hier werden wieder der Keysum, sowie die konfigurierten Tasten ausgegeben.

Das aktuelle Layout kann man sich mittels des Parameters dump-keymap-wayland (bzw. ...x11 oder ...evdev) ausgeben lassen. Dies zeigt alle Konfigurationsoptionen des aktuellen Layouts in dem Format an, in dem man auch die Layouts definiert. Wobei alle Tasten in einem einzigen Abschnitt zusammengefasst werden. Falls man nicht weiß oder durchtesten möchte, welche Taste z.B. AC02 ist, kann man dies mittels folgender Abfrage leicht nachsehen.

xkbcli dump-keymap-wayland | grep 'key <AC02>'
key <AC02> { [ s, S, ssharp, U1E9E ] };

Dies zeigt, basierend auf der Konfiguration an, dass <AC02> aller Wahrscheinlichkeit nach, S ist. Es werden folgende Symbole genutzt:

  • Level 1: S = s
  • Level 2: ⇧ Shift + S = S
  • Level 3: Alt_R + S = ß
  • Level 4: ⇧ Shift + Alt_R + S =

Eigenes Layout

Hinweis: Es ist zu beachten, dass XKB bei Fehlkonfiguration sowohl den X-Server als auch jegliche Wayland-Kompositoren zum Absturz bringen kann. Wenn man das Layout entwickelt, sollte man also sicherstellen, dass andere Programme und Dateien geschlossen oder gespeichert sind.

Will man ein eigenes Layout anlegen, so kann man dies entweder systemweit unter /usr/share/X11/xkb/symbols/mein-layout oder userbezogen unter ~/.config/xkb/symbols/mein-layout geschehen. Der Wiki-Artikel benutzt als Beispiel eine Tastatur mit englischem Layout (ANSI-US, QWERTY-Layout), prinzipiell lässt sich alles aus diesem Artikel genau so auf alle anderen Layouts anwenden.

Sofern man das eigene Layout bei der Erstellung auf dem Gerät testet, auf dem man es auch entwickelt, so sollte man sicherstellen, dass die Möglichkeit besteht, das System nur unter Verwendung der Maus sauber zu verlassen. Alternativ kann man sich z.B. per SSH von einem anderen Host aus zum Rechner verbinden, und XKB im Remote-Terminal konfigurieren, so dass fehlende Funktionalität der Tastatur auf dem Gerät nicht relevant ist.

Konfigurations-„Header“

Sofern man nicht ein komplettes eigenes Layout erstellen will, sondern ein bestehendes Layout Anpassen will, so sollte man dies entsprechend einbinden.

~/.config/xkb/symbols/mein-layout
default xkb_symbols "basic" {
  Name[Group1] = "ANSI-US (Angepasst)";
  include "us"
  include "level3(ralt_switch)"
  include "mein-layout(umlaute)"
  include "mein-layout(pfeile)"
  include "mein-layout(better-capslock)"
};

Dieser Abschnitt wird mittels default als Standardabschnitt definiert der benutzt wird, sofern man beim Anwenden des Layouts keine Variante angibt. Der Abschnitt heißt basic. Es wird hier folgendes konfiguriert:

  • Name[Group1] = '...' = Name der ersten Gruppe an Symbolen. Es können bis zu vier Gruppen definiert werden, die mittels verschiedener Modifier-Tasten aktiviert werden können.
  • include "us" = Dies lädt das US-Tastaturlayout für die im Beispiel verwendete Tastatur, damit das eigene Layout vollständig ist, ohne, dass man jede Taste explizit konfigurieren muss.
  • include "level3(ralt_switch)" Hiermit wird die Variante ralt_switch aus dem Layout level3 geladen. Dies ermöglicht es, mittels des rechten Alt auf einer ANSI-Tastatur, ISO_Level3_Shift zu senden schalten, was dem von ISO-Tastaturen (ISO-DE) bekannten AltGr entspricht. Mittels AltGr + ⇧ Shift erreicht man zudem ISO_Level4_Shift.
  • Mittels weiterer include-Abschnitte können beliebig viele andere Layouts und Layout-Varianten eingebunden werden.

Die Abschnitte umlaufe, pfeile, und better-capslock werden im weiteren Verlauf definiert. Sie werden in beliebiger Reihenfolge unterhalb des „Headers“ definiert und zeigen Beispielhaft einige Möglichkeiten der Definition auf.

Umlaute

Das Beispiel nutzt eine ANSI-US-Tastatur, als solche verfügt sie nicht über Umlaute. Mittels der folgenden Konfiguration werden die Umlaute in einer Gruppe definiert.

partial alphanumeric_keys
xkb_symbols "umlauts" {
   key <AC01> {[  a , A , adiaeresis , Adiaeresis  ]};
   key <AD09> {[  o , O , odiaeresis , Odiaeresis  ]};
   key <AD07> {[  u , U , udiaeresis , Udiaeresis  ]};
   key <AC02> {[  s , S , ssharp     , U1E9E       ]};
};

...

Pfeile

„Better CapsLock“

Ein Layout verwenden

Wayland

Wayland-Kompositoren setzen das zu verwendende Keyboardlayout standardmäßig mittels XKB. Wie genau dies geschieht, ist abhängig vom verwendeten Kompositor.

labwc zum Beispiel benutzt die Umgebungsvariable XKB_DEFAULT_LAYOUT.

~/.config/labwc/environment
XKB_DEFAULT_LAYOUT='mein-Layout'
[...]

Dies setzt mein-layout mit allen weiteren Standardoptionen. Siehe Abschnitt zum Setzen des Tastaturlayouts im labwc-Wikiartikel.

Der Kompositor Hyprland verwendet einen Abschnitt in der Konfiguration.

~/.config/hypr/hyprland.conf
input {
  kb_layout = mein-layout
  [...]
}

Auch Hyprland erlaubt eine weitere Spezifizierung der Optionen und Verianten.

Es sei nochmals generell auf die Dokumentation des verwendeten Kompositors verwiesen.

X

Sofern man noch X benutzt, kann man hier ebenfalls XKB benutzen, um das Tastaturlayout einzustellen.

Systemweit

Man kann sich hier an den Abschnitt zu X.org im Wiki-Artikel zur Einstellung von Arch auf Deutsch orientieren. In Option "XkbLayout" "de" gibt man dann statt de den namen des erstellten Layouts an, im Beispiel also Option "XkbLayout" "mein-layout". Wenn man das Layout systemweit einstellt, sollte man es in /usr/share/X11/xkb/ ablegen, damit alle Useraccounts darauf zugreifen können.

Userbezogen

Für eine Userbezogene Konfiguration kann man, sofern die Desktopumgebung oder der Fenstermanager es nicht unterstützen, das Programm setxkbmap in den Autostart packen.

setxkbmap mein-layout

Damit wird der Standard-Abschnitt aus mein-layout für die aktuelle X-Session geladen, dies ist von der Funktionsweise her identisch zur Xmodmap.

Siehe auch

  • Xmodmap für einen X-spezifischen Weg

Weblinks