Wie ordne ich eine Taste in macOS Sierra neu zu, z. B. "Rechts, Alt, Rechts"?

44

Ich habe Karabiner verwendet , um Right Alt dem Right Control zuzuordnen (als Emacs-Benutzer verwende ich Control VIEL mehr als Alt), aber die Aktualisierung auf Sierra hat dies verhindert. Ein Downgrade ist keine Option.

Wie kann ich Schlüssel in Sierra manuell neu zuordnen? Ich möchte speziell Right Alt auf Right Control neu zuordnen.

Steven C. Howell
quelle

Antworten:

37

In Apples Technical Note TN2450 wird beschrieben, wie Sie die Tasten neu zuordnen. Wenn Sie den folgenden Befehl ausführen, wird Right Alt als Right Control neu zugeordnet.

hidutil property --set '{"UserKeyMapping":
    [{"HIDKeyboardModifierMappingSrc":0x7000000e6,
      "HIDKeyboardModifierMappingDst":0x7000000e4}]
}'

Beachten Sie, dass der obige Befehl die rechte Alt- und die rechte Steuerung nicht umschaltet. Sie werden beide Right Control sein. Wenn Sie ein MacBook besitzen, werden Sie dies erst bemerken, wenn Sie eine externe Tastatur anschließen. Wenn Sie Right Alt und Right Control umschalten möchten , müssen Sie einen zweiten Umschaltbefehl wie den folgenden hinzufügen.

hidutil property --set '{"UserKeyMapping":
    [{"HIDKeyboardModifierMappingSrc":0x7000000e4,
      "HIDKeyboardModifierMappingDst":0x7000000e6},
     {"HIDKeyboardModifierMappingSrc":0x7000000e6,
      "HIDKeyboardModifierMappingDst":0x7000000e4}]
}'

Die Tabelle am Ende des technischen Hinweises enthält eine Liste der Hexadezimalwerte für jeden Schlüssel. Um die obige Antwort auf das Umschalten von Schlüsseln zu verallgemeinern, müssen Sie orden Hexadezimalwert aus dieser Liste zusammen mit eingeben 0x700000000. Der folgende Python-Code zeigt eine Möglichkeit, dies zu tun.

In [1]: def convert(val):
   ...:     int_val = int(val, 16)
   ...:     int_ref = 0x700000000
   ...:
   ...:     return hex(int_ref | int_val)
   ...:

In [2]: r_alt = '0xE6'

In [3]: print(convert(r_alt))
0x7000000e6
Steven C. Howell
quelle
Nett, danke! Gibt es eine Möglichkeit, die Zuordnungen mit diesem Befehl auf ihre Standardeinstellungen zurückzusetzen?
10.
1
@ Cᴀʟʟᴏᴅᴀᴄɪᴛʏ Um einen Schlüssel zurückzusetzen, führen Sie den Befehl einfach erneut mit dem Wert dieses Schlüssels in Srcund aus Dst.
Steven C. Howell
Dies wird beim Neustart wiederhergestellt. Ich kann diesen Befehl bei jedem Systemstart erneut ausführen, möchte dies jedoch nicht tun. Gibt es eine Möglichkeit, dies dauerhaft zu machen?
Firebush
2
@firebush Dieser Beitrag schlägt vor , einen Login - Haken mit Befehlen machen wie diese persistent: stackoverflow.com/a/46460200/629530
firebush
1
@ StevenC.Howell Wie wäre es mit Kombinationen von Funktionsmodifikatoren? Zum Beispiel ist der umgekehrte Schrägstrich \ in meiner Tastatur, Shift+Option+7den ich durch etwas Einfacheres ersetzen möchte, wie Option+.ich es kaum benutze. Wie mache ich das? Danke für Ihre Hilfe.
Nanashi No Gombe
15

Ein allgemeinerer und benutzerfreundlicherer Ansatz ist die Verwendung von Karabiner-Elements , einer Version von Karabiner, die auf Sierra funktioniert.

