A veces necesitamos que una tecla física de nuestro ordenador Mac funcione como otra tecla. Esto suele ser habitual cuando utilizamos aplicaciones de virtualización o emulación de otros sistemas operativos o cuando nuestro teclado tiene problemas físicos. Aunque existen algunas aplicaciones para remapear el teclado en Mac estas aplicaciones pueden que no sean confiables o accesibles. Una de las bondades de MacOS es la posibilidad de realizar una operación de muy diversas formas, podemos hacer esto gracias a comandos de la Terminal de nuestro equipo Apple sin necesidad de instalar ninguna otra aplicación.
El comando hidutil
El comando hidutil nos permite, entre otras cosas, remapear las teclas físicas asignando la función de otra tecla.
Para realizar estos cambios el comando hidutil reescribe valores de un diccionario indicando el nuevo valor para una clave determinada.
Se debe utilizar desde la Terminal de Mac y su sintaxis no es demasiado compleja.
hidutil property --set '{"Nombre del diccionario a modificar":
[{"nombre de la clave origen":Valor del elemento,
"Clave a modificar":Nuevo valor}]
}'
Comprobando si ya tenemos alguna tecla remapeada
El propio comando hidutil nos permite saber qué asignaciones o remapeados se han realizado. Si en la Terminal escribimos el siguiente comando y no se nos devuelve NULL se nos listarán los distintos cambios realizados con este comando:
hidutil property --get "UserKeyMapping"
Cambiando nuestro teclado
El nombre del diccionario que debemos modificar es UserKeyMapping
Hay que tener en cuenta que el valor para la clave HIDKeyboardModifierMappingSrc debe ser el de la tecla de origen o tecla que vamos a cambiar y el la clave para la tecla con la que sustituiremos la tecla de origen es HIDKeyboardModifierMappingDstKey
El comando sería algo como:
hidutil property --set '{"UserKeyMapping":
[{"HIDKeyboardModifierMappingSrc":id de la tecla a cambiar,
"HIDKeyboardModifierMappingDst":id de la tecla final}]
}'
Por ejemplo, si quisiesemos remapear la tecla de bloqueo de mayúsculas (Caps lock) deberíamos utilizar el id 0x39 y sustituirlo por la tecla Insert cuyo código es 0x49 quedando nuestro ejemplo de la siguiente forma:
hidutil property --set '{"UserKeyMapping":
[{"HIDKeyboardModifierMappingSrc":0x700000039,
"HIDKeyboardModifierMappingDst":0x700000049}]
}'
Con este cambio ya no tendríamos que utilizar los menús de remapeo de aplicaciones de virtualización como VirtualBox o VMWare que resultan poco accesibles y podríamos virtualizar un sistema operativo Windows o Linux con la tecla Insert en lugar de la tecla de bloqueo de mayúsculas dejando libre acceso al teclado habitual de lectores de pantallas.
Problemas con el comando hidutil
El problema con el uso del comando hidutil es que el cambio no es permanente. Si reiniciamos o apagamos nuestro equipo Mac deberemos realizar el remapeo de nuevo al volver a encender nuestro equipo.
Una forma de solucionarlo es crearnos un script de AppleScript que ejecute de forma rápida el comando de Terminal para activar el remapeo deseado.
Tabla de valores
A continuación está el listado de teclas con sus correspondientes valores ID.
Tecla | Id (hex) | Tecla | Id (hex) | Tecla | Id (hex) | Tecla | Id (hex) |
---|---|---|---|---|---|---|---|
a / A | 0x04 | 5 / % | 0x22 | F7 | 0x40 | Keypad 6 / Right Arrow | 0x5E |
b / B | 0x05 | 6 / ^ | 0x23 | F8 | 0x41 | Keypad 7 / Home | 0x5F |
c / C | 0x06 | 7 / & | 0x24 | F9 | 0x42 | Keypad 8 / Up Arrow | 0x60 |
d / D | 0x07 | 8 / * | 0x25 | F10 | 0x43 | Keypad 9 / Page Up | 0x61 |
e / E | 0x08 | 9 / ( | 0x26 | F11 | 0x44 | Keypad 0 / Insert | 0x62 |
f / F | 0x09 | 0 / ) | 0x27 | F12 | 0x45 | Keypad . / Delete | 0x63 |
g / G | 0x0A | Return (Enter) | 0x28 | Print Screen | 0x46 | Non-US \ / | | 0x64 |
h / H | 0x0B | Escape | 0x29 | Scroll Lock | 0x47 | Application | 0x65 |
i / I | 0x0C | Delete (Backspace) | 0x2A | Pause | 0x48 | Power | 0x66 |
j / J | 0x0D | Tab | 0x2B | Insert | 0x49 | Keypad = | 0x67 |
k / K | 0x0E | Spacebar | 0x2C | Home | 0x4A | F13 | 0x68 |
l / L | 0x0F | – / _ | 0x2D | Page Up | 0x4B | F14 | 0x69 |
m / M | 0x10 | = / + | 0x2E | Delete Forward | 0x4C | F15 | 0x6A |
n / N | 0x11 | [ / { | 0x2F | End | 0x4D | F16 | 0x6B |
o / O | 0x12 | ] / } | 0x30 | Page Down | 0x4E | F17 | 0x6C |
p / P | 0x13 | \ / | | 0x31 | Right Arrow | 0x4F | F18 | 0x6D |
q / Q | 0x14 | Non-US # / ~ | 0x32 | Left Arrow | 0x50 | F19 | 0x6E |
r / R | 0x15 | ; / : | 0x33 | Down Arrow | 0x51 | F20 | 0x6F |
s / S | 0x16 | ‘ / » | 0x34 | Up Arrow | 0x52 | F21 | 0x70 |
t / T | 0x17 | Grave Accent / Tilde | 0x35 | Keypad Num Lock / Clear | 0x53 | F22 | 0x71 |
u / U | 0x18 | , / «<» | 0x36 | Keypad / | 0x54 | F23 | 0x72 |
v / V | 0x19 | . / «>» | 0x37 | Keypad * | 0x55 | F24 | 0x73 |
w / W | 0x1A | / / ? | 0x38 | Keypad – | 0x56 | Left Control | 0xE0 |
x / X | 0x1B | Caps Lock | 0x39 | Keypad + | 0x57 | Left Shift | 0xE1 |
y / Y | 0x1C | F1 | 0x3A | Keypad Enter | 0x58 | Left Alt | 0xE2 |
z / Z | 0x1D | F2 | 0x3B | Keypad 1 / End | 0x59 | Left GUI | 0xE3 |
1 / ! | 0x1E | F3 | 0x3C | Keypad 2 / Down Arrow | 0x5A | Right Control | 0xE4 |
2 / @ | 0x1F | F4 | 0x3D | Keypad 3 / Page Down | 0x5B | Right Shift | 0xE5 |
3 / # | 0x20 | F5 | 0x3E | Keypad 4 / Left Arrow | 0x5C | Right Alt | 0xE6 |
4 / $ | 0x21 | F6 | 0x3F | Keypad 5 | 0x5D | Right GUI | 0xE7 |