Swap-Mapping der linken und rechten Umschalttaste

7

Ich habe ein seltsames, hochspezifisches Problem bei der Verwendung meiner USB-Tastatur eines Drittanbieters mit meinem MacBook Pro: option + left-shift + right-arrow(was, wie Mac-Programmierer wissen, bedeutet, dass das Wort rechts vom Cursor hervorgehoben wird) funktioniert nicht. Die Gründe dafür sind unklar, aber ich weiß, dass dies weder mit Softwareeinstellungen auf Benutzerebene noch direkt mit einem Hardwareproblem auf niedriger Ebene zu tun hat ( die vollständige Logik zur Fehlerbehebung finden Sie in meiner ursprünglichen Frage zum Superuser ).

Ich sollte beachten, dass es sich um eine für Windows entwickelte Tastatur handelt: eine Thinkpad-USB-Tastatur mit Trackpoint - der Trackpoint ist der Grund, warum ich es so mag und trotz seiner Probleme dabei bleibe. Der Schlüssel, dem ich optionin den Systemeinstellungen zuordne, ist also der Schlüssel "Windows-Logo".

Es funktioniert , wenn ich es benutze, option + RIGHT-shift + right-arrowaber dies ist eine sehr ungeschickte Handposition, um mich schnell in meinen Dokumenten zu bewegen. Daher möchte ich versuchen, die Interpretation der linken und rechten Umschalttaste durch den Mac auszutauschen . Ist das möglich und wenn ja, wie?


Aktualisieren:

Auf Vorschlag von Tetsujin habe ich Karabiner ausprobiert, aber es scheint, dass das Problem auf einer niedrigeren Ebene auftritt. Das Tastaturereignis für den Rechtspfeil erreicht Karabiner nicht einmal, wenn die Tasten Windows-logound (physisch) left-shiftgedrückt gehalten werden (und es spielt keine Rolle, ob Windows logosie einem anderen Modifikator zugeordnet sind: Das Problem bleibt bei dieser bestimmten Kombination aus physischen Tasten).

Als Antwort auf den Kommentar von Insomniac Software sagt der Karabiner EventViewer Folgendes, wenn ich drücke:

Windows-logo + left-shift + left-arrow::

eventType:keyMod          code:0x3a       name:Option_L        flags:Opt                                misc:KeyCode::OPTION_L  characters:    
eventType:keyMod          code:0x38       name:Shift_L         flags:Shift Opt                          misc:KeyCode::SHIFT_L   characters:    
eventType:keyDown         code:0x7b       name:Left            flags:Shift Opt NumPad Fn                misc:KeyCode::CURSOR_LEFT   characters:    
eventType:keyUp           code:0x7b       name:Left            flags:Shift Opt NumPad Fn                misc:KeyCode::CURSOR_LEFT   characters:    
eventType:keyMod          code:0x38       name:Shift_L         flags:Opt                                misc:KeyCode::SHIFT_L   characters:    
eventType:keyMod          code:0x3a       name:Option_L        flags:                                   misc:KeyCode::OPTION_L  characters:    

Windows-logo + left-shift + right-arrow::

eventType:keyMod          code:0x3a       name:Option_L        flags:Opt                                misc:KeyCode::OPTION_L  characters:    
eventType:keyMod          code:0x38       name:Shift_L         flags:Shift Opt                          misc:KeyCode::SHIFT_L   characters:    
eventType:keyMod          code:0x38       name:Shift_L         flags:Opt                                misc:KeyCode::SHIFT_L   characters:    
eventType:keyMod          code:0x3a       name:Option_L        flags:                                   misc:KeyCode::OPTION_L  characters:    

Windows-logo + right-shift + right-arrow::

eventType:keyMod          code:0x3a       name:Option_L        flags:Opt                                misc:KeyCode::OPTION_L  characters:    
eventType:keyMod          code:0x3c       name:Shift_R         flags:Shift Opt                          misc:KeyCode::SHIFT_R   characters:    
eventType:keyDown         code:0x7c       name:Right           flags:Shift Opt NumPad Fn                misc:KeyCode::CURSOR_RIGHT  characters:    
eventType:keyUp           code:0x7c       name:Right           flags:Shift Opt NumPad Fn                misc:KeyCode::CURSOR_RIGHT  characters:    
eventType:keyMod          code:0x3c       name:Shift_R         flags:Opt                                misc:KeyCode::SHIFT_R   characters:    
eventType:keyMod          code:0x3a       name:Option_L        flags:                                   misc:KeyCode::OPTION_L  characters:    

