Ordnen Sie die Schlüssel ohne xmodmap oder X-Tools neu zu

13

Aufgrund eines Kaffeeunfalls funktionierten einige Nummern der Tastatur meines Laptops nicht mehr. Früher habe ich xmodmapzu verwenden F1, F2usw., als Ersatz und rettete die configs ~/.Xmodmap.

Dies verursachte jedoch einige Probleme.

  1. Ich verwende X nicht immer auf diesem Computer und ohne X xmodmapwird X nicht angewendet.

  2. Das Starten von X dauert länger.

  3. Aus irgendeinem Grund verursachte es XFCE-Tastaturkürzel, die nichts mit einer der Tasten zu tun hatten, die über geändert wurden xmodmap, um nicht mehr zu funktionieren (tatsächlich funktionierten alle Tastaturkürzel außer den Fenstermanager-Tastenkombinationen nicht mehr). Nachdem einige Minuten vergangen sind, seit ich X gestartet habe, funktionieren die XFCE-Verknüpfungen wieder normal! Diese Verzögerung ist nicht sehr ärgerlich, aber auch ein Problem.

Ich stelle mir vor, dass es eine Art Mapping gibt, das vom Betriebssystem gelesen wird, bevor X startet. Gibt es keine Möglichkeit, diese Zuordnung zu ändern? Ist es eine Möglichkeit, die Tastaturzuordnung ohne X-Tools zu ändern? Ich benutze Debian Stable.

PS: Offenbar ist die Datei , dass Anrufe xmodmap .Xmodmapauf startxist /etc/xdg/xfce4/xinitrc. Den Inhalt finden Sie hier .

Alex
quelle
7
Haben Sie darüber nachgedacht, die Tastatur zu entfernen und buchstäblich zu waschen? Das Austrocknen dauert einen Tag, ist aber absolut sicher. Außerdem ist das Ersetzen einer Laptoptastatur relativ kostengünstig (~ 25 US-Dollar), verglichen mit der Schwierigkeit, Ihre Finger neu zu trainieren.
JDH
2
Mir ist klar, dass es eine Weile her ist, seit dies gefragt wurde und die Informationen wahrscheinlich nicht mehr benötigt werden, aber nach dem Prinzip "Keine unbeantworteten Fragen" habe ich unten eine Antwort hinzugefügt. Hoffentlich ist es für jemanden von Nutzen, auch wenn es nicht der ursprüngliche Fragesteller ist.
FeRD
Wenn ein Kaffeeunfall dazu führte, dass Ihre Tastenkombination zuweilen nicht mehr reagierte, wie in der Frage von OP, die beispielsweise kurz nach dem Start von X nicht funktioniert, kann es sein, dass die Modifikatortasten aufgrund der Kaffeereste unter den Tasten elektrisch geschlossen sind . Dies lässt den Computer denken, dass Strg + Alt + S gedrückt wird, wenn Sie beispielsweise Strg + S drücken. Führen Sie xevein Terminal aus, drücken Sie jede Taste Ihrer Tastatur und prüfen Sie, ob das KeyUp-Ereignis erkannt wird.
fz_salam

Antworten:

25

Erstens die guten Nachrichten

Die Linux - System - Konsole absolut hat seine eigene Reihe von Tastaturbelegungen, die mit den Werkzeugen aus dem verwaltet werden können kbdPaket, speziell dumpkeysund showkeyfür die Entdeckung und loadkeyszur Last in einer angepassten Mapping. Die SuperUser-Frage Wie ändere ich die Konsolen-Keymap unter Linux? hat eine Antwort mit guten Informationen zur Verwendung dieser Tools.

Nun die schlechten Nachrichten

Mit diesen Tools können Sie zwar die Schlüssel auf der Linux-Konsole neu zuordnen, ohne xmodmapdass X ausgeführt werden muss, aber sie wirken sich nur auf die Keymappings auf der virtuellen Textkonsole aus. Die Änderungen haben in der grafischen Umgebung keinerlei Auswirkungen, da das XInput / evdev-System von X direkt von den Eingabegeräten liest und selbst verarbeitet.

Wenn Sie also gehofft haben, die Verwendung zu vermeiden, xmodmapindem Sie einfach die Konsole neu zuordnen und sie überall anwenden lassen, funktioniert das leider nicht. Tatsächlich müssten Sie sowohl die Konsole (mit loadkeys) als auch X11 (mit einer Methode wie xmodmap) neu zuordnen , um überall dasselbe Tastaturlayout zu verwenden.

Die Lösung für die xmodmapLangsamkeit (und den Fehler, da die Neuzuordnungen in Desktop-Umgebungen, in denen das Layout umgeschaltet wird, fehlerhaft und nicht dauerhaft sind) besteht darin, ein völlig neues Tastaturlayout zu definieren, das auf dem zuvor verwendeten Layout basiert, anstatt Laufzeitänderungen vorzunehmen . Beim Start von X würden Sie dieses neue, neu zugeordnete Layout laden, anstatt das, was Sie gerade verwenden. (Es scheint, dass dies jetzt die einzige Möglichkeit ist, das Tastaturlayout in Ubuntus - und möglicherweise anderen Distributionen - zuverlässig zu ändern, da diese xmodmapnicht mehr nützlich sind.)

