GNU/Linux >> LINUX-Kenntnisse >  >> Linux

So ordnen Sie Tasten unter Linux nur für eine bestimmte Tastatur neu zu

Ja, es ist mit XKB 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> 1.2.0 haben

Listen Sie zuerst Ihre Geräte auf mit:

xinput list

Sie erhalten etwa Folgendes:

⎡ Virtual core pointer                      id=2    [master pointer  (3)]
⎜   ↳ Virtual core XTEST pointer                id=4    [slave  pointer  (2)]
⎜   ↳ Wacom Bamboo Pen Pen stylus               id=11   [slave  pointer  (2)]
⎜   ↳ Wacom Bamboo Pen Finger touch             id=12   [slave  pointer  (2)]
⎜   ↳ Logitech USB-PS/2 Optical Mouse           id=13   [slave  pointer  (2)]
⎜   ↳ Wacom Bamboo Pen Pen eraser               id=14   [slave  pointer  (2)]
⎜   ↳ Wacom Bamboo Pen Finger pad               id=15   [slave  pointer  (2)]
⎜   ↳ GASIA USB KB V11                          id=17   [slave  pointer  (2)]
⎣ Virtual core keyboard                     id=3    [master keyboard (2)]
    ↳ Virtual core XTEST keyboard               id=5    [slave  keyboard (3)]
    ↳ Power Button                              id=6    [slave  keyboard (3)]
    ↳ Power Button                              id=7    [slave  keyboard (3)]
    ↳ G19 Gaming Keyboard                       id=8    [slave  keyboard (3)]
    ↳ G19 Gaming Keyboard                       id=9    [slave  keyboard (3)]
    ↳ Logitech G19 Gaming Keyboard              id=10   [slave  keyboard (3)]
    ↳ GASIA USB KB V11                          id=16   [slave  keyboard (3)]

Identifizieren Sie die Zeichenfolge Ihres Geräts und bearbeiten Sie das folgende Shell-Skript, indem Sie die sed-Zeile durch eine ersetzen, die dem Namen Ihres Geräts entspricht. Ändern Sie dann die Tasten, die Sie neu zuordnen müssen.

Beispiel:Laden Sie xev und drücken Sie eine Taste, die Sie neu zuordnen möchten. Angenommen, Sie finden den Schlüsselcode 84 heraus. Schlagen Sie 84 in https://gist.github.com/zoqaeski/3880640 nach. Der dortige 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.

remote_id=$(
    xinput list |
    sed -n 's/.*GASIA.*id=\([0-9]*\).*keyboard.*/\1/p'
)
[ "$remote_id" ] || exit

# remap the following keys, only for my custom vintage atari joystick connected
# through an old USB keyboard:
#
# keypad 5 -> keypad 6
# . -> keypad 2
# [ -> keypad 8
# left shift -> left control

mkdir -p /tmp/xkb/symbols
# This is a name for the file, it could be anything you
# want. For us, we'll name it "custom". This is important
# later.
#
# The KP_* come from /usr/include/X11/keysymdef.h
# Also note the name, "remote" is there in the stanza
# definition.
cat >/tmp/xkb/symbols/custom <<\EOF

xkb_symbols "remote" {
    key <KP5>  { [ KP_Right, KP_6, U2192, U21D2 ]       };
    key <I129> { [ KP_Down, KP_2, U2193, U21D3 ]       };
    key <AD12> { [ KP_Up, KP_8, U2191, U21D1 ]  };
    key <LFSH> { [ Control_L ]        };
};
EOF

# (1) We list our current definition
# (2) Modify it to have a keyboard mapping using the name
#     we used above, in this case it's the "remote" definition
#     described in the file named "custom" which we specify in
#     this world as "custom(remote)".
# (3) Now we take that as input back into our definition of the
#     keyboard. This includes the file we just made, read in last,
#     so as to override any prior definitions.  Importantly we 
#     need to include the directory of the place we placed the file
#     to be considered when reading things in.
#
# Also notice that we aren't including exactly the 
# directory we specified above. In this case, it will be looking
# for a directory structure similar to /usr/share/X11/xkb
# 
# What we provided was a "symbols" file. That's why above we put
# the file into a "symbols" directory, which is not being included
# below.
setxkbmap -device $remote_id -print \
 | sed 's/\(xkb_symbols.*\)"/\1+custom(remote)"/' \
 | xkbcomp -I/tmp/xkb -i $remote_id -synch - $DISPLAY 2>/dev/null