(NB: windows-logo + right-shift + left-arrowfunktioniert auch, falls Sie sich fragen).

Beachten Sie, dass im speziellen Fall von windows-logo + left-shift + right-arrowKarabiner in erster Linie weniger Ereignisse auftreten. Ich sehe die gleiche Geschichte (zumindest soweit ich das beurteilen kann) aus Karabiners Debug-Protokoll: weniger Ereignisse, die durch diese spezielle problematische Kombination generiert wurden. Ich habe in --Debug--den gleichen drei Fällen alles bis zu jeder Zeile abgeschnitten :

# Windows-logo + left-shift + left-arrow
KeyboardEventCallback [ caught]: eventType 12, flags 0x80080020, key 0x003a, kbdType  40, repeat = 0
KeyboardEventCallback [sending]: eventType 12, flags 0x00080020, key 0x003a, kbdType  40, repeat = 0
KeyboardEventCallback [ caught]: eventType 12, flags 0x800a0022, key 0x0038, kbdType  40, repeat = 0
KeyboardEventCallback [sending]: eventType 12, flags 0x000a0022, key 0x0038, kbdType  40, repeat = 0
UpdateEventFlagsCallback [ caught]: flags 0x002a0022
KeyboardEventCallback [ caught]: eventType 10, flags 0x802a0022, key 0x007b, kbdType  40, repeat = 0
UpdateEventFlagsCallback [sending]: flags 0x002a0022
KeyboardEventCallback [sending]: eventType 10, flags 0x002a0022, key 0x007b, kbdType  40, repeat = 0
KeyboardEventCallback [ caught]: eventType 11, flags 0x802a0022, key 0x007b, kbdType  40, repeat = 0
UpdateEventFlagsCallback [ caught]: flags 0x000a0022
KeyboardEventCallback [sending]: eventType 11, flags 0x002a0022, key 0x007b, kbdType  40, repeat = 0
UpdateEventFlagsCallback [sending]: flags 0x000a0022
KeyboardEventCallback [ caught]: eventType 12, flags 0x80080020, key 0x0038, kbdType  40, repeat = 0
KeyboardEventCallback [sending]: eventType 12, flags 0x00080020, key 0x0038, kbdType  40, repeat = 0
KeyboardEventCallback [ caught]: eventType 12, flags 0x80000000, key 0x003a, kbdType  40, repeat = 0
KeyboardEventCallback [sending]: eventType 12, flags 0x00000000, key 0x003a, kbdType  40, repeat = 0


# Windows-logo + left-shift + right-arrow
KeyboardEventCallback [ caught]: eventType 12, flags 0x80080020, key 0x003a, kbdType  40, repeat = 0
KeyboardEventCallback [sending]: eventType 12, flags 0x00080020, key 0x003a, kbdType  40, repeat = 0
KeyboardEventCallback [ caught]: eventType 12, flags 0x800a0022, key 0x0038, kbdType  40, repeat = 0
KeyboardEventCallback [sending]: eventType 12, flags 0x000a0022, key 0x0038, kbdType  40, repeat = 0
KeyboardEventCallback [ caught]: eventType 12, flags 0x80080020, key 0x0038, kbdType  40, repeat = 0
KeyboardEventCallback [sending]: eventType 12, flags 0x00080020, key 0x0038, kbdType  40, repeat = 0
KeyboardEventCallback [ caught]: eventType 12, flags 0x80000000, key 0x003a, kbdType  40, repeat = 0
KeyboardEventCallback [sending]: eventType 12, flags 0x00000000, key 0x003a, kbdType  40, repeat = 0


