88 votes

Comment remapper une touche dans MacOS Sierra, par exemple Alt droite en Contrôle droit ?

J'avais l'habitude d'utiliser Mousqueton pour remapper Alt droit à Control droit (en tant qu'utilisateur d'Emacs, j'utilise Control BEAUCOUP plus qu'Alt) mais la mise à jour vers Sierra a cassé cela. La rétrogradation n'est pas une option.

Comment remapper manuellement les touches dans Sierra ? Je voudrais notamment remapper la touche Alt droite en Control droite.

87voto

Steven C. Howell Points 1998

Note technique d'Apple TN2450 décrit comment remapper les touches. En exécutant la commande suivante, la touche Alt droite sera remplacée par la touche Control droite.

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

Notez que la commande ci-dessus ne commute pas l'Alt droit et le Contrôle droit. Elles seront toutes deux Contrôle droit. Si vous avez un MacBook, vous ne le remarquerez pas avant de brancher un clavier externe. Si vous voulez commutateur Alt droite et Control droite, vous devez ajouter une deuxième commande de commutation, comme la suivante.

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

Le tableau au bas de la note technique contient une liste de valeurs hexagonales pour chaque touche. Pour généraliser la réponse ci-dessus afin de commuter n'importe quelle touche, vous devez or la valeur hexagonale de cette liste ainsi que 0x700000000 . Le code Python suivant démontre une façon de le faire.

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

0 votes

Sympa - merci ! Y a-t-il un moyen de restaurer les mappings à leurs valeurs par défaut avec cette commande ?

2 votes

@C pour réinitialiser une clé, il vous suffit de relancer la commande avec la valeur de cette clé dans les deux champs Src y Dst .

1 votes

Cela s'annule au redémarrage. Je peux réexécuter cette commande à chaque démarrage, mais je préfère ne pas le faire. Existe-t-il un moyen de rendre cette opération permanente ?

37voto

mikaraento Points 511

Une approche plus générale et plus conviviale consiste à utiliser Éléments du mousqueton qui est une version de Karabiner qui fonctionne sur Sierra.

2 votes

Mise à jour rapide sur Éléments du mousqueton . Il fonctionne sur MacOS High Sierra 10.13.3 (17D102) J'ai réussi à intervertir mes touches Commande et Option de droite.

0 votes

Les applications tierces ne sont jamais "plus générales". Pourquoi quelqu'un voudrait-il encombrer son système avec des applications qui font des choses qui sont intégrées dans le système d'exploitation ?

2 votes

@Bachsau il est plus général en ce sens qu'il vous permet de faire beaucoup d'autres choses, par exemple configurer des combinaisons de touches, des macros et des profils, ou utiliser des configurations de mappage partagées et/ou divisées pour tous les claviers internes et externes.

20voto

tripleee Points 820

Ceci est un addendum à la réponse de Steven C. Howell.

J'ai un nouveau MacBook Pro avec un clavier scandinave. Ce nouveau modèle n'a plus de touche Esc, ce qui est un handicap important pour moi.

J'ai découvert que ce qui suit traduira la touche § (en haut à gauche, à gauche de 1 et au-dessus de la touche de tabulation) - que je ne pense pas avoir jamais utilisée pour quoi que ce soit avant aujourd'hui - pour produire Esc.

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

Dans la documentation d'Apple (dont le lien se trouve dans la réponse de Steven), cela est désigné par "Keyboard Non-US \ and |" (0x64). (0x64).

Plusieurs des touches "non américaines" sont difficiles à découvrir car elles font généralement référence à des touches dont l'étiquette est différente sur le clavier que vous utilisez. (J'ai également découvert que "Grave accent et tilde" fait référence à la touche située entre shift gauche et z, ce qui sur mon clavier produit < . Je n'ai pas pu établir quelle touche correspond à "Non-US". # y ~ " et je n'ai pas fait d'autres expériences une fois que j'ai trouvé ma clé). Si vous voulez expérimenter, essayez d'exécuter le script dans le terminal jusqu'à ce que vous trouviez la clé dont vous avez besoin :

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