Dann sourcen Sie es (Sie können es zu Ihrer .xinitrc hinzufügen). Alles erledigt! Jetzt sollte das Drücken der Tasten die gewünschte Ausgabe erzeugen, nur für das von Ihnen angegebene Gerät.

Bearbeiten :Kürzlich ist mir aufgefallen, dass die neue Konfiguration aus irgendeinem Grund nicht sofort angewendet wird. Sie müssen zuerst eine Taste auf Ihrem anderen drücken Tastatur und testen Sie dann die konfigurierten Tasten auf Ihrer modifizierten Tastatur. Ich weiß nicht, warum das passiert, vielleicht eine Art Cache.


Für alle anderen, die von Google hierher kommen und eine Antwort wünschen, die eher dem entspricht, was der Fragesteller ursprünglich erhofft hatte, kenne ich zwei Möglichkeiten, Ereignisse bei evdev neu zuzuordnen Ebene, damit die Änderung für alle Anwendungen gilt:

  1. udev bietet eine API zum Modifizieren der Hardware-Datenbankeinträge, die die Zuordnungen zwischen Scancodes und Keycodes steuern. Diese ArchiWiki-Seite, die Anweisungen enthält, sagt ausdrücklich, dass es sowohl für X11- als auch für Konsoleneingaben funktioniert.

    Das Wesentliche ist, dass Sie einen benutzerdefinierten Eintrag in /etc/udev/hwdb.d/ erstellen die aus einem Geräteübereinstimmungsmuster und einigen Scancode-zu-Keycode-Neuzuordnungsdefinitionen besteht, führen Sie dann systemd-hwdb update aus um die Datenbank neu aufzubauen und udevadm trigger ohne Neustart anwenden.

  2. Da Wayland das Tastatur-Subsystem von X11 nicht verwendet und große Wayland-Compositoren wie GNOME Shell und Weston keine UIs implementieren, um die relevanten Aspekte von libinput zu konfigurieren, hat jemand einen Daemon namens evdevremapkeys geschrieben, der das Problem ähnlich wie der G15Daemon-Userspace-Treiber für Logitech löst G15-Gaming-Tastaturen.

    (Es schluckt Ereignisse, die es neu zuordnen möchte, sodass nichts anderes, das auf dem Gerät zuhört, sie sehen kann, und gibt dann die korrigierten Ereignisse über uinput aus API zum Erstellen von Eingabegeräten auf Kernel-Ebene aus dem Userspace.)


Linux
  1. So richten Sie SSH-Schlüssel für die „kennwortlose“ SSH-Anmeldung unter Linux ein

  2. Verwendung von Shell-Erweiterungen zum Generieren von Shell-Tokens unter Linux

  3. So richten Sie SSH-Schlüssel für die SSH-Anmeldung mit „öffentlichen/privaten Schlüsseln“ unter Linux ein

  4. Wie man die Interrupt/GPIO-Nummer für einen bestimmten Pin in Linux kennt

  5. So legen Sie die Prozess-ID in Linux für ein bestimmtes Programm fest

So navigieren Sie auf Ihrem GNOME-Linux-Desktop nur mit einer Tastatur

So führen Sie einen Befehl für eine bestimmte Zeit in Linux aus

So installieren Sie Setuptools für Python unter Linux

Benutzerdefinierte Tastaturtasten in Linux neu zuordnen - Tutorial

Cedilla unter C (ç) im Tastaturlayout „US International with Dead Keys“ unter Linux

sshd:So aktivieren Sie die PAM-Authentifizierung für bestimmte Benutzer unter