# Windows-logo + right-shift + right-arrow
KeyboardEventCallback [ caught]: eventType 12, flags 0x80080020, key 0x003a, kbdType  40, repeat = 0
KeyboardEventCallback [sending]: eventType 12, flags 0x00080020, key 0x003a, kbdType  40, repeat = 0
KeyboardEventCallback [ caught]: eventType 12, flags 0x800a0024, key 0x003c, kbdType  40, repeat = 0
KeyboardEventCallback [sending]: eventType 12, flags 0x000a0024, key 0x003c, kbdType  40, repeat = 0
UpdateEventFlagsCallback [ caught]: flags 0x002a0024
KeyboardEventCallback [ caught]: eventType 10, flags 0x802a0024, key 0x007c, kbdType  40, repeat = 0
UpdateEventFlagsCallback [sending]: flags 0x002a0024
KeyboardEventCallback [sending]: eventType 10, flags 0x002a0024, key 0x007c, kbdType  40, repeat = 0
KeyboardEventCallback [ caught]: eventType 11, flags 0x802a0024, key 0x007c, kbdType  40, repeat = 0
UpdateEventFlagsCallback [ caught]: flags 0x000a0024
KeyboardEventCallback [sending]: eventType 11, flags 0x002a0024, key 0x007c, kbdType  40, repeat = 0
UpdateEventFlagsCallback [sending]: flags 0x000a0024
KeyboardEventCallback [ caught]: eventType 12, flags 0x80080020, key 0x003c, kbdType  40, repeat = 0
KeyboardEventCallback [sending]: eventType 12, flags 0x00080020, key 0x003c, kbdType  40, repeat = 0
KeyboardEventCallback [ caught]: eventType 12, flags 0x80000000, key 0x003a, kbdType  40, repeat = 0
KeyboardEventCallback [sending]: eventType 12, flags 0x00000000, key 0x003a, kbdType  40, repeat = 0
jez
quelle
Ein später Gedanke - was ist mit Karabiner ?
Tetsujin
Danke - das ist eine gute Antwort auf diese Frage, obwohl sich herausstellt, dass sie nicht hilft. Ich habe Karabiner ausprobiert, und es ermöglicht mir tatsächlich, Modifikatortasten neu zuzuordnen, einschließlich Links- und Rechtsverschiebung - ziemlich cool! Leider stellt sich heraus, dass mein Ansatz nicht funktioniert, um das ursprüngliche Problem zu lösen. Ich denke, dieses sehr spezifische Problem mit dem Windows-Logo + Linksverschiebung + Rechtspfeil tritt auf einer niedrigeren Ebene auf (dh die Informationen erreichen Karabiner nie). Es ist so seltsam, dass dies fehlschlägt, wenn Windows-Logo + Rechtsverschiebung + Rechtspfeil und Windows-Logo + Linksverschiebung + Linkspfeil funktionieren. Ah, gut.
Jez
1
Haben Sie versucht, eine alte Win-Tastatur auszutauschen, um zu überprüfen, ob sie für dieses Modell sehr spezifisch ist? [würde es nicht reparieren, könnte aber die Dinge ein wenig
eingrenzen
2
Da die Debug-Ausgabe zeigt, dass das System nicht einmal die Schlüsselcodes empfängt, können Sie keine Neuzuordnung vornehmen. Es ist etwas Einzigartiges für die Tastatur und diese Tastenkombination. Ich habe ein ähnliches Problem mit der Microsoft Sculpt-Tastatur. Einige Tasten und Combos senden seltsame Codes, die unter Windows mit dem richtigen Treiber funktionieren, jedoch nicht auf dem Mac. Haben Sie den USB Overdrive- Treiber schon ausprobiert ? Schauen Sie sich zum Schluss diskussionss.apple.com/thread/4693176 an und fragen Sie Bill, ob er auch dieses Problem hat. Wenn es sich um ein USB-Code-Problem handelt, erwähnt er ein neues Bluetooth-Modell, das möglicherweise funktioniert.
Insomniac Software
1
Ich habe das gleiche Problem mit zwei Lenovo TrackPoint USB-Tastaturen (55Y9003 und 0B47190), daher handelt es sich nicht um einen Herstellungsfehler, sondern um ein Hardwareproblem (Funktion?). Ich habe festgestellt, dass die Seitenvorwärts- / Rückwärts-Tasten auf 55Y9003 (zum Surfen im Internet - also in den 1990er Jahren) auch etwas Seltsames bewirken, und ich kann sie mit USB Overdrive nicht zuverlässig zuordnen. Etwas abseits des Themas, aber haben Sie eine Idee, wie ich die TrackPoint-Empfindlichkeit erhöhen kann? Ich habe die Geschwindigkeit und Beschleunigung in USB Overdrive deutlich erhöht, aber der TrackPoint ist immer noch nicht so empfindlich (dh es erfordert mehr Kraft, um als Bewegung registriert zu werden) als bei Verwendung des Keybo

Antworten:

1

Aus Ihren Änderungen geht hervor, dass die von Ihnen verwendete Tastatur das Problem verursacht. Ich weiß leider keine Möglichkeit, das zu beheben, aber ich dachte, ich würde die ursprüngliche Frage trotzdem beantworten.

Sie können Modifikatorschlüssel in OS X von mindestens 10.4 bis 10.10.4 neu zuordnen, indem Sie eine Eigenschaftslistendatei (.plist) ändern. Die Datei befindet sich in ~/Library/Preferences/ByHostund wird benannt .GlobalPreferences.[a long identifier].plist, wobei die lange Kennung jedes Benutzers variiert. (Im Terminal können Sie einfach die Tab-Vervollständigung verwenden, um den spezifischen Namen Ihrer Datei abzurufen.)

Hier sind die Schritte zum Kopieren, Konvertieren, Bearbeiten und Ersetzen der .plist:

  1. Klicken Sie unter Systemeinstellungen> Tastatur auf "Modifizierertasten" und ordnen Sie mindestens eine der Schaltflächen neu zu (z. B. Feststelltaste> Steuerung). Dadurch wird sichergestellt, dass der richtige Abschnitt in der .plist vorhanden ist, und das Auffinden erleichtert.
  2. Wechseln Sie in Terminal zu einem Verzeichnis, in dem Sie die Arbeit erledigen, oder erstellen Sie ein Verzeichnis.

    1. cp ~/Library/Preferences/ByHost/.GlobalPreferences (Drücken Sie dann die Tabulatortaste, um den eindeutigen Dateinamen automatisch zu vervollständigen.)
    2. plutil -convert xml1 -o ./keys-xml.plist ./keys-binary.plist
  3. Öffnen Sie die konvertierte XML-Datei. (Sie können open /Applications/TextEdit.app keys-xml.plistTextEdit vom Terminal aus starten.)

  4. Suchen Sie den Abschnitt in der Datei mit dem Namen " com.apple.keyboard.modifiermapping...". In diesem Abschnitt sollte mindestens eine "Dikt" -Gruppe angezeigt werden. Es ist tatsächlich ein Eintrag pro bestimmten Schlüssel, der neu zugeordnet wurde. Wenn Sie also Control auf Shift neu zuordnen, werden Einträge angezeigt, die LeftControl auf LeftShift und RightControl auf RightShift neu zuordnen.
  5. Ändern Sie den vorhandenen Eintrag anhand der folgenden Tabelle, indem Sie den HIDKeyboardModifierMappingSrcSchlüsselwert in die Quelltaste (die physische Taste, die Sie drücken, und den HIDKeyboardModifierMappingDstSchlüsselwert in die gewünschte Zieltaste (die Taste, die wirksam werden soll) ändern .
  6. Kopieren Sie den gesamten Diktatabschnitt (von <dict>bis </dict>, einschließlich der Tastenzuordnungen, und fügen Sie einen pro Schlüssel ein, den Sie neu zuordnen möchten, und ändern Sie jeweils Src und Dst.
  7. Speichern und schließen Sie die Datei. Dann zurück im Terminal:
    1. plutil -convert binary1 -o ./keys-binary_new.plist keys-xml.plist
    2. cp ./keys-binary_new.plist ~/Library/Preferences/ByHost/.GlobalPreferences (dann Tab zur automatischen Vervollständigung)
  8. Melden Sie sich ab und wieder an, damit die Änderungen wirksam werden.

Hier sind die Schlüsselwerte, die für jeden Modifikatorschlüssel in der Src / Dst-Zuordnung verwendet werden sollen:

+-----------------+-----------+
|    Key Name     | Key Value |
+-----------------+-----------+
| None            |        -1 |
| Caps Lock       |         0 |
| Shift (Left)    |         1 |
| Control (Left)  |         2 |
| Option (Left)   |         3 |
| Command (Left)  |         4 |
| Keypad 0        |         5 |
| Help            |         6 |
| Shift (Right)   |         9 |
| Control (Right) |        10 |
| Option (Right)  |        11 |
| Command (Right) |        12 |
| ~~Kernel Panic~~|      ~~16~|
+-----------------+-----------+

Hinweis: Der Schlüsselcode 16 sollte normalerweise nicht verwendet werden.

Quelle: Umgeschrieben von http://hints.macworld.com/article.php?story=20060825072451882

Andy Mayer
quelle
0

Ich hatte ein ähnliches Problem mit einer DAS-Tastatur, die tatsächlich für meinen Mac entwickelt wurde. Mit der linken Optionstaste wurde eine mysteriöse Tastenkombination anstelle der Optionstaste gedrückt. Für mich war dies ein Hardwareproblem und ich musste die Tastatur des Herstellers ersetzen.

Raster
quelle