Cette procédure passe en revue les codes clés et les modifie un par un, dans l'espoir que vous puissiez trouver par tâtonnement une clé qui ne vous est pas particulièrement utile. Essayez de taper quelque chose quand il vous le demande -- si vous obtenez un g au lieu de ce que vous attendiez, vous avez trouvé le bon code clé. (Changement 0x70000000a à quelque chose d'autre si g n'est pas un choix pratique pour vous. Peut-être voulez-vous remodeler le g clé ?) Lorsque vous avez fini de taper, appuyez simplement sur la touche Entrée pour passer à la touche suivante.

Pour ce que ça vaut, la dernière commande à l'intérieur de la boucle est la façon dont vous zappez tout UserKeyMapping paramètres :

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

Lorsque vous exécutez initialement hidutil property --get UserKeyMapping il produit

(null)

mais il semble que vous ne pouvez pas renvoyer cette valeur pour désactiver le paramètre (ou plutôt, il accepte mais ignore cette entrée).

(Si vous n'êtes pas familier avec le terminal, il suffit de copier/coller la chose à partir de for jusqu'à done à votre bash$ ou similaire).

Conformément à cette question connexe de Stack Overflow vous pouvez placer la commande dans un fichier script dans votre répertoire d'origine et l'ajouter à votre fichier launchd pour rendre ce changement persistant.

Au cas où certains lecteurs ne seraient pas à l'aise pour faire cela par eux-mêmes, voici un script rapide qui le fait pour vous. Encore une fois, il suffit de copier/coller ceci à l'invite du Terminal.

mkdir -p ~/bin
printf '%s\n' '#!/bin/sh' \
    'hidutil property --set '"'"'{"UserKeyMapping":[{"HIDKeyboardModifierMappingSrc":0x700000064,"HIDKeyboardModifierMappingDst":0x700000029}]}'"'" \
    >~/bin/userkeymapping
chmod 755 ~/bin/userkeymapping
mkdir -p ~/Library/LaunchAgents
cat<<: >~/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 ~/Library/LaunchAgents/userkeymapping.plist

Evidemment, si vous vous retrouvez avec une autre clé que 0x700000064 vous devez changer cela dans le script, ou dans le fichier ~/bin/userkeymapping il finit par créer si vous avez déjà exécuté ce qui précède.

1 votes

Une version antérieure de cette réponse préconisait d'utiliser LoginHook mais ça ne marchait pas pour moi, et en se basant sur stackoverflow.com/a/22872222/874188 Je suis passé à un launchd à la place.

1 votes

En tant que fan inconditionnel de vi/vim, c'est précisément ce que je recherchais. Merci.

0 votes

I croire cela devrait fonctionner avec zsh aussi, mais je reste perplexe quant au fait qu'Apple ait adopté ce méchant shell par défaut pour les nouveaux utilisateurs.

16voto

jasonleonhard Points 297

Si tout ce que vous voulez faire est de remapper une seule touche

Exemple : Comment réaffecter la touche Echap sur Mac

  1. Allez dans le menu Apple et choisissez "Préférences système", puis allez à dans le panneau de préférences "Clavier" et choisissez l'onglet "Clavier".

  2. Cliquez sur le bouton "Touches de modification" dans le coin inférieur droit.

  3. Choisissez la touche que vous voulez remapper et modifiez-la pour qu'elle exécute la fonction Échappement : Verrouillage des majuscules (notre recommandation), Contrôle, Option ou Commande.

  4. Sélectionnez "Escape" dans la liste déroulante correspondant à la touche que vous voulez que vous souhaitez réaffecter en tant que touche d'échappement du matériel, puis cliquez sur "OK" pour définir la modification.

référence

7 votes

Cela ne vous donne le contrôle que sur les quatre clés qui sont énumérées dans cette réponse.

1 votes

Correct, et très utile. Si quelqu'un veut remapper des touches supplémentaires, pensez aux mousquetons.

1 votes

Il semble qu'il n'y ait aucun moyen de spécifier une clé spécifique, comme "droite", non plus. Le plus spécifique que vous pouvez obtenir est le signal, comme dans "any".

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X