mikaraento
quelle
2
Schnelles Update auf Karabiner-Elements . Es funktioniert unter macOS High Sierra 10.13.3 (17D102). Ich habe meine rechten Befehls- und Wahltasten erfolgreich ausgetauscht.
Steve Clement
Apps von Drittanbietern sind niemals "allgemeiner". Warum sollte jemand sein System mit Apps überladen, die Dinge tun, die direkt in das Betriebssystem integriert sind?
Bachsau
1
In Bachsau ist es allgemeiner, dass Sie eine Menge anderer Aufgaben ausführen können, z. B. Tastenkombinationen, Makros und Profile einrichten oder freigegebene und / oder geteilte Zuordnungskonfigurationen für interne und externe Tastaturen verwenden können.
Janosch
@Bachsau Ich behalte für jede meiner Tastaturen unterschiedliche Profile, damit sie gleich funktionieren. Sehr schöne App
AlexG
8

Dies ist ein Nachtrag zu Steven C. Howells Antwort.

Ich habe ein neues MacBook Pro mit einer skandinavischen Tastatur. Dieses neue Modell hat keine Esc-Taste mehr, was für mich ein erhebliches Handicap darstellt.

Ich habe herausgefunden, dass das Folgende die §-Taste (links oben, links von 1 und über der Tabulatortaste) übersetzt - die ich, glaube ich, noch nie zuvor für irgendetwas benutzt habe -, um Esc zu produzieren.

hidutil property --set '{"UserKeyMapping":[{"HIDKeyboardModifierMappingSrc":0x700000064,"HIDKeyboardModifierMappingDst":0x700000029}]}'

In der Dokumentation von Apple (verknüpft mit der Antwort von Steven) ist dies als "Keyboard Non-US \ and |" (0x64).

Einige der Tasten außerhalb der USA sind schwer zu finden, da sie sich normalerweise auf Tasten beziehen, die auf der verwendeten Tastatur eine andere Bezeichnung haben. (Ich habe auch festgestellt, dass "Grave accent and tilde" sich auf die Taste zwischen left shift und z bezieht, die auf meiner Tastatur erzeugt wird <. Ich konnte nicht feststellen, welche Taste "Non-US #and ~" entspricht, und habe nicht weiter experimentiert, sobald ich sie gefunden habe my key.) Wenn Sie experimentieren möchten, führen Sie das Skript im Terminal aus, bis Sie den gewünschten Schlüssel gefunden haben:

for ((i=1;i<=128;++i)); do
    printf '0x7000000%0x\n' "$i"
    printf '{"UserKeyMapping":[{"HIDKeyboardModifierMappingSrc":0x7000000%0x,"HIDKeyboardModifierMappingDst":0x70000000a}]}' "$i" |
    xargs -0 hidutil property --set >/dev/null
    read -p "Type some stuff: "
    hidutil property --set '{"UserKeyMapping":[{}]}' >/dev/null
done

Dies durchläuft die Schlüsselcodes und ändert sich nacheinander, in der Hoffnung, dass Sie durch Ausprobieren einen Schlüssel finden, der für Sie nicht besonders nützlich ist. Geben Sie etwas ein, wenn Sie dazu aufgefordert werden. Wenn Sie ganstelle des erwarteten einen erhalten, haben Sie den richtigen Schlüsselcode gefunden. (Wechseln Sie 0x70000000azu etwas anderem, wenn dies gfür Sie nicht bequem ist. Möchten Sie die gTaste möglicherweise neu zuordnen ?) Wenn Sie mit der Eingabe fertig sind , drücken Sie einfach die Eingabetaste, um mit der nächsten Taste fortzufahren.

Der letzte Befehl in der Schleife ist, wie Sie alle UserKeyMappingEinstellungen zappen :

hidutil property --set '{"UserKeyMapping":[{}]}'

Wenn Sie es zum ersten Mal ausführen, wird hidutil property --get UserKeyMappinges erzeugt

(null)

Es scheint jedoch, dass Sie diesen Wert nicht zurückmelden können, um die Einstellung zu ändern (oder diese Eingabe zu akzeptieren, aber zu ignorieren).

