¿Cómo reasigno una tecla en macOS Sierra, por ejemplo, Right Alt a Right Control?

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

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

Respuestas (4)

La nota técnica TN2450 de Apple describe cómo reasignar 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 Alt derecho y el Control derecho. Ambos serán Right Control. Si tienes un MacBook, no lo notarás hasta que conectes 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 clave, debe orel valor hexadecimal de esa lista junto con 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
¡Genial gracias! ¿Hay alguna forma de restaurar las asignaciones a sus valores predeterminados con este comando?
@Cᴀʟʟᴏᴅᴀᴄɪᴛʏ para restablecer cualquier clave, simplemente ejecute el comando nuevamente con el valor de esa clave en ambos Srcy Dst.
Esto se revierte al reiniciar. Puedo volver a ejecutar este comando en cada inicio, pero prefiero no hacerlo. ¿Hay alguna manera de hacer que esto sea permanente?
@firebush Esta publicación sugiere usar un gancho de inicio de sesión para hacer que comandos como este sean persistentes: stackoverflow.com/a/46460200/629530
@StevenC.Howell ¿Qué hay de las combinaciones de modificadores de funciones? Por ejemplo, la barra inclinada hacia atrás \ en mi teclado es Shift+Option+7la que me gustaría reemplazar con algo más simple Option+.que casi no uso. ¿Cómo puedo hacer eso? Gracias por tu ayuda.
@StevenC.Howell, también estoy buscando una manera de reasignar una combinación de teclas a una sola tecla. En mi caso (en un español - ISO): ¡ (and ¿)to be fn+ Delete Forward. ¿Es eso posible?
@NanashiNoGombe No creo que esta instalación en particular funcione en ese nivel, esta es una utilidad de nivel bastante bajo para mapear teclas individuales en el teclado. No parece proporcionar ningún control sobre las combinaciones de teclas.
Intenté esto con códigos clave que obtuve de manytricks.com/keycodes . No funciona.
@Bachsau, pruebe los códigos clave de Tichnical Note, TN2450 .
@StevenC.Howell Desafortunadamente, esa lista está incompleta. Quiero reasignar la tecla de menú en un teclado de Windows para que funcione como una segunda tecla de comando.
@Bachsau, puede ser que el código clave para la tecla de menú sea otra cosa de esa referencia. Las notas técnicas hacen referencia a la Especificación de tablas de uso de USB HID, Sección 10 Teclado/Página de teclado, con un enlace roto. Encontré el pdf referenciado aquí . Tal vez ese documento tenga el código clave que está buscando.
En caso de que desee restaurar los valores predeterminados: ``` # establecerlo en 'null' no funciona en mi propiedad hidutil de MBP High Sierra --set '{"UserKeyMapping":[]}' ```
@Bachsau, creo que puede encontrar la clave que está buscando como "Aplicación de teclado - 0x65"
@Mandark ¡Eso funcionó! Gracias. Realmente debería haber mirado un poco más profundo en las especificaciones de HID y su denominación de claves.
Parece que esto no funcionará para mí: quiero que el botón ⏏ de mi teclado haga algo útil, pero no aparece en la documentación vinculada 😔
He estado asignando mi Bloqueo de mayúsculas a F10 en todas mis computadoras durante los últimos 10 años. En OS X/macOS, siempre he usado Karabiner para hacer esto. Pero siempre he encontrado que es una solución imperfecta, y he encontrado más y más problemas que causa Karabiner, a pesar de que es una pieza de software muy capaz por derecho propio. Finalmente, encontré esta solución y puedo reasignar algunas teclas (¡todo para lo que estaba usando Karabiner!) ¡Sin mantener nada ejecutándose en segundo plano!

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

Actualización rápida en Karabiner-Elements . Funciona en macOS High Sierra 10.13.3 (17D102) Cambié con éxito mis teclas Comando y Opción correctas.
Las aplicaciones de terceros nunca son "más generales". ¿Por qué alguien saturaría su sistema con aplicaciones que están integradas directamente en el sistema operativo?
@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 asignación compartida y/o dividida para cualquier teclado interno y externo.
@Bachsau Mantengo diferentes perfiles para cada uno de mis teclados, por lo que funcionan igual. muy buena aplicación
Fantástica aplicación. Funciona en Big Sur como un encanto.

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 tecla Esc, lo que es un hándicap importante para mí.

Descubrí que lo siguiente traducirá la tecla § (arriba a la izquierda, a la izquierda de 1 y arriba de la tecla de tabulación), que creo que nunca antes había usado para nada, 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 generalmente 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 la mayúscula y la z, que en mi teclado produce <. No pude establecer qué tecla corresponde a "Non-US #and ~" y no experimenté más una vez que encontré mi clave). Si desea experimentar, intente ejecutar el script en la 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 uno a la vez, con la esperanza de que pueda encontrar a través de prueba y error una clave que no sea particularmente útil para usted. Intenta escribir algo cuando te lo pida; si obtienes un gen lugar de lo que esperabas, has encontrado el código de tecla correcto. (Cambie 0x70000000aa otra cosa si gno es una opción conveniente para usted. ¿Tal vez quiera reasignar la gtecla?) Cuando termine de escribir, simplemente presione Entrar para pasar a la siguiente tecla.

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

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

Cuando lo ejecuta inicialmente hidutil property --get UserKeyMapping, produce

(null)

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

(Si no está familiarizado con la Terminal, simplemente copie/pegue la cosa desde forhasta doneque se le bash$ solicite o similar).

Según esta pregunta relacionada con el desbordamiento de pila , puede colocar el comando en un archivo de secuencia de comandos 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, simplemente copie / pegue esto en el indicador de la 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

Obviamente, si terminó con alguna otra clave que 0x700000064no sea, necesita cambiarla en el script, o en el archivo ~/bin/userkeymappingque termina creando si ya ejecutó lo anterior.

Una versión anterior de esta respuesta abogó por el uso LoginHook, pero no funcionó para mí, y en base a stackoverflow.com/a/22872222/874188 , cambié a un launchdenfoque en su lugar.
Como ferviente fanático de vi/vim, esto es precisamente lo que estaba buscando. Gracias.
Creo que esto también debería funcionar zsh, pero sigo desconcertado de que Apple haya cambiado a este malvado shell como predeterminado para los nuevos usuarios.

Si todo lo que quiere hacer es reasignar una sola tecla

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 tecla que desea reasignar como una tecla Escape de hardware y luego haga clic en "OK" para establecer el cambio

referencia

Esto solo le da control sobre las cuatro claves que se enumeran en esta respuesta.
Correcto y muy útil. Si alguien quiere reasignar teclas adicionales, considere el mosquetón
Parece que tampoco hay forma de especificar una tecla específica, como "derecha ⌥". Lo más específico que puede obtener es la señal, como en "cualquier ⌥".
Correcto, pero lo bueno es que no tienes que instalar nada, simplemente funciona.
Esta es una excelente respuesta porque la mayoría de las personas que buscan volver a vincular claves buscan volver a vincular esas claves específicas.