Come rimappare una chiave in macOS Sierra, ad esempio, da Right Alt a Right Control?


45

Ho usato per usare Karabiner rimappare Alt diritto di controllare il destro (come utente Emacs io uso un controllo molto più che Alt), ma l'aggiornamento a Sierra ha rotto questo. Il downgrade non è un'opzione.

Come rimappare manualmente le chiavi in ​​Sierra? In particolare, vorrei rimappare Right Alt in Right Control.

Risposte:


40

La nota tecnica di Apple TN2450 descrive come rimappare le chiavi. L'esecuzione del comando seguente rimappa nuovamente Alt destra in Controllo a destra.

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

Si noti che il comando sopra non sta cambiando il controllo destro e destro. Entrambi saranno Right Control. Se hai un MacBook, non lo noterai fino a quando non colleghi una tastiera esterna. Se si desidera cambiare il controllo Alt destro e destro, è necessario aggiungere un secondo comando switch, come il seguente.

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

La tabella nella parte inferiore della Nota tecnica contiene un elenco di valori esadecimali per ciascuna chiave. Per generalizzare la risposta sopra per cambiare qualsiasi chiave, è necessario oril valore esadecimale da quell'elenco insieme a 0x700000000. Il seguente codice Python mostra un modo per farlo.

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

Bene grazie! C'è un modo per ripristinare i mapping ai loro valori predefiniti con questo comando?
Aᴄʜᴇʀᴏɴғᴀɪʟ

1
@ Cᴀʟʟᴏᴅᴀᴄɪᴛʏ per ripristinare qualsiasi chiave, è sufficiente eseguire nuovamente il comando con il valore di quella chiave in entrambi Srce Dst.
Steven C. Howell,

Questo ripristina al riavvio. Posso rieseguire questo comando ad ogni avvio, ma preferirei non farlo. C'è un modo per renderlo permanente?
firebush

2
@firebush Questo post suggerisce di utilizzare un gancio login per rendere i comandi come questo persistente: stackoverflow.com/a/46460200/629530
Firebush

1
@ StevenC.Howell Che ne dici di combinazioni di modificatori di funzioni? Ad esempio, la barra rovesciata \ nella mia tastiera è Shift+Option+7che vorrei sostituire con qualcosa di più semplice come quello Option+.che difficilmente uso. Come lo faccio? Grazie per l'aiuto.
Nanashi No Gombe,

15

Un approccio più generale e intuitivo è l'utilizzo di Karabiner-Elements , che è una versione di Karabiner che funziona su Sierra.


2
Aggiornamento rapido su Karabiner-Elements . Funziona su macOS High Sierra 10.13.3 (17D102) Ho scambiato con successo i miei tasti di comando e opzione giusti.
Steve Clement,

Le app di terze parti non sono mai "più generali". Perché qualcuno dovrebbe ingombrare il proprio sistema con app che fanno cose che sono integrate nel sistema operativo?
Bachsau,

1
@Bachsau è più generale che ti permette di fare molte altre cose, ad esempio impostare combinazioni di tasti, macro e profili o usare configurazioni di mappatura condivise e / o divise per qualsiasi tastiera interna ed esterna.
Janosch,

@Bachsau Tengo diversi profili per ciascuna delle mie tastiere, quindi funzionano allo stesso modo. App molto bella
AlexG

9

Questa è un'aggiunta alla risposta di Steven C. Howell.

Ho un nuovo MacBook Pro con una tastiera scandinava. Questo nuovo modello non ha più un tasto Esc, che per me è un handicap significativo.

Ho scoperto che ciò che segue tradurrà il tasto § (in alto a sinistra, a sinistra di 1 e sopra il tasto tab) - che non credo di aver mai usato prima di oggi - per produrre Esc.

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

Nella documentazione di Apple (collegata dalla risposta di Steven) questa è etichettata come "Tastiera non statunitense \ e |" (0x64).