(Wenn Sie mit dem Terminal nicht vertraut sind, kopieren Sie das Objekt einfach von forbis donean Ihrer bash$Eingabeaufforderung oder ähnlichem.)

Gemäß dieser verwandten Stapelüberlauf-Frage können Sie den Befehl in eine Skriptdatei in Ihrem Ausgangsverzeichnis einfügen und zu Ihrer launchdKonfiguration hinzufügen , um diese Änderung dauerhaft zu machen.

Für den Fall, dass einige Leser dies nicht alleine tun möchten, finden Sie hier ein kurzes Skript, das dies für Sie erledigt. Kopieren Sie dies einfach an der Eingabeaufforderung des Terminals.

mkdir -p "$HOME"/bin
printf '%s\n' '#!/bin/sh' \
    'hidutil property --set '{"UserKeyMapping":[{"HIDKeyboardModifierMappingSrc":0x700000064,"HIDKeyboardModifierMappingDst":0x700000029}]}' \
    >"$HOME"/bin/userkeymapping
chmod 755 "$HOME"/bin/userkeymapping
cat<<: >"$HOME"/Library/LaunchAgents/userkeymapping.plist
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>userkeymapping</string>
    <key>ProgramArguments</key>
    <array>
        <string>$HOME/bin/userkeymapping</string>
    </array>
    <key>RunAtLoad</key>
    <true/>
</dict>
</plist>
:
launchctl load "$HOME"/Library/LaunchAgents/userkeymapping.plist

Wenn Sie am Ende einen anderen Schlüssel haben als den, den 0x700000064Sie im Skript ändern müssen, oder in der Datei, die "$HOME"/bin/userkeymappinges erstellt, wenn Sie das oben genannte bereits ausgeführt haben.

Tripleee
quelle
Eine frühere Version dieser Antwort befürwortete die Verwendung LoginHook, funktionierte jedoch nicht für mich. Basierend auf stackoverflow.com/a/22872222/874188 wechselte ich launchdstattdessen zu einem Ansatz.
Tripleee
Als leidenschaftlicher vi / vim-Fan habe ich genau das gesucht. Vielen Dank.
Philip Kearns
7

Wenn Sie nur einen einzigen Schlüssel neu zuordnen möchten

Beispiel: So ordnen Sie die Escape-Taste auf einem Mac neu zu

  1. Gehen Sie zum Apple-Menü und wählen Sie "Systemeinstellungen" und dann zum Einstellungsfeld "Tastatur" und wählen Sie die Registerkarte "Tastatur"

  2. Klicken Sie auf die Schaltfläche "Modifier Keys" in der unteren rechten Ecke

  3. Wählen Sie die Taste aus, die Sie neu zuordnen und ändern möchten, um die Escape-Funktion auszuführen: Feststelltaste (unsere Empfehlung), Steuerung, Option oder Befehl
  4. Wählen Sie "Escape" aus der Dropdown-Liste, die der Taste entspricht, die Sie als Hardware-Escape-Taste neu zuordnen möchten, und klicken Sie dann auf "OK", um die Änderung zu bestätigen

Referenz

jasonleonhard
quelle
1
Dies gibt Ihnen nur die Kontrolle über die vier Schlüssel, die in dieser Antwort aufgelistet sind.
Tripleee
Richtig und sehr hilfreich. Wenn jemand zusätzliche Schlüssel neu zuordnen möchte, sollte er sich Karabiner
Jasonleonhard
Es sieht so aus, als gäbe es keine Möglichkeit, einen bestimmten Schlüssel wie "rechts ⌥" anzugeben. Das spezifischste Signal, das Sie erhalten können, ist das Signal wie in "any ⌥".
Merchako
Richtig, aber das Gute daran ist, dass Sie nichts installieren müssen, es funktioniert einfach.
Jasonleonhard
1

Für den Fall, dass Sie die Standardeinstellungen wiederherstellen möchten:

# setting it to 'null' does not work on my MBP High Sierra
hidutil property --set '{"UserKeyMapping":[]}'
clarkttfu
quelle