Neuzuordnen von Schlüsseln, die mehrere Scan-Codes generieren

33

Ich habe ein ThinkPad W540. Auf der Tastatur befinden sich vier Multimedia-Tasten über dem Nummernblock. Zwei dieser Schlüssel erzeugen Schlüsselcodes (und anscheinend Scancodes), die der Tastenkombination Win_L+ Lund Win_L+ entsprechen E. Mit anderen Worten, für den Schlüssel, der Win_L+ generiert L, wird
showkey --scancodesFolgendes zurückgegeben:

0xe0 0x5b 0x26 0xa6 0xe0 0xdb

Der setkeycodesBefehl erfordert entweder Einzelbyte-Sequenzen ohne Escape-Zeichen oder Zwei-Byte-Sequenzen ohne Escape-Zeichen, um Scan-Codes zu kennzeichnen, und showkeybietet mir mehr als das. Daher kann ich diesen Schlüssel nicht ohne Weiteres einem der freien Schlüsselcodes in meinem System zuordnen setkeycodes <scancode> <keycode>.

Ich würde mich sehr über Hinweise freuen, wie ich diese Taste einem anderen Element zuordnen kann, das nicht einfach eine der vorhandenen Tastenkombinationen auf meiner Tastatur dupliziert.

Mondwanderer
quelle
1
Vielleicht möchten Sie einen Blick darauf werfen:
Tastenkombinationen
1
Ich denke, das kann schwierig sein: Zumindest bei älteren Thinkpads wird diese Art der Zuordnung vom On-Board-Controller vorgenommen, nicht vom Betriebssystem.
Mirabilos
1
Ich habe eine Microsoft All-in-One-Medientastatur mit demselben Problem. Konnten Sie eine Lösung finden?
Osolmaz
5
Ich habe vor einiger Zeit etwas Ähnliches auf einem Thinkpad t61 gemacht, indem ich /etc/acpi/events die im acpidPaket enthaltenen Tasten zugeordnet und nur eine Aktion definiert habe, als diese Funktionstasten gedrückt wurden.
Cesar
2
Haben Sie Win_L als Modifikator in X-Windows eingerichtet? Es ist Standard für mich.
mcr

Antworten:

1

Sie können dies in zwei Schritten tun:

  1. Tastenkombinationen zu fangen
  2. um die Eingabe verschiedener Tasten zu simulieren.

Sie können xchainkeysfür 1. und [xdotool][2]für 2. verwenden :

Um den simulierten neuen Schlüssel mit zu erstellen xdotool, kann die Option --clearmodifiersvon keywichtig sein, um den ursprünglichen simulierten Modifikator zu neutralisieren. Drücken Sie:

xdotool key --clearmodifiers Shift+a

Dies sollte ein Kapital Aals Test eingeben.

In der Konfiguration von xchainkeysin ~/.config/xchainkeys/xchainkeys.confkönnen wir den Befehl an eine Tastenkombination binden:

W-l :exec xdotool key --clearmodifiers Shift+a

Jetzt sollten die Tastenkombination Winund l( Winlinks oder rechts dasselbe tun) sowie der Schlüssel, der Win_L + L generiert, ein Kapital erzeugen A.

(Es gibt viele andere Programme für beide Teile. Zum einen könnte man die Hotkey-Konfiguration einer Desktop-Umgebung verwenden, aber ich bevorzuge es, sie unabhängig von DEs zu halten.)

Volker Siegel
quelle
2
Das Problem bei dieser Lösung ist, wenn ich mich nicht irre, dasselbe, als würde einfach diese Tastenkombination verwendet, um eine Aktion auszulösen. Diese Aktion würde nicht nur durch diese Taste ausgelöst, sondern durch Drücken der tatsächlichen Tastenkombination, die dieselbe erzeugt Codes würden auch das gleiche Ergebnis liefern. Mit anderen Worten, die Bedingung "Ordnen Sie diesen Schlüssel einem anderen Element zu, das eine der vorhandenen Tastenkombinationen nicht einfach dupliziert" wird nicht erfüllt. Aber ich schätze den Aufwand.
Moonwalker
3
Ja, das stimmt - ich war mir nicht sicher, was Sie mit diesem Satz gemeint haben, jetzt verstehe ich. Aber es sieht so aus, als ob Ihre Taste die beiden Tastencodes in der Hardware (dh in der Tastaturfirmware) erzeugt. Ich sehe also keinen Krieg, außer Sie erkennen das Timing der künstlichen Tastendrücke "Modifikator runter", "andere Taste". msgstr "Modifikator auf". Hmm ... vielleicht ist eine Lösung mit Löten einfacher;)
Volker Siegel
1
@moonwalker Kannst du versuchen, Win_L anstelle des anderen Schlüssels neu zuzuordnen, und prüfen, ob er auch den Modifikator des anderen neu zuordnet?
Volker Siegel
1
ähm, würde ich nicht Kombinationen wie Win_L + R, Win + Break, Win + L, Win + etc verlieren? In diesem Fall?
Moonwalker
1
Nein, das glaube ich nicht. Win-L ist Win-Shift-lAber Sie können einem Befehl auch Tastenkombinationen zuordnen. Wie Win-aund danach b. Ohne das Win-a, bverhält sich normal. Das ist bei weitem das nützlichste Feature von xchainkeysund ziemlich einzigartig, denke ich.
Volker Siegel
-2

Das habe ich mit meinem Thinkpad Yoga gemacht, um den Backslash / Pipe-Schlüssel wieder mit dem richtigen Schlüssel zu verbinden. Weil aus irgendeinem Grund in jeder virtuellen Linux-Maschine der umgekehrte Schrägstrich \ pipe (\ |) als der Schlüssel kleiner als (<) interpretiert wird.

Führen Sie zuerst den Befehl aus: xev

Drücken Sie die gewünschte Taste, um den Schlüsselcode für den Schlüssel zu erhalten, den Sie neu binden möchten:

xev KeyPress-Ereignisausgabe

In diesem Beispiel ist der Keycode 94 und die Aktion ist "weniger", aber wir möchten, dass die Aktion Backslash und Bar alias "Pipe" ist.

Ordnen Sie den Schlüsselcode 94 dem umgekehrten Schrägstrich und dem Strichschlüssel (auch "Pipe" genannt) zu:

xmodmap -e 'keycode 94 = backslash bar'

Lassen Sie uns dies nun dauerhaft machen:

xmodmap -pke | egrep "backslash|bar" | grep 94 > ~/.Xmodmap`

Gibt Folgendes an die Datei zurück ~/.Xmodmap:

keycode  94 = backslash bar backslash bar

Anschließend müssen Sie die folgende Datei erstellen, um die Persistenz zu beenden:

echo "xmodmap .Xmodmap" > ~/.xinitrc
Kentgrav
quelle
1
Backslash / Pipe-Schlüssel generiert einen einzelnen Scan-Code. Das Thema befasst sich mit der Neuzuordnung von Schlüsseln, die mehrere Scan-Codes generieren.
Moonwalker