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 utilisé pour quoi que ce soit avant aujourd'hui - pour produire Esc.
hidutil property --set '{"UserKeyMapping":[{"HIDKeyboardModifierMappingSrc":0x700000064,"HIDKeyboardModifierMappingDst":0x700000029}]}'
Dans la documentation d'Apple (liée à la réponse de Steven), cela est étiqueté comme "Clavier non américain \ et |" (0x64).
Plusieurs des touches «non américaines» sont difficiles à découvrir car elles se réfèrent généralement à des touches qui ont une étiquette différente sur le clavier que vous utilisez. (J'ai également découvert que "Accent grave et tilde" se réfère à la touche entre le décalage gauche et z, qui sur mon clavier produit <. Je n'ai pas pu déterminer quelle touche correspond à "Non US #et ~" et je n'ai pas expérimenté davantage 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
Cela boucle sur les codes clés et change un à la fois, dans l'espoir que vous puissiez trouver par essais et erreurs une clé qui ne vous est pas particulièrement utile. Essayez de taper quelque chose quand il vous le demande - si vous obtenez un gau lieu de ce que vous attendiez, vous avez trouvé le bon code clé. (Passez 0x70000000aà autre chose si ce gn'est pas un choix pratique pour vous. Peut-être que vous voulez remapper la gclé?) Lorsque vous avez terminé de taper, appuyez simplement sur Entrée pour passer à la touche suivante.
Pour ce que ça vaut, la dernière commande dans la boucle est la façon dont vous zappez tous les UserKeyMappingparamètres:
hidutil property --set '{"UserKeyMapping":[{}]}'
Lorsque vous exécutez initialement, hidutil property --get UserKeyMappingil produit
(null)
mais il semble que vous ne puissiez pas réinjecter cette valeur pour zapper 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 forjusqu'à ce que donevotre bash$message ou similaire.)
Conformément à cette question relative au débordement de pile, vous pouvez placer la commande dans un fichier de script dans votre répertoire personnel et l'ajouter à votre launchdconfiguration pour rendre cette modification persistante.
Si certains lecteurs ne sont pas à l'aise de le faire par eux-mêmes, voici un script rapide qui le fait pour vous. Encore une fois, copiez / collez simplement cela à l'invite du terminal.
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
Évidemment, si vous vous retrouvez avec une autre clé que 0x700000064vous devez changer cela dans le script ou dans le fichier "$HOME"/bin/userkeymappingqu'il finit par créer si vous avez déjà exécuté ce qui précède.