¿Cómo vuelvo a asignar una clave en macOS Sierra, por ejemplo, Alt derecho a Control derecho?

45

Solía ​​usar Karabiner para reasignar Right Alt a Right Control (como usuario de Emacs uso Control MUCHO más que Alt) pero actualizar a Sierra rompió esto. La degradación no es una opción.

¿Cómo vuelvo a asignar manualmente las claves en Sierra? Específicamente me gustaría reasignar Right Alt a Right Control.

Steven C. Howell
fuente

Respuestas:

40

La nota técnica de Apple TN2450 describe cómo reasignar las teclas. Ejecutar el siguiente comando reasignará Right Alt para que sea Right Control

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

Tenga en cuenta que el comando anterior no está cambiando el control Alt derecho y Control derecho. Ambos serán Control Correcto. Si tiene una MacBook, no lo notará hasta que conecte un teclado externo. Si desea cambiar Alt derecho y Control derecho, debe agregar un segundo comando de cambio, como el siguiente.

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

La tabla en la parte inferior de la Nota técnica tiene una lista de valores hexadecimales para cada clave. Para generalizar la respuesta anterior para cambiar cualquier tecla, debe orjunto con el valor hexadecimal de esa lista 0x700000000. El siguiente código de Python demuestra una forma de hacer esto.

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
fuente
¡Genial gracias! ¿Hay alguna forma de restaurar las asignaciones a sus valores predeterminados con este comando?
Aᴄʜᴇʀᴏɴғᴀɪʟ
1
@ Cᴀʟʟᴏᴅᴀᴄɪᴛʏ para restablecer cualquier tecla, simplemente ejecute el comando nuevamente con el valor de esa tecla en ambos Srcy Dst.
Steven C. Howell
Esto se revierte al reiniciar. Puedo volver a ejecutar este comando en cada arranque, pero prefiero no hacerlo. ¿Hay alguna manera de hacer esto permanente?
Firebush
2
@firebush Esta publicación sugiere usar un enlace de inicio de sesión para hacer que los comandos como este sean persistentes: stackoverflow.com/a/46460200/629530
firebush
1
@ StevenC.Howell ¿Qué hay de las combinaciones de modificadores de función? Por ejemplo, la barra invertida \ en mi teclado es la Shift+Option+7que me gustaría reemplazar con algo más simple como el Option+.que apenas uso. ¿Cómo puedo hacer eso? Gracias por tu ayuda.
Nanashi No Gombe
15

Un enfoque más general y fácil de usar es utilizar Karabiner-Elements , que es una versión de Karabiner que funciona en Sierra.

mikaraento
fuente
2
Actualización rápida sobre Karabiner-Elements . Funciona en macOS High Sierra 10.13.3 (17D102) Cambié con éxito mis teclas de comando y opción correctas.
Steve Clement
Las aplicaciones de terceros nunca son "más generales". ¿Por qué alguien desordenaría su sistema con aplicaciones que hacen cosas integradas en el sistema operativo?
Bachsau
1
@Bachsau es más general porque le permite hacer muchas otras cosas, por ejemplo, configurar combinaciones de teclas, macros y perfiles, o usar configuraciones de mapeo compartido y / o dividido para cualquier teclado interno y externo.
Janosch
@Bachsau Mantengo diferentes perfiles para cada uno de mis teclados, por lo que funcionan igual. Muy buena aplicación
AlexG
9

Esta es una adición a la respuesta de Steven C. Howell.

Tengo una nueva MacBook Pro con un teclado escandinavo. Este nuevo modelo ya no tiene una tecla Esc, lo cual es una desventaja importante para mí.

Descubrí que lo siguiente traducirá la tecla § (esquina superior izquierda, izquierda de la tecla 1 y superior), que no creo que haya usado para nada antes, para producir Esc.

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

En la documentación de Apple (vinculada desde la respuesta de Steven) esto está etiquetado como "Teclado no estadounidense \ y |" (0x64)

Varias de las teclas "no estadounidenses" son difíciles de descubrir porque normalmente se refieren a teclas que tienen una etiqueta diferente en el teclado que está utilizando. (También descubrí que "Acento grave y tilde" se refiere a la tecla entre desplazamiento a la izquierda y z, que produce en mi teclado <. No pude establecer qué tecla corresponde a "No estadounidense #y ~" y no experimenté más una vez que encontré mi clave.) Si desea experimentar, intente ejecutar el script en el terminal hasta que encuentre la clave que necesita:

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

Esto recorre los códigos clave y cambia de uno en uno, con la esperanza de que pueda encontrar mediante prueba y error una clave que no sea particularmente útil para usted. Intenta escribir algo cuando te lo pida; si obtienes uno en glugar de lo que esperabas, has encontrado el código de clave correcto. (Cambie 0x70000000aa otra cosa si gno es una opción conveniente para usted. ¿Quizás quiera reasignar la gclave?) Cuando termine de escribir, simplemente presione Intro para pasar a la siguiente clave.

Para lo que vale, el último comando dentro del bucle es cómo eliminar todas las UserKeyMappingconfiguraciones:

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

Cuando se ejecuta inicialmente hidutil property --get UserKeyMappingproduce

(null)

pero parece que no puede retroalimentar este valor para cambiar la configuración (o más bien, acepta pero ignora esta entrada).

(Si no está familiarizado con el terminal, simplemente copiar / pegar el asunto desde forhasta doneen su bash$pronta o similar).

Según esta pregunta relacionada con el desbordamiento de pila , puede colocar el comando en un archivo de script en su directorio de inicio y agregarlo a su launchdconfiguración para que este cambio sea persistente.

En caso de que algunos lectores no se sientan cómodos haciendo esto por su cuenta, aquí hay un script rápido que lo hace por usted. Nuevamente, solo copie / pegue esto en el indicador de 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

Obviamente, si terminó con alguna otra clave de la 0x700000064que necesita cambiar eso en el script, o en el archivo "$HOME"/bin/userkeymapping, termina creando si ya ejecutó lo anterior.

tripleee
fuente
Una versión anterior de esta respuesta abogaba por el uso, LoginHookpero no estaba funcionando para mí, y en base a stackoverflow.com/a/22872222/874188 cambié a un launchdenfoque en su lugar.
tripleee
Como fanático de vi / vim, esto es precisamente lo que estaba buscando. Gracias.
Philip Kearns
7

Si todo lo que quieres hacer es reasignar una sola clave

Ejemplo: Cómo reasignar la tecla Escape en Mac

  1. Vaya al menú  Apple y elija "Preferencias del sistema" y luego vaya al panel de preferencias "Teclado" y elija la pestaña "Teclado"

  2. Haga clic en el botón "Teclas modificadoras" en la esquina inferior derecha

  3. Elija la tecla que desea reasignar y modificar para realizar la función Escape: Bloqueo de mayúsculas (nuestra recomendación), Control, Opción o Comando
  4. Seleccione "Escape" de la lista desplegable correspondiente a la clave que desea reasignar como una clave de escape de hardware y luego haga clic en "Aceptar" para configurar el cambio

referencia

jasonleonhard
fuente
2
Esto solo le da control sobre las cuatro claves que se enumeran en esta respuesta.
Tripleee
Correcto y muy útil. Si alguien quiere reasignar claves adicionales, considere karabiner
jasonleonhard
Parece que tampoco hay forma de especificar una clave específica, como "right ⌥". Lo más específico que puede obtener es la señal, como en "cualquier ⌥".
Merchako
Correcto, pero lo bueno es que no tiene que instalar nada, simplemente funciona.
jasonleonhard
0

En caso de que desee restaurar los valores predeterminados:

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