Ich habe kürzlich eine Unicomp-Tastatur gekauft, die vertauschte Alt- und Windows-Tasten enthält. Die Tastatur identifiziert sich wie folgt auf lsusb:
Bus 003 Device 002: ID 17f6:0822 Unicomp, Inc
Gibt es eine Möglichkeit, den Kernel (dh nicht xmodmap-basiert) die rechte Alt- und die Windows-Taste vertauschen zu lassen, damit jede Anwendung sie an den vertauschten Stellen sieht, auch wenn sie unformatierte Tastatureingaben erhalten? ? Gibt es eine Möglichkeit, das nur für diese eine Tastatur zu haben?
linux
keyboard-layout
FUZxxl
quelle
quelle
Antworten:
Ja, mit XKB ist das möglich. Im Gegensatz zu xmodmap kann XKB Ihre Schlüssel für einzelne Geräte neu zuordnen.
Hinweis: Stellen Sie sicher, dass Sie xkbcomp & gt; 1.2.0
Listen Sie zuerst Ihre Geräte mit:
xinput list
Sie werden so etwas bekommen:
Identifizieren Sie die Zeichenfolge Ihres Geräts und bearbeiten Sie das folgende Shell-Skript. Ändern Sie dabei die Sed-Linie durch eine, die dem Namen Ihres Geräts entspricht. Ändern Sie dann die Tasten, die Sie neu zuordnen müssen.
Beispiel: Laden
xev
und drücken Sie eine Taste, die Sie neu zuordnen möchten. Angenommen, Sie finden heraus, dass es sich um den Schlüsselcode 84 handelt https://gist.github.com/zoqaeski/3880640 . Der Schlüsselname ist<KP5>
. Suchen Sie dann den Schlüssel, durch den er ersetzt werden soll (im selben Link, weiter unten ) und kopieren Sie, was in den Klammern steht. Wiederholen Sie den Vorgang für alle gewünschten Schlüssel.Dann geben Sie es als Quelle ein (Sie können es zu Ihrer .xinitrc-Datei hinzufügen). Alles erledigt! Das Drücken der Tasten sollte nun die gewünschte Ausgabe nur für das von Ihnen angegebene Gerät erzeugen.
Bearbeiten : Vor kurzem habe ich festgestellt, dass die neue Konfiguration aus irgendeinem Grund nicht sofort angewendet wird. Sie müssen zuerst eine Taste auf Ihrem drücken andere Tastatur, und testen Sie dann die konfigurierten Tasten auf Ihrer geänderten Tastatur. Ich weiß nicht, warum das passiert, vielleicht eine Art Cache.
quelle
sed -n 's/.*G19 Gaming Keyboard.*id=\([0-9]*\).*keyboard.*/\1/p'
c) Ja, Sie sollten es auf jeden Fall testen, bevor Sie es ersetzen$remote_id
mit der ID-Nummer. Beachten Sie, dass es zwei Verweise auf gibt$remote_id
dort hast du beide geändert?$remote_id
Stellen Sie sicher, dass Sie die Zeile auskommentieren[ "$remote_id" ] || exit
Wenn Sie es nicht bereits anders gemacht haben, wird es nur aussteigen.$9
wird nicht funktionieren, meintest du9
?Für alle anderen, die von Google hierher kommen und eine Antwort wünschen, die mehr mit dem übereinstimmt, was der Fragesteller ursprünglich erhofft hatte, sind mir zwei Möglichkeiten bekannt, Ereignisse auf der Website neu abzubilden
evdev
Ebene, so dass die Änderung für alle Anwendungen gilt:udev bietet eine API zum Ändern der Hardware-Datenbankeinträge, die die Zuordnungen zwischen Scancodes und Keycodes steuern. Diese ArchiWiki-Seite In dieser Anleitung wird ausdrücklich darauf hingewiesen, dass sie sowohl für X11- als auch für Konsoleneingaben funktioniert.
Das Wesentliche ist, dass Sie einen benutzerdefinierten Eintrag in erstellen
/etc/udev/hwdb.d/
Das Programm besteht aus einem Geräteübereinstimmungsmuster und einigen Scancode-to-Keycode-Remapping-Definitionen und wird dann ausgeführtsystemd-hwdb update
die Datenbank neu zu erstellen undudevadm trigger
Wenden Sie es ohne Neustart an.Da Wayland das Tastatur-Subsystem von X11 nicht verwendet und wichtige Wayland-Compositors wie GNOME Shell und Weston keine Benutzeroberflächen implementieren, um die relevanten Aspekte von libinput zu konfigurieren, hat jemand einen Daemon namens geschrieben evdevremapkeys Hierdurch wird das Problem ähnlich wie beim G15Daemon-Userspace-Treiber für Logitech G15-Gaming-Tastaturen behoben.
(Es verschluckt Ereignisse, die es neu zuordnen möchte, damit keine anderen Personen, die auf dem Gerät zuhören, sie sehen können, und sendet dann die korrigierten Ereignisse über die
uinput
API zum Erstellen von Eingabegeräten auf Kernel-Ebene aus dem Benutzerbereich.)quelle