Zunächst die gute Nachricht
Die Linux-Systemkonsole verfügt absolut über einen eigenen Satz von Tastaturzuordnungen, die mit den Tools aus kbd
verwaltet werden können Paket, insbesondere dumpkeys
und showkey
für Entdeckung und loadkeys
zum Laden eines benutzerdefinierten Mappings. Die SuperUser-Frage Wie ändert man die Tastaturbelegung der Konsole unter Linux? hat eine Antwort mit guten Informationen zur Verwendung dieser Tools.
Jetzt die schlechte Nachricht
Es stimmt zwar, dass Sie mit diesen Tools die Tasten auf der Linux-Konsole neu zuordnen können, ohne xmodmap
einzubeziehen oder erfordern, dass X läuft, werden sie nur beeinflussen die Tastaturbelegungen auf der virtuellen Textkonsole. Die Änderungen werden absolut keine Auswirkungen auf die grafische Umgebung haben, da das XInput/evdev-System von X direkt von den Eingabegeräten liest und seine eigene Verarbeitung durchführt.
Also, wenn Sie gehofft haben, die Verwendung von xmodmap
zu vermeiden Ich fürchte, das wird nicht funktionieren, indem Sie es einfach auf der Konsole neu zuordnen und es überall anwenden lassen. Tatsächlich müssten Sie beide neu zuordnen die Konsole (mit loadkeys
) und X11 (mit einer Methode wie xmodmap
), um überall dasselbe Tastaturlayout zu verwenden.
Die Lösung für xmodmap
Langsamkeit (und Fehlerhaftigkeit, da die Neuzuordnungen in Desktop-Umgebungen, die Layout-Wechsel verwenden, fehlerbehaftet und nicht dauerhaft sind) wäre, ein völlig neues zu definieren Tastaturlayout basierend auf dem Layout, das Sie zuvor verwendet haben, anstatt Laufzeitänderungen anzuwenden. Beim Start von X würden Sie dieses neue, neu zugeordnete Layout laden, anstatt das, was Sie jetzt verwenden. (Es scheint, dass dies jetzt die einzige ist Möglichkeit, das Tastaturlayout in neueren Ubuntus – und möglicherweise anderen Distributionen – zuverlässig als xmodmap
zu ändern ist nicht mehr sinnvoll.)
Informationen zum Definieren und Verwenden eines benutzerdefinierten xkb
Tastaturlayout, siehe:
- Howto:Custom keyboard layout definitions in the Ubuntu Community Wiki.
- How to modify a keyboard layout in Linux, ein Blogpost von Romano Giannetti.
Beide wurden in diesem Jahr (2014) geschrieben, daher sollten die Informationen aktuell sein. Die Ubuntu-Wiki-Informationen sollten größtenteils auf jede Distribution anwendbar sein, da sie alle den xkb
verwenden System in X.
Es gibt tatsächlich Möglichkeiten, auf einer Ebene neu zuzuordnen, die niedrig genug ist, um auf das gesamte System angewendet zu werden, ob X11 oder nicht, und sie sind wichtiger denn je geworden, jetzt, wo wir sehen, dass Wayland-Compositors auftauchen, die es versäumen, eine Benutzeroberfläche für die Neuzuordnung von libinput bereitzustellen Unterstützung.
Sie müssen grundsätzlich neu konfigurieren, wie die Eingabeschicht des Kernels rohe Scancodes in Schlüsselcodes übersetzt, bevor sie die Konsole oder die evdev-API erreichen, auf der X11 und Wayland sitzen.
Mir sind zwei Möglichkeiten bekannt, dies zu tun:
-
Ändern Sie die Hardwaredatenbank (
hwdb
) Eintrag für Ihre Tastatur. Mit udev können Sie das tun, indem Sie Regeldateien zu/etc/udev/hwdb.d/
hinzufügen und Auslösen eines Datenbankneuaufbaus mitsystemd-hwdb update
, und dann erzwingen, dass es ohne Neustart überudevadm trigger
angewendet wird .Diese ArchiWiki-Seite enthält vollständige Anweisungen und sagt ausdrücklich, dass es sowohl für X11- als auch für Konsoleneingaben funktioniert.
-
Es gibt einen Daemon namens evdevremapkeys, der speziell für die Neuzuordnung von Schlüsselereignissen auf evdev-Geräten geschrieben wurde, um die Neuzuordnungsunterstützung für Monkey-Patches in evdev-Clients neu zuzuordnen, die sie nicht unterstützen, wie Wayland-Kompositoren.
Es verwendet im Grunde den gleichen Ansatz wie Userspace-Treiber wie G15Daemon, die nicht standardmäßige Eingabegeräte kompensieren müssen. (Öffnen Sie das evdev-Gerät, schlucken Sie alle Ereignisse, die es neu zuordnen möchte, damit nichts anderes, das auf dem Gerät zuhört, sie sehen kann, und geben Sie dann die korrigierten Ereignisse über
uinput
aus API zum Erstellen von Eingabegeräten auf Kernel-Ebene aus dem Userspace.)