Informationen zum Definieren und Verwenden eines benutzerdefinierten xkbTastaturlayouts finden Sie unter:

  1. Howto: Benutzerdefinierte Tastaturlayoutdefinitionen im Ubuntu Community Wiki.
  2. So ändern Sie ein Tastaturlayout unter Linux , ein Blogbeitrag 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 alle das xkbSystem in X verwenden.

FeRD
quelle
Wunderbar! Genau das habe ich gesucht. Wie Sie in den Kommentaren erwähnt haben, ist dies jedoch nicht mehr der Fall, da ich ein neues Notizbuch erhalten habe. Ich kann die Antwort nicht testen, aber da es genau das ist, wonach ich gesucht habe, bin ich mir ziemlich sicher, dass es funktionieren oder zumindest eine Alternative zu xmodmap bieten würde. Vielen Dank!
Alex
5

Es gibt tatsächlich Möglichkeiten, eine Neuzuordnung auf einer Ebene vorzunehmen, die niedrig genug ist, um auf das gesamte System angewendet zu werden, ob X11 oder nicht, und sie sind jetzt wichtiger denn je, da Wayland-Compositors eingesetzt werden, die es versäumen, eine Benutzeroberfläche für die Neuzuordnung von libinput bereitzustellen Unterstützung.

Grundsätzlich müssen Sie neu konfigurieren, wie die Eingabeebene des Kernels rohe Scancodes in Schlüsselcodes übersetzt, bevor sie die Konsole oder die evdev-API erreichen, auf der sich X11 und Wayland befinden.

Mir sind zwei Möglichkeiten bekannt, dies zu tun:

  1. Ändern Sie den hwdbEintrag in der Hardwaredatenbank ( ) für Ihre Tastatur. Mit udev können Sie dies tun, indem Sie Regeldateien hinzufügen /etc/udev/hwdb.d/und eine Datenbankwiederherstellung mit auslösen systemd-hwdb updateund diese dann ohne Neustart über erzwingen udevadm trigger.

    Diese ArchiWiki-Seite enthält vollständige Anweisungen und besagt ausdrücklich, dass sie sowohl für X11- als auch für Konsoleneingaben funktioniert.

  2. Es gibt einen Daemon namens evdevremapkeys, der speziell für die Neuzuordnung von Schlüsselereignissen auf evdev-Geräten zur Unterstützung der Neuzuordnung von Affen-Patches zu evdev-Clients geschrieben wurde, die diese nicht unterstützen, wie Wayland-Compositors.

    Es verwendet grundsätzlich den gleichen Ansatz wie Userspace-Treiber wie G15Daemon, die nicht standardmäßige Eingabegeräte kompensieren müssen. (Öffnen Sie das evdev-Gerät, verschlucken Sie alle Ereignisse, die neu zugeordnet werden sollen, damit nichts anderes auf dem Gerät zuhört, und geben Sie die korrigierten Ereignisse über die uinputAPI aus, um Eingabegeräte auf Kernelebene aus dem Benutzerbereich zu erstellen.)

ssokolow
quelle
1
Es gibt tatsächlich eine ioctl, mit der die Zuordnungen festgelegt werden können, ohne dass ein Dämon oder eine HWDB erforderlich ist, aber aus irgendeinem Grund scheinen dafür keine Standardwerkzeuge verfügbar zu sein (ich musste mein eigenes Werkzeug schreiben, um zu experimentieren).
Dirkt
Das ist ziemlich interessant, danke! Ich denke, der größte Nachteil ist, dass es sowohl für die Konsole als auch für die grafische Oberfläche funktioniert, da die Neuzuordnung auf Hardwareebene erfolgt und vollständig geräteabhängig ist. Es gibt keine generischen Abstraktionen, die Sie nutzen können, da Sie sich zwischen die Hardware und diese Abstraktionen einfügen. Selbst als einfaches Beispiel für die Neuzuordnung derselben zwei Tasten auf einem Paar angeschlossener Tastaturen haben die Tasten für jedes der beiden Geräte völlig unterschiedliche Kennungen!
FeRD
Es sieht so aus, als ob AT-Tastaturgeräte wahrscheinlich ziemlich universell sind, USB-Hardware müsste jedoch gezielt und individuell zugeordnet werden. (Wenn Sie also eine neue Tastatur anhängen, müssen Sie nicht nur weitere udev-Regeln hinzufügen, um Neuzuordnungen auf dieses Gerät anzuwenden, sondern Sie müssen möglicherweise herumwühlen, um /usr/lib/udev/hwdb.d/60-keyboard.hwdbgenau herauszufinden, welche Scancode-IDs Sie verwenden müssen, um die gewünschten Tasten anzugeben für dieses Gerät neu zuzuordnen .
FeRD