Molti dei tasti "non statunitensi" sono difficili da scoprire perché in genere si riferiscono a tasti con un'etichetta diversa sulla tastiera in uso. (Ho anche scoperto che "Accento grave e tilde" si riferisce al tasto tra shift sinistro e z, che sulla mia tastiera produce <. Non sono stato in grado di stabilire quale tasto corrisponda a "Non-USA #e ~" e non ho sperimentato ulteriormente una volta trovato la mia chiave.) Se vuoi sperimentare, prova a eseguire lo script nel terminale fino a trovare la chiave che ti serve:

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

Questo passa sopra i codici chiave e cambia uno alla volta, nella speranza che tu possa trovare attraverso la prova e l'errore una chiave che non è particolarmente utile per te. Prova a digitare qualcosa quando ti viene chiesto: se ottieni un valore diverso gda quello che ti aspettavi, hai trovato il codice chiave giusto. (Passa 0x70000000aa qualcos'altro se gnon è una scelta conveniente per te. Forse vuoi rimappare il gtasto?) Quando hai finito di digitare, premi Invio per passare al tasto successivo.

Per quello che vale, l'ultimo comando all'interno del loop è come zapping tutte le UserKeyMappingimpostazioni:

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

Quando si esegue inizialmente hidutil property --get UserKeyMappingproduce

(null)

ma sembra che non sia possibile restituire questo valore per eseguire lo zapping dell'impostazione (o meglio, accetta ma ignora questo input).

(Se non si ha familiarità con il Terminale, è sufficiente copiare / incollare l'oggetto da forfino donea quando bash$richiesto o simile.)

In base a questa domanda Stack Overflow correlata è possibile inserire il comando in un file di script nella directory home e aggiungerlo alla launchdconfigurazione per rendere persistente questa modifica.

Nel caso in cui alcuni lettori non si sentano a proprio agio nel fare questo da soli, ecco una breve sceneggiatura che lo fa per te. Ancora una volta, basta copiarlo / incollarlo al prompt del Terminale.

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

Ovviamente se hai finito con qualche chiave diversa 0x700000064da quella che devi cambiare nello script, o nel file "$HOME"/bin/userkeymappingfinisce per creare se hai già eseguito quanto sopra.


Una versione precedente di questa risposta raccomandava l'uso LoginHookma non funzionava per me, e basandomi su stackoverflow.com/a/22872222/874188 invece sono passato a un launchdapproccio.
tripla il

Come appassionato fan di vi / vim questo è esattamente quello che stavo cercando. Grazie.
Philip Kearns,

7

Se tutto ciò che vuoi fare è rimappare una singola chiave

Esempio: come rimappare la chiave di escape su Mac

  1. Vai al menu  Apple e scegli “Preferenze di Sistema”, quindi vai al pannello delle preferenze “Tastiera” e scegli la scheda “Tastiera”

  2. Fai clic sul pulsante "Chiavi modificatore" nell'angolo in basso a destra

  3. Scegli il tasto che desideri rimappare e modificare per eseguire la funzione Escape: Caps Lock (il nostro consiglio), Control, Option o Command
  4. Selezionare "Escape" dall'elenco a discesa corrispondente alla chiave che si desidera rimappare come chiave di escape hardware, quindi fare clic su "OK" per impostare la modifica

riferimento


2
Questo ti dà solo il controllo sulle quattro chiavi che sono elencate in questa risposta.
tripla

Corretto e molto utile. Se qualcuno vuole rimappare le chiavi aggiuntive
prendi in

Sembra che non ci sia modo di specificare una chiave specifica, come "right ⌥". Il più specifico che puoi ottenere è il segnale, come in "qualsiasi ⌥".
Merchako,

Corretto, ma il bello è che non devi installare nulla che funzioni.
jasonleonhard

0

Nel caso in cui si desideri ripristinare i valori predefiniti:

# setting it to 'null' does not work on my MBP High Sierra
hidutil property --set '{"UserKeyMapping":[]}'
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.