keyfix custom keymaps unter linux X11 und DRM Konsole

reinhard@finalmedia.de Tue Jul 21 12:50:01 PM CEST 2026 ac07f2d74547

Um die Frage für einen Freund zu beantworten: "Meine Tastatur ist kaputt und ich kann in einer XSession die Taste für die Zeichen < und > und | nicht mehr drücken. Das ist aber ja für Linux Nutzer eine wichtige Taste. Ich brauche daher erst einmal rasche Hilfe, bis mein Keyboard repariert ist. Ich habe auch keine Zehnertastatur, um den UTF8 Code einzugeben."

Quickfix

Öffne ein terminal, dann als root:
wget -q https://finalmedia.de/code/kb/ac07f2d74547/xkeyfix
sh xkeyfix

Deinen XServer danach neustarten

Die Tastenkombination "AltGr + 1" führt nun zu dem Zeichen < und "AltGr + 2" führt zu dem Zeichen >. Die Tastenkombination "AltGr + 3" führt zum begehrten | Zeichen.

Step by Step

Du willst wissen, was das tut?

als root ausführen einmalig:

base64 -d << ::ERBSEN:: > /usr/share/X11/xkb/symbols/custom
eGtiX3N5bWJvbHMgImJhc2ljIiB7CiAgICBpbmNsdWRlICJkZShiYXNpYyk
iCiAgICBrZXkgPEFFMDE+IHsgWyAxLCBleGNsYW0sIGxlc3MsIGxlc3MgXS
B9OwogICAga2V5IDxBRTAyPiB7IFsgMiwgcXVvdGVkYmwsIGdyZWF0ZXIsI
GdyZWF0ZXIgXSB9OwogICAga2V5IDxBRTAzPiB7IFsgMywgc2VjdGlvbiwg
YmFyLCBiYXIgXSB9Owp9OwoK
::ERBSEN::

Als normaler systemuser nach dem Start deiner X-Session ausführen:

setxkbmap custom

Wie kann ich es dauerhaft setzen?

Dazu als root, einmal wiederum das hier ausführen:

localectl set-x11-keymap custom

Wie kann ich das Setting prüfen?

localectl status

sollte dir diese Ausgabe bringen:

System Locale: LANG=de_DE.UTF-8
    VC Keymap: (unset)
   X11 Layout: custom

und

cat /usr/share/X11/xkb/symbols/custom

sollte dir diese Ausgabe bringen:

xkb_symbols "basic" {
    include "de(basic)"
    key  { [ 1, exclam, less, less ] };
    key  { [ 2, quotedbl, greater, greater ] };
    key  { [ 3, section, bar, bar ] };
};

Alternativer Tipp

Je nach Terminal kannst du auch strg+shift+u tippen. Es wird dir dann ein kleines u angezeigt und dein System wartet auf die Eingabe einer Unicode Sequenz. Da dann einfach die einfachen ASCII hexcode eingeben, des gewünschten Zeichens.
3c  <  
3e  > 
7c  |

In vielen modernen GUI Applikationen kannst du das unter Linux nutzen.

Das Terminal kitty hat z.B. Support für die Strg+Shift+U Sequenz.

Im Gnometerminal funktioniert es ebenso. Der Hintergrund ist: Die Unicode-Eingabe über Strg+Shift+U ist ein Feature des GTK-Toolkits oder von IBus (Eingabemethode).

Es funktioniert jedoch nicht zwingend in xterm oder in alacritty etc, wenn du nur einen minimaldesktop mit X11 hast.

Und ohne X11?

Auf dem klassischen Linuxterminal mit DRM oder Framebuffer kannst du dir als root einfach so helfen:

Das geht auch ohne Internetzugang und wget,

indem du als root nur den Befehl loadkeys eingibst, dann die Zeilen
altgr keycode 2 = less
altgr keycode 3 = greater
altgr keycode 4 = bar

und dann mit zweimaligem STRG+D abschließt.

Die Sequenz altgr + 1 etc. sind dann aktiv. Wichtig zum Verständnis: Der keycode für die Taste 1 ist 2, der keycode für die Taste 2 ist 3 und der keycode für die Taste 3 ist 4.

Auch hier kannst du dir aber diese hilfsdatei ziehn..

wget -q https://finalmedia.de/code/kb/ac07f2d74547/keyfix
sh keyfix

Das macht letztlich das hier

loadkeys << ::ERBSEN::
altgr keycode 2 = less
altgr keycode 3 = greater
altgr keycode 4 = bar
::ERBSEN::

Third Party Shortcut Variante Mate

Hier noch der Vollständigkeit halber...

/usr/share/X11/xkb/symbols/aaa_missing_key_LENOVO_A485.txt


Laptop:   Lenovo ThinkPad A485
OS:       Debian 13
Desktop:  MATE 1.26.0
Ziel:     Neubelegung fehlende Taste (< > |) ergänzen
Belegung: AltGr+A = <
           AltGr+S = >
           AltGr+D = |

Datei:    /usr/share/X11/xkb/symbols/custom_keys_thinkpad_A485

Vorgehen:
_Erweiterung_ zu genutztem Tastatur–Layout "de(basic)" anlegen, anstatt
orig. Layout "de" (/usr/share/X11/xkb/symbols/de) zu modifizieren.

Erweiterung anlegen
# sudo touch /usr/share/X11/xkb/symbols/custom_keys_thinkpad_A485

mit Inhalt

# cat /usr/share/X11/xkb/symbols/custom_keys_thinkpad_A485
partial alphanumeric_keys
xkb_symbols "a485fix" {

     include "de(basic)"

     // A-Taste
     key  {
         type[Group1] = "FOUR_LEVEL",
         symbols[Group1] = [ a, A, less ]
     };
     // S-Taste
     key  {
         type[Group1] = "FOUR_LEVEL",
         symbols[Group1] = [ s, S, greater ]
     };

     // D-Taste
     key  {
         type[Group1] = "FOUR_LEVEL",
         symbols[Group1] = [ d, D, bar ]
     };
};

Anmerkung: In neueren Varianten von Mate-Desktop besteht die Möglichkeit
das bisher verwendete Tastaturlayout individuell zu erweitern, wie hier
im Beispiel, anstatt wie bisher das verwendete Tastaturlayout "de"
anpassen zu müssen. Das Prinzip besteht darin, im gleichen Pfad
(/usr/share/X11/xkb/symbols/) eine neues layout anzulegen, das nur die
Anpassungen enthält und im Übrigen das bisherige Tastaturlayout "de"
einbindet (include "de(basic)"). Als Umschalttaste fuer die dritte Ebene
ist AltGr im Layout voreingestellt.
Die verwendung der linken Windows–Taste (LWin) ist grundsätzlich auch
möglich, aber sehr viel aufwendiger, weil sie als Spezialtaste im Layout
definiert ist, weshalb dann das gesamte Layout angepasst werden müsste.


Aktivierung manuell
setxkbmap -layout custom_keys_thinkpad_A485 -variant a485fix

oder via Autostart:

# touch ~/.xprofile
# cat ~/.xprofile
setxkbmap -layout custom_keys_thinkpad_A485 -variant a485fix

Rückkehr zum unveränderten Tastaturlayout "de" kann man mait:
# setxkbmap -layout de