XKB: Unterschied zwischen den Versionen
Dirk (Diskussion | Beiträge) |
Dirk (Diskussion | Beiträge) |
||
(45 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
{{ | {{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 [[#Ein_Layout_verwenden|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 | 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 Tastenkonfiguration sehr viele und umfangreiche Anpassungen des Layouts, ist dadurch aber auch komplexer. | |||
== Installation == | == Installation == | ||
XKB wird über das Paket {{Paket|libxkbcommon}} bereitgestellt, es muss allerdings im Normalfall nicht installiert werden, da | XKB wird über das Paket {{Paket|libxkbcommon}} bereitgestellt, es muss allerdings im Normalfall nicht installiert werden, da die gängigen [[:Kategorie:Compositor|Compositoren]] und [[:Kategorie:Fenstermanager|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 im Normalfall nichts X-spezifisches machen, können diese teilweise auch innerhalb von Wayland-Compositoren benutzt werden. ''libxkbcommon'' bringt zudem {{ic|xkbcli}} mit, um sich verschiedene XKB-Konfigurationen ausgeben zu lassen. | |||
== Überblick == | == Überblick == | ||
{{hinweis|Der Wiki-Artikel benutzt {{taste|RALT}}, um die rechte {{taste|Alt}}-Taste zu referenzieren. Auf einer deutschen Tastatur ist dies im Regelfall die {{taste|AltGr}}. {{ic|RALT}} ist in der Nomenklatur von XKB die tastenbeschriftungsunabhängige Bezeichnung dieser Taste.}} | |||
Die systemweite Konfiguration von XKB liegt bei Arch unter {{ic|/usr/share/X11/xkb/}}. In dessen Unterverzeichnis {{ic|symbols}} befinden sich die die verfügbaren Tastaturlayoutdefinitionsdateien. Die gleiche Struktur kann für die userbezogene Konfiguration unter {{ic|~/.config/xkb/}} aufgebaut werden. | Die systemweite Konfiguration von XKB liegt bei Arch unter {{ic|/usr/share/X11/xkb/}}. In dessen Unterverzeichnis {{ic|symbols}} befinden sich die die verfügbaren Tastaturlayoutdefinitionsdateien. Die gleiche Struktur kann für die userbezogene Konfiguration unter {{ic|~/.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. | XKB geht in dieser Reihenfolge durch die spezifizierten Verzeichnisse. XKB iteriert dabei so lange durch die Verzeichnisse, bis die angeforderte Information gefunden wurde. | ||
# {{ic|$XDG_CONFIG_HOME/xkb/}} oder {{ic|$HOME/.config/xkb/}}, wenn die [[Umgebungsvariablen|Umgebungsvariable]] {{ic|XDG_CONFIG_HOME}} | # {{ic|$XDG_CONFIG_HOME/xkb/}} oder {{ic|$HOME/.config/xkb/}}, wenn die [[Umgebungsvariablen|Umgebungsvariable]] {{ic|XDG_CONFIG_HOME}} nicht gesetzt wurde | ||
# Aus historischen Gründen noch {{ic|$HOME/.xkb/}}, sollte aber nicht mehr genutzt werden | # Aus historischen Gründen noch {{ic|$HOME/.xkb/}}, sollte aber nicht mehr genutzt werden | ||
# {{ic|$XKB_CONFIG_EXTRA_PATH}} oder wenn nicht gesetzt {{ic|/etc/xkb}}. | # {{ic|$XKB_CONFIG_EXTRA_PATH}} oder wenn nicht gesetzt {{ic|/etc/xkb/}}. | ||
# {{ic|$XKB_CONFIG_ROOT}} oder wenn nicht gesetzt {{ic|/usr/share/X11/xkb}} | # {{ic|$XKB_CONFIG_ROOT}} oder wenn nicht gesetzt {{ic|/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 | 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 === | === Abschnitte === | ||
XKB-Dateien werden in Abschnitte unterteilt. Diese Umfassen die eigentlichen Tastenkonfigurationen ({{ic|xkb_symbols}}), die verschiedenen Varianten des Layouts, die physikalische Beschreibung der Tastatur, etc. In diesem Wiki-Artikel werden nur die {{ic|xkb_symbols}} behandelt. Diese Unterteilung macht es | XKB-Dateien werden in Abschnitte unterteilt. Diese Umfassen die eigentlichen Tastenkonfigurationen ({{ic|xkb_symbols}}), die verschiedenen Varianten des Layouts, die physikalische Beschreibung der Tastatur, etc. In diesem Wiki-Artikel werden nur die {{ic|xkb_symbols}} behandelt. Diese Unterteilung macht es möglich, verschiedene einzelne Konfigurationen in anderen Layouts einzubinden. | ||
Das Einbinden erfolgt dabei immer im gleichen Muster: {{ic|layoutname(layoutvariante)}}. Der Layoutname entspricht dem Dateinamen, die Variante wird bei der Definition eines {{ic|xkb_symbols}}-Abschnitts angegeben. | Das Einbinden erfolgt dabei immer im gleichen Muster: {{ic|layoutname(layoutvariante)}}. Der Layoutname entspricht dem Dateinamen, die Variante wird bei der Definition eines {{ic|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 {{ic|mein-layout(abschnittsname)}} im „Header“, um sie automatisch zu laden | Auch selbstreferentielle Einbindungen sind möglich. Das Beispiel hier im Wiki unterteilt die einzelnen Definitionen in eigene Abschnitte, und referenziert diese mittels {{ic|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 {{ic|hidden}} definieren: | Will man nicht, dass ein Abschnitt in anderen Layouts eingebunden werden kann, so muss man ihn mit dem Keyword {{ic|hidden}} definieren: | ||
hidden xkb_symbols "versteckt" { | hidden xkb_symbols "versteckt" { | ||
Zeile 34: | Zeile 35: | ||
}; | }; | ||
Hierdurch kann der Abschnitt nur innerhalb der aktuellen | Hierdurch kann der Abschnitt nur innerhalb der aktuellen Definitionsdatei benutzt werden. | ||
Weitere Abschnittsoptionen sind unter anderem {{ic|partial}}, um einen Abschnitt zu definieren der nicht den kompletten Tastaturbereich abdeckt, {{ic|keypad_keys}} für einen Abschnitt, der nur die Tasten des Nummernfeldes behandelt, oder {{ic|modifier_keys}} um einen Abschnitt zu definieren, in dem ''Modifier Keys'', wie {{taste|Shift}}, {{taste|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. | Weitere Abschnittsoptionen sind unter anderem {{ic|partial}}, um einen Abschnitt zu definieren der nicht den kompletten Tastaturbereich abdeckt, {{ic|keypad_keys}} für einen Abschnitt, der nur die Tasten des Nummernfeldes behandelt, oder {{ic|modifier_keys}} um einen Abschnitt zu definieren, in dem ''Modifier Keys'', wie {{taste|Shift}}, {{taste|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. | ||
Zeile 46: | Zeile 47: | ||
=== Informationen anzeigen === | === Informationen anzeigen === | ||
[[Datei:Xkbcli interactive-wayland example.png|thumb|250px|xkbcli mit geöffnetem interaktiven Fenster ( | [[Datei:Xkbcli interactive-wayland example.png|thumb|250px|''xkbcli'' mit geöffnetem interaktiven Fenster (weiße Fläche) 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 {{ic|xkbcli}} installiert, das es ermöglicht, allerlei Informationen bezüglich der aktuellen Konfiguration auszulesen. | Mit ''libxkbcommon'' wird unter anderem auch das Tool {{ic|xkbcli}} installiert, das es ermöglicht, allerlei Informationen bezüglich der aktuellen Konfiguration auszulesen. | ||
Mittels {{ic|xkbcli interactive-wayland}} (bzw. {{ic|... | Mittels {{ic|xkbcli interactive-wayland}} (bzw. {{ic|...x11}} oder {{ic|...evdev}}) kann man ein kleines Fenster öffnen, über das man ähnlich wie mit {{paket|xorg-xev|xev}} oder {{paket|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 {{ic|information [ wert ]}} an. Für die Anzeige im Wiki wurden die Informationen untereinander geschrieben, beim Ausführen sind diese alle in einer Zeile. | ||
seat0: | seat0: | ||
Zeile 60: | Zeile 61: | ||
leds [ Num Lock ] | leds [ Num Lock ] | ||
Hier wurde einzig und alleine die Taste {{taste|1}} gedrückt. Es werden der für die Definition des Layouts benötige Keycode, der Keysym, dessen Unicode-Repräsentation, sowie die | Hier wurde einzig und alleine die Taste {{taste|1}} gedrückt. Es werden der für die Definition des Layouts benötige Keycode, der Keysym, dessen Unicode-Repräsentation, sowie die gesendeten ''Modifier Keys'' angezeigt. Der Level ist in dieser Ausgabe nullbasierend (Level 1 = 0, Level 2 = 1, …) | ||
Beim Drücken von {{taste|Shift}} + {{taste|1}} wird neben dem Drücken von Shift auch die nun veränderte Ausgabe gezeigt. | |||
seat0: keycode [ AE01 ] keysyms [ exclam ] unicode [ ! ] | seat0: keycode [ AE01 ] keysyms [ exclam ] unicode [ ! ] | ||
Zeile 76: | Zeile 79: | ||
}} | }} | ||
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. | Dies gibt die Informationen zu Keycode und -name, sowie das Layout aus, zeigt den Keysym, auf welchem Level (hier einsbasierend: Wert = Level) das gewünschte Zeichen liegt, und mit welchen ''Modifier Keys'' man dies erreichen kann. | ||
{{hc|1=xkbcli how-to-type ẞ|2= | {{hc|1=xkbcli how-to-type ẞ|2= | ||
Zeile 85: | Zeile 88: | ||
}} | }} | ||
Hier wird das große Eszett (ẞ) abgefragt. Gemäß Beispielkonfiguration nach diesem Wikiartikel ist dieses über zwei Kombinationen erreichbar: {{taste|Shift}} + {{taste| | Hier wird das große Eszett (ẞ) abgefragt. Gemäß Beispielkonfiguration nach diesem Wikiartikel ist dieses über zwei Kombinationen erreichbar: {{taste|Shift}} + {{taste|RALT}} + {{taste|S}}, sowie {{taste|CapsLock}} + {{taste|RALT}} + {{taste|S}}. | ||
Andersherum funktioniert die Abfrage auch. So kann man zum Beispiel nach dem {{ic|Ä}} (in der Terminologie „Adiaeresis“, siehe Weblinks) fragen. | Andersherum funktioniert die Abfrage auch. So kann man zum Beispiel nach dem {{ic|Ä}} (in der Terminologie „Adiaeresis“, siehe Weblinks) fragen. | ||
Zeile 96: | Zeile 99: | ||
}} | }} | ||
Auch hier werden wieder der | Auch hier werden wieder der Keysym, sowie die konfigurierten Tasten ausgegeben. | ||
Das aktuelle Layout kann man sich mittels des Parameters {{ic|dump-keymap-wayland}} (bzw. {{ic|...x11}} oder {{ic|...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. {{ic|AC02}} ist, kann man dies mittels folgender Abfrage leicht nachsehen. | |||
{{hc|1=xkbcli dump-keymap-wayland <nowiki>|</nowiki> grep 'key <AC02>'|2= | |||
key <AC02> { [ s, S, ssharp, U1E9E ] }; | |||
}} | |||
Dies zeigt basierend auf der Konfiguration an, dass {{ic|AC02}} aller Wahrscheinlichkeit nach {{taste|S}} ist. Es werden folgende Symbole genutzt: | |||
* Level 1: {{taste|S}} = {{ic|s}} | |||
* Level 2: {{taste|Shift}} + {{taste|S}} = {{ic|S}} | |||
* Level 3: {{taste|RALT}} + {{taste|S}} = {{ic|ß}} | |||
* Level 4: {{taste|Shift}} + {{taste|RALT}} + {{taste|S}} = {{ic|ẞ}} | |||
Basierend auf der Konfiguration nach diesem Wikiartikel sind die zu drückenden Tasten für die jeweiligen Level immer identisch. | |||
== Eigenes Layout == | == Eigenes Layout == | ||
{{hinweis|Es ist zu beachten, dass XKB bei Fehlkonfiguration sowohl den X-Server als auch jegliche Wayland- | {{hinweis|Es ist zu beachten, dass XKB bei Fehlkonfiguration sowohl den X-Server als auch jegliche Wayland-Compositoren 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 {{ic|/usr/share/X11/xkb/symbols/mein-layout}} oder userbezogen unter {{ic|~/.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. | Will man ein eigenes Layout anlegen, so kann man dies entweder systemweit unter {{ic|/usr/share/X11/xkb/symbols/mein-layout}} oder userbezogen unter {{ic|~/.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]] | 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]] 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“ === | === Konfigurations-„Header“ === | ||
Zeile 118: | Zeile 136: | ||
}} | }} | ||
Dieser Abschnitt wird mittels {{ic|default}} als | Dieser Abschnitt wird mittels {{ic|default}} als Standardvariante definiert. Sofern man beim Anwenden des Layouts keine Variante angibt. Da der Abschnitt ist technisch ''nur eine Variante'' ist, kann optional auch {{ic|mein-layout(basic)}} benutzt werden. Es wird in deisem Abschnitt folgendes konfiguriert: | ||
* {{ic|1=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. | * {{ic|1=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, in diesem Wikiartikel aber nicht behandelt werden. | ||
* {{ic| include "us"}} = Dies lädt das US-Tastaturlayout für die im Beispiel verwendete Tastatur, damit das eigene Layout vollständig ist, ohne | * {{ic| 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. | ||
* {{ic|include "level3(ralt_switch)"}} Hiermit wird die Variante {{ic|ralt_switch}} aus dem Layout {{ic|level3}} geladen. Dies ermöglicht es | * {{ic|include "level3(ralt_switch)"}} Hiermit wird die Variante {{ic|ralt_switch}} aus dem Layout {{ic|level3}} geladen. Dies ermöglicht es mittels {{taste|RALT}}, den ''Modifier Key'' {{ic|ISO_Level3_Shift}} zu schalten. | ||
* Mittels weiterer {{ic|include}}-Abschnitte können beliebig viele andere Layouts und Layout-Varianten eingebunden werden. | * Mittels weiterer {{ic|include}}-Abschnitte können beliebig viele andere Layouts und Layout-Varianten eingebunden werden. | ||
Die Abschnitte {{ic| | Die Abschnitte {{ic|umlaute}}, {{ic|pfeile}}, und {{ic|better-capslock}} werden im weiteren Verlauf dieses Artikels definiert. Sie werden in beliebiger Reihenfolge unterhalb des „Headers“ platziert und zeigen Beispielhaft einige Möglichkeiten der Definition auf. | ||
=== Umlaute === | === Umlaute (normale Definition) === | ||
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. | 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 | partial alphanumeric_keys | ||
xkb_symbols " | xkb_symbols "umlaute" { | ||
key <AC01> {[ a , A , adiaeresis , Adiaeresis ]}; | key <AC01> {[ a , A , adiaeresis , Adiaeresis ]}; | ||
key <AD09> {[ o , O , odiaeresis , Odiaeresis ]}; | key <AD09> {[ o , O , odiaeresis , Odiaeresis ]}; | ||
Zeile 138: | Zeile 156: | ||
}; | }; | ||
... | Das große Eszett (ẞ) ist kein Umlaut, passt aber dennoch gut in diese Gruppe. Es muss mittels seines Unicode-Codepoints referenziert werden („U+1E9E: 'LATIN CAPITAL LETTER SHARP S'“), da es keinem Keysym gibt. Alle anderen Definitionen nutzen den jeweiligen Keysym. Die direkte Angabe des jeweiligen Zeichens wird nicht unterstützt. | ||
=== Pfeile (Ziffernblock-Besonderheiten) === | |||
Wenn man über die Tasten auf dem Ziffernblock Unicode-Pfeile „malen“ möchte, kann man folgende Konfiguration benutzen. | |||
partial keypad_keys | |||
xkb_symbols "arrows" { | |||
// ⇙ ⇓ ⇘ ↙ ↓ ↘ | |||
// Level 1 2 3 4 | |||
// ------------------------------------------------ | |||
key <KP0> {[ KP_Insert , KP_0 , U21C5 , U21C4 ]}; | |||
key <KP1> {[ KP_End , KP_1 , U21D9 , U2199 ]}; | |||
key <KP2> {[ KP_Down , KP_2 , U21D3 , U2193 ]}; | |||
key <KP3> {[ KP_Next , KP_3 , U21D8 , U2198 ]}; | |||
key <KP4> {[ KP_Left , KP_4 , U21D0 , U2190 ]}; | |||
key <KP5> {[ KP_Begin , KP_5 , U21BA , U21BB ]}; | |||
key <KP6> {[ KP_Right , KP_6 , U21D2 , U2192 ]}; | |||
key <KP7> {[ KP_Home , KP_7 , U21D6 , U2196 ]}; | |||
key <KP8> {[ KP_Up , KP_8 , U21D1 , U2191 ]}; | |||
key <KP9> {[ KP_Prior , KP_9 , U21D7 , U2197 ]}; | |||
}; | |||
=== „Better CapsLock“ === | Dies verhält sich etwas unintutiv, da [[Numlock]] ''Mod2'' schaltet. Daher sind auch die „Basisfunktionen“ an erster Stelle in der Definition, und dann erst die Numlock-Zahlen. Ohne Numlock wird bei {{taste|0}} in den Einfügemodus gewechselt. Wenn Numlock an ist, wird {{ic|0}} gesendet. Wenn man nun zusätzlich noch {{taste|RALT}} drückt, werden einfache Pfeile gesendet, mittels {{taste|RALT}} + {{taste|Shift}} doppelte. | ||
Numlock Numlock+AltGr Numlock+AltGr+Shift | |||
----------------------------------------------- | |||
7 8 9 ↖ ↑ ↗ ⇖ ⇑ ⇗ | |||
4 5 6 ← ↻ → ⇐ ↺ ⇒ | |||
1 2 3 ↙ ↓ ↘ ⇙ ⇓ ⇘ | |||
0 ⇄ ⇅ | |||
Bei '''deaktiviertem''' Numlock ändert sich die Belegung, da man nun wieder auf dem ersten Level ist. | |||
* {{taste|Shift}} + {{taste|1}}/{{taste|2}}/{{taste|3}}/… wird zu 123, da mit {{taste|Shift}} in den zweiten Level gewechselt wird. | |||
* {{taste|RALT}} + {{taste|1}}/{{taste|2}}/{{taste|3}}/… wird zu ⇙⇓⇘, da mit {{taste|RALT}} in den dritten Level gewechselt wird. | |||
* {{taste|RALT}} + {{taste|Shift}} + {{taste|1}}/{{taste|2}}/{{taste|3}}/… wird zu ↙↓↘, da mit {{taste|RALT}} + {{taste|Shift}} in den vierten Level gewechselt wird. | |||
Bei '''aktiviertem''' Numlock ist man in Level 2, es wird beim Drücken der Nummernblocktasten also immer automatisch ''Mod2'' mitgeschaltet. | |||
* Mod2 + {{taste|RALT}} + {{taste|1}}/{{taste|2}}/{{taste|3}}/… wird zu ↙↓↘, da man mit Mod2+ISO_Level3_Shift in den vierten Level wechselt | |||
* Mod2 + {{taste|RALT}} + {{taste|Shift}} + {{taste|1}}/{{taste|2}}/{{taste|3}}/… wird zu ⇙⇓⇘, da man mit Mod2+Shift+ISO_Level3_Shift in den dritten Level wechselt | |||
Da in den meisten Konfigurationen Numlock, wenn verfügbar, standardmäßig an ist und die normalen Pfeile (↙↓↘) in dieser Konfiguration „zuerst kommen“ sollen, liegen sie auf dem bei aktiviertem Numlock mittels {{taste|RALT}} erreichbaren vierten Level. | |||
=== „Better CapsLock“ (Aktionen ausführen) === | |||
Die Taste {{taste|Capslock}}, die es auf den meisten Tastaturen über der linken {{taste|Shift}}-Taste gibt, wird in vielen Fällen nicht, oder nur sehr sporadisch benutzt, dennoch passiert es vielen manchmal, dass sie beim drücken der linken {{taste|Shift}}-Taste versehentlich auf {{taste|Capslock}} kommen, und dies damit ungewollt aktivieren. | |||
hidden partial modifier_keys | |||
xkb_symbols "better-capslock" { | |||
key <CAPS> { actions[Group1] = [ SetMods(modifiers=Shift), LockMods(modifiers=Lock) ] }; | |||
}; | |||
Diese Konfiguration sorgt dafür, dass in der ersten Gruppe (siehe oben) beim Drücken von {{taste|Capslock}} dieses nicht aktiviert wird, sondern stattdessen ein {{ic|Shift}} gesendet wird. Dies wird in der Konfiguration durch das Senden einer Aktion im ersten Layer bewerkstelligt. Da die Konfiguration deutlich in die Funktionalität der ''Modifier Keys'' eingreift, wird sie als {{ic|hidden}} definiert, um nicht versehentlich in andere Layouts hinein geladen zu werden. | |||
Um Capslock dennoch bei Bedarf aktivieren zu können, wird im zweiten Layer (wie bei „normalen Tasten“ mittels {{taste|Shift}} zu erreichen) ebenfalls eine Aktion durchgeführt: hier wird Capslock dann umgeschaltet. | |||
# {{taste|Capslock}} funktioniert wie {{taste|Shift}} | |||
# {{taste|Shift}} + {{taste|CapsLock}} aktiviert {{ic|Caps_Lock}} … | |||
# … dieses ist nun „''WIE MAN ES KENNT''“ aktiviert, und … | |||
# {{taste|Shift}} + {{taste|CapsLock}} deaktiviert {{ic|Caps_Lock}} wieder | |||
# {{taste|Capslock}} funktioniert nun wieder wie {{taste|Shift}} | |||
Damit kann man die Capslock-Funktion nicht mehr versehentlich einschalten, kann es aber dennoch aktivieren, wenn man es benötigt. Die Funktionalität, bei aktiviertem {{ic|Caps_Lock}} durch das Drücken von {{taste|Capslock}} wieder auf den ersten Layer zu wechseln, bleibt ebenfalls bestehen. | |||
== Ein Layout verwenden == | == Ein Layout verwenden == | ||
Je nachdem, welches System man verwendet, wird das Layout unterschiedlich gesetzt. | |||
=== Wayland === | === Wayland === | ||
Wayland- | Wayland-Compositoren setzen das zu verwendende Keyboardlayout standardmäßig mittels XKB. Wie genau dies geschieht, ist abhängig vom verwendeten Compositor. | ||
[[labwc]] zum Beispiel benutzt die [[Umgebungsvariablen|Umgebungsvariable]] {{ic|XKB_DEFAULT_LAYOUT}}. | [[labwc]] zum Beispiel benutzt die [[Umgebungsvariablen|Umgebungsvariable]] {{ic|XKB_DEFAULT_LAYOUT}}. | ||
Zeile 157: | Zeile 235: | ||
Dies setzt {{ic|mein-layout}} mit allen weiteren Standardoptionen. Siehe [[Labwc#Tastaturlayout_setzen|Abschnitt zum Setzen des Tastaturlayouts]] im labwc-Wikiartikel. | Dies setzt {{ic|mein-layout}} mit allen weiteren Standardoptionen. Siehe [[Labwc#Tastaturlayout_setzen|Abschnitt zum Setzen des Tastaturlayouts]] im labwc-Wikiartikel. | ||
Der | Der Compositor {{paket|hyprland|Hyprland}} verwendet einen Abschnitt in der Konfiguration. | ||
{{hc|1=~/.config/hypr/hyprland.conf|2= | {{hc|1=~/.config/hypr/hyprland.conf|2= | ||
Zeile 168: | Zeile 246: | ||
Auch Hyprland erlaubt eine weitere Spezifizierung der Optionen und Verianten. | Auch Hyprland erlaubt eine weitere Spezifizierung der Optionen und Verianten. | ||
Es sei nochmals generell auf die Dokumentation des verwendeten | Es sei nochmals generell auf die Dokumentation des verwendeten Compositors verwiesen. | ||
=== X === | === X === | ||
Sofern man noch [[X]] benutzt, kann man | Sofern man noch [[X]] benutzt, wird XKB für das globale Einstellen benutzt, für die userbezogene Konfiguration kann man ein entsprechendes Tool verwenden. | ||
==== Systemweit ==== | ==== Systemweit ==== | ||
Man kann sich hier an [[Arch Linux auf Deutsch stellen#X.org|den | Man kann sich hier an [[Arch Linux auf Deutsch stellen#X.org|den Abschnitt zu X.org]] im Wiki-Artikel zur Einstellung von Arch auf Deutsch orientieren. In {{ic|Option "XkbLayout" "de"}} gibt man dann statt {{ic|de}} den Namen des erstellten Layouts an, im Beispiel also {{ic|Option "XkbLayout" "mein-layout"}}. Wenn man das Layout systemweit einstellt, sollte man es in {{ic|/usr/share/X11/xkb/}} ablegen, damit alle Useraccounts darauf zugreifen können. | ||
==== Userbezogen ==== | ==== Userbezogen ==== | ||
Zeile 184: | Zeile 262: | ||
== Siehe auch == | == Siehe auch == | ||
* [[Xmodmap]] | * [[Xmodmap]] der veraltete, X-spezifische Weg | ||
== Weblinks == | == Weblinks == | ||
Zeile 190: | Zeile 268: | ||
* [https://wayland-book.com/seat/xkb.html Das ''Wayland Book'' über XKB] {{sprache|en}} | * [https://wayland-book.com/seat/xkb.html Das ''Wayland Book'' über XKB] {{sprache|en}} | ||
* [https://www.charvolant.org/doug/xkb/html/xkb.html Website ''An Unreliable Guide to XKB Configuration''] {{sprache|en}} | * [https://www.charvolant.org/doug/xkb/html/xkb.html Website ''An Unreliable Guide to XKB Configuration''] {{sprache|en}} | ||
* [https://www.x.org/releases/current/doc/kbproto/xkbproto.pdf XKB-Protokollspezifikation] {{sprache|en}} – Im „Appendix A. Default Symbol Transformations“ werden unterstützte „Umschreibungen“ für Sonderzeichen aufgelistet. | |||
[[Kategorie:Konfiguration]] | [[Kategorie:Konfiguration]] | ||
[[Kategorie:Wayland]] | [[Kategorie:Wayland]] | ||
[[Kategorie:X11]] | [[Kategorie:X11]] | ||
[[en:X keyboard extension]] |
Aktuelle Version vom 14. März 2025, 15:58 Uhr
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 Tastenkonfiguration sehr viele und umfangreiche Anpassungen des Layouts, ist dadurch aber auch komplexer.
Installation
XKB wird über das Paket libxkbcommon bereitgestellt, es muss allerdings im Normalfall nicht installiert werden, da die gängigen Compositoren und 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 im Normalfall nichts X-spezifisches machen, können diese teilweise auch innerhalb von Wayland-Compositoren benutzt werden. libxkbcommon bringt zudem xkbcli
mit, um sich verschiedene XKB-Konfigurationen ausgeben zu lassen.
Überblick
Hinweis: Der Wiki-Artikel benutzt RALT, um die rechte Alt-Taste zu referenzieren. Auf einer deutschen Tastatur ist dies im Regelfall die AltGr. RALT
ist in der Nomenklatur von XKB die tastenbeschriftungsunabhängige Bezeichnung dieser Taste.
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.
$XDG_CONFIG_HOME/xkb/
oder$HOME/.config/xkb/
, wenn die UmgebungsvariableXDG_CONFIG_HOME
nicht gesetzt wurde- Aus historischen Gründen noch
$HOME/.xkb/
, sollte aber nicht mehr genutzt werden $XKB_CONFIG_EXTRA_PATH
oder wenn nicht gesetzt/etc/xkb/
.$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 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 in anderen Layouts eingebunden werden kann, so muss man ihn mit dem Keyword hidden
definieren:
hidden xkb_symbols "versteckt" { ... };
Hierdurch kann der Abschnitt nur innerhalb der aktuellen Definitionsdatei benutzt 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

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 gesendeten Modifier Keys angezeigt. Der Level ist in dieser Ausgabe nullbasierend (Level 1 = 0, Level 2 = 1, …)
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 (hier einsbasierend: Wert = 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 + RALT + S, sowie ⇪ Capslock + RALT + S.
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 Keysym, 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: RALT + S =
ß
- Level 4: ⇧ Shift + RALT + S =
ẞ
Basierend auf der Konfiguration nach diesem Wikiartikel sind die zu drückenden Tasten für die jeweiligen Level immer identisch.
Eigenes Layout
Hinweis: Es ist zu beachten, dass XKB bei Fehlkonfiguration sowohl den X-Server als auch jegliche Wayland-Compositoren 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 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 Standardvariante definiert. Sofern man beim Anwenden des Layouts keine Variante angibt. Da der Abschnitt ist technisch nur eine Variante ist, kann optional auch mein-layout(basic)
benutzt werden. Es wird in deisem Abschnitt 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, in diesem Wikiartikel aber nicht behandelt werden.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 Varianteralt_switch
aus dem Layoutlevel3
geladen. Dies ermöglicht es mittels RALT, den Modifier KeyISO_Level3_Shift
zu schalten.- Mittels weiterer
include
-Abschnitte können beliebig viele andere Layouts und Layout-Varianten eingebunden werden.
Die Abschnitte umlaute
, pfeile
, und better-capslock
werden im weiteren Verlauf dieses Artikels definiert. Sie werden in beliebiger Reihenfolge unterhalb des „Headers“ platziert und zeigen Beispielhaft einige Möglichkeiten der Definition auf.
Umlaute (normale Definition)
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 "umlaute" { key <AC01> {[ a , A , adiaeresis , Adiaeresis ]}; key <AD09> {[ o , O , odiaeresis , Odiaeresis ]}; key <AD07> {[ u , U , udiaeresis , Udiaeresis ]}; key <AC02> {[ s , S , ssharp , U1E9E ]}; };
Das große Eszett (ẞ) ist kein Umlaut, passt aber dennoch gut in diese Gruppe. Es muss mittels seines Unicode-Codepoints referenziert werden („U+1E9E: 'LATIN CAPITAL LETTER SHARP S'“), da es keinem Keysym gibt. Alle anderen Definitionen nutzen den jeweiligen Keysym. Die direkte Angabe des jeweiligen Zeichens wird nicht unterstützt.
Pfeile (Ziffernblock-Besonderheiten)
Wenn man über die Tasten auf dem Ziffernblock Unicode-Pfeile „malen“ möchte, kann man folgende Konfiguration benutzen.
partial keypad_keys xkb_symbols "arrows" { // ⇙ ⇓ ⇘ ↙ ↓ ↘ // Level 1 2 3 4 // ------------------------------------------------ key <KP0> {[ KP_Insert , KP_0 , U21C5 , U21C4 ]}; key <KP1> {[ KP_End , KP_1 , U21D9 , U2199 ]}; key <KP2> {[ KP_Down , KP_2 , U21D3 , U2193 ]}; key <KP3> {[ KP_Next , KP_3 , U21D8 , U2198 ]}; key <KP4> {[ KP_Left , KP_4 , U21D0 , U2190 ]}; key <KP5> {[ KP_Begin , KP_5 , U21BA , U21BB ]}; key <KP6> {[ KP_Right , KP_6 , U21D2 , U2192 ]}; key <KP7> {[ KP_Home , KP_7 , U21D6 , U2196 ]}; key <KP8> {[ KP_Up , KP_8 , U21D1 , U2191 ]}; key <KP9> {[ KP_Prior , KP_9 , U21D7 , U2197 ]}; };
Dies verhält sich etwas unintutiv, da Numlock Mod2 schaltet. Daher sind auch die „Basisfunktionen“ an erster Stelle in der Definition, und dann erst die Numlock-Zahlen. Ohne Numlock wird bei 0 in den Einfügemodus gewechselt. Wenn Numlock an ist, wird 0
gesendet. Wenn man nun zusätzlich noch RALT drückt, werden einfache Pfeile gesendet, mittels RALT + ⇧ Shift doppelte.
Numlock Numlock+AltGr Numlock+AltGr+Shift ----------------------------------------------- 7 8 9 ↖ ↑ ↗ ⇖ ⇑ ⇗ 4 5 6 ← ↻ → ⇐ ↺ ⇒ 1 2 3 ↙ ↓ ↘ ⇙ ⇓ ⇘ 0 ⇄ ⇅
Bei deaktiviertem Numlock ändert sich die Belegung, da man nun wieder auf dem ersten Level ist.
- ⇧ Shift + 1/2/3/… wird zu 123, da mit ⇧ Shift in den zweiten Level gewechselt wird.
- RALT + 1/2/3/… wird zu ⇙⇓⇘, da mit RALT in den dritten Level gewechselt wird.
- RALT + ⇧ Shift + 1/2/3/… wird zu ↙↓↘, da mit RALT + ⇧ Shift in den vierten Level gewechselt wird.
Bei aktiviertem Numlock ist man in Level 2, es wird beim Drücken der Nummernblocktasten also immer automatisch Mod2 mitgeschaltet.
- Mod2 + RALT + 1/2/3/… wird zu ↙↓↘, da man mit Mod2+ISO_Level3_Shift in den vierten Level wechselt
- Mod2 + RALT + ⇧ Shift + 1/2/3/… wird zu ⇙⇓⇘, da man mit Mod2+Shift+ISO_Level3_Shift in den dritten Level wechselt
Da in den meisten Konfigurationen Numlock, wenn verfügbar, standardmäßig an ist und die normalen Pfeile (↙↓↘) in dieser Konfiguration „zuerst kommen“ sollen, liegen sie auf dem bei aktiviertem Numlock mittels RALT erreichbaren vierten Level.
„Better CapsLock“ (Aktionen ausführen)
Die Taste ⇪ Capslock, die es auf den meisten Tastaturen über der linken ⇧ Shift-Taste gibt, wird in vielen Fällen nicht, oder nur sehr sporadisch benutzt, dennoch passiert es vielen manchmal, dass sie beim drücken der linken ⇧ Shift-Taste versehentlich auf ⇪ Capslock kommen, und dies damit ungewollt aktivieren.
hidden partial modifier_keys xkb_symbols "better-capslock" { key <CAPS> { actions[Group1] = [ SetMods(modifiers=Shift), LockMods(modifiers=Lock) ] }; };
Diese Konfiguration sorgt dafür, dass in der ersten Gruppe (siehe oben) beim Drücken von ⇪ Capslock dieses nicht aktiviert wird, sondern stattdessen ein Shift
gesendet wird. Dies wird in der Konfiguration durch das Senden einer Aktion im ersten Layer bewerkstelligt. Da die Konfiguration deutlich in die Funktionalität der Modifier Keys eingreift, wird sie als hidden
definiert, um nicht versehentlich in andere Layouts hinein geladen zu werden.
Um Capslock dennoch bei Bedarf aktivieren zu können, wird im zweiten Layer (wie bei „normalen Tasten“ mittels ⇧ Shift zu erreichen) ebenfalls eine Aktion durchgeführt: hier wird Capslock dann umgeschaltet.
- ⇪ Capslock funktioniert wie ⇧ Shift
- ⇧ Shift + ⇪ Capslock aktiviert
Caps_Lock
… - … dieses ist nun „WIE MAN ES KENNT“ aktiviert, und …
- ⇧ Shift + ⇪ Capslock deaktiviert
Caps_Lock
wieder - ⇪ Capslock funktioniert nun wieder wie ⇧ Shift
Damit kann man die Capslock-Funktion nicht mehr versehentlich einschalten, kann es aber dennoch aktivieren, wenn man es benötigt. Die Funktionalität, bei aktiviertem Caps_Lock
durch das Drücken von ⇪ Capslock wieder auf den ersten Layer zu wechseln, bleibt ebenfalls bestehen.
Ein Layout verwenden
Je nachdem, welches System man verwendet, wird das Layout unterschiedlich gesetzt.
Wayland
Wayland-Compositoren setzen das zu verwendende Keyboardlayout standardmäßig mittels XKB. Wie genau dies geschieht, ist abhängig vom verwendeten Compositor.
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 Compositor 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 Compositors verwiesen.
X
Sofern man noch X benutzt, wird XKB für das globale Einstellen benutzt, für die userbezogene Konfiguration kann man ein entsprechendes Tool verwenden.
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 der veraltete, X-spezifische Weg
Weblinks
- Wiki der X.org-Foundation zu XKB
- Das Wayland Book über XKB
- Website An Unreliable Guide to XKB Configuration
- XKB-Protokollspezifikation
– Im „Appendix A. Default Symbol Transformations“ werden unterstützte „Umschreibungen“ für Sonderzeichen aufgelistet.