Como configurar um teclado PC português para uso num mac

Este post vai ser escrito em português, visto que a audiência vai ser precisamente os utilizadores portugueses.

Num post da semana passada, escrito em inglês, dei conta das minhas dificuldades para configurar um teclado para PC para uso com um mac mini, correndo o Mac Os Ventura, e propus o uso do software HammerSpoon para resolver a situação. O problema é que o software exige quatro linhas de código para configurar uma tecla de cada vez, de forma que não é nada prática. Se bem que os casos concretos das teclas que vamos precisar de configurar correctamente não são muitos, a manutenção de código para uma tarefa que parece simples afugenta os utilizadores não versados em programação.

À procura de alternativas ao Hammerspoon, deparei-me com o Karabiner Elements, o qual através de uma interface de configuração simples, permite fazer a reconfiguração de várias teclas, como as teclas de função (F1-F12) e o óbvio remapeamento da tecla Command (maçã) para Controle. A aplicação ainda dispõe de uma ferramenta (Event Viewer) que permite testar as novas configurações. Para casos simples (mapear a tecla X para ter o efeito da tecla Y) o processo é bastante simples. O problema é quando quisemos usar combinações das teclas de estado (Shift, Alt(ou Option) ) com outras teclas para conseguir um efeito desejado (por exemplo, a tecla de multimédia Play, só disponível em certos teclados), aí a conversa é outra. As configurações complexas exigem a edição directa de um ficheiro em JSON para poderem ser obtidas. De qualquer forma, o programa é poderoso e permite fazer configurações juntando cliques do rato com as teclas de estado (Shift+Click,Command+Click) e obter a execução de programas com esses atalhos do teclado. Para quem não se sente à vontade em editar ficheiros JSON, pode visitar o catálogo de ficheiros de atalhos, onde pode obter eventuais ficheiros que lhe interessarem. Para o meu caso, o teclado que estou a usar não permitia ser configurado sem recorrer a qualquer item desse catálogo, de forma que dei mãos à tarefa de editar o JSON directamente para conseguir os resultados que desejava. Assim consegui pôr os acentos a funcionar, e colocar os símbolos de maior e menor do que a trabalhar. No entanto, a porca torceu o rabo quando cheguei às aspas angulares (« e »), chamadas [guillemets].
O Karabiner não suporta o output de caracteres que não estejam no teclado, pois o Karabiner usa o teclado dos EUA como referência base para fazer o mapeamento. Se algum caractere não estiver nesse teclado, não existe forma de pôr o Karabiner a fazer output dele. De forma que descobri a solução para o meu problema no Ukelele, que acaba por ser o mais simples de todos os softwares para reconfiguração de teclado, pois apresenta um diagrama do teclado directamente e permite remapear caracteres.
Deixo aqui o ficheiro do Karabiner Elements que permite utilizar um teclado de PC num Mac usando o Karabiner Elements. Para descarregar o ficheiro clique aqui.

{
    "global": {
        "ask_for_confirmation_before_quitting": true,
        "check_for_updates_on_startup": true,
        "show_in_menu_bar": true,
        "show_profile_name_in_menu_bar": false,
        "unsafe_ui": false
    },
    "profiles": [
        {
            "complex_modifications": {
                "parameters": {
                    "basic.simultaneous_threshold_milliseconds": 50,
                    "basic.to_delayed_action_delay_milliseconds": 500,
                    "basic.to_if_alone_timeout_milliseconds": 1000,
                    "basic.to_if_held_down_threshold_milliseconds": 500,
                    "mouse_motion_to_scroll.speed": 100
                },
                "rules": []
            },
            "devices": [
                {
                    "disable_built_in_keyboard_if_exists": false,
                    "fn_function_keys": [],
                    "identifiers": {
                        "is_keyboard": true,
                        "is_pointing_device": false,
                        "product_id": 2310,
                        "vendor_id": 1455
                    },
                    "ignore": false,
                    "manipulate_caps_lock_led": true,
                    "simple_modifications": [],
                    "treat_as_built_in_keyboard": false
                },
                {
                    "disable_built_in_keyboard_if_exists": false,
                    "fn_function_keys": [],
                    "identifiers": {
                        "is_keyboard": false,
                        "is_pointing_device": true,
                        "product_id": 2310,
                        "vendor_id": 1455
                    },
                    "ignore": true,
                    "manipulate_caps_lock_led": false,
                    "simple_modifications": [],
                    "treat_as_built_in_keyboard": false
                },
                {
                    "disable_built_in_keyboard_if_exists": false,
                    "fn_function_keys": [],
                    "identifiers": {
                        "is_keyboard": false,
                        "is_pointing_device": true,
                        "product_id": 13330,
                        "vendor_id": 14
                    },
                    "ignore": true,
                    "manipulate_caps_lock_led": false,
                    "simple_modifications": [],
                    "treat_as_built_in_keyboard": false
                },
                {
                    "disable_built_in_keyboard_if_exists": false,
                    "fn_function_keys": [],
                    "identifiers": {
                        "is_keyboard": true,
                        "is_pointing_device": false,
                        "product_id": 20480,
                        "vendor_id": 2821
                    },
                    "ignore": false,
                    "manipulate_caps_lock_led": true,
                    "simple_modifications": [],
                    "treat_as_built_in_keyboard": false
                }
            ],
            "fn_function_keys": [
                {
                    "from": {
                        "key_code": "f1"
                    },
                    "to": [
                        {
                            "consumer_key_code": "display_brightness_decrement"
                        }
                    ]
                },
                {
                    "from": {
                        "key_code": "f2"
                    },
                    "to": [
                        {
                            "consumer_key_code": "display_brightness_increment"
                        }
                    ]
                },
                {
                    "from": {
                        "key_code": "f3"
                    },
                    "to": [
                        {
                            "apple_vendor_keyboard_key_code": "mission_control"
                        }
                    ]
                },
                {
                    "from": {
                        "key_code": "f4"
                    },
                    "to": [
                        {
                            "apple_vendor_keyboard_key_code": "spotlight"
                        }
                    ]
                },
                {
                    "from": {
                        "key_code": "f5"
                    },
                    "to": [
                        {
                            "consumer_key_code": "dictation"
                        }
                    ]
                },
                {
                    "from": {
                        "key_code": "f6"
                    },
                    "to": [
                        {
                            "key_code": "f6"
                        }
                    ]
                },
                {
                    "from": {
                        "key_code": "f7"
                    },
                    "to": [
                        {
                            "consumer_key_code": "rewind"
                        }
                    ]
                },
                {
                    "from": {
                        "key_code": "f8"
                    },
                    "to": [
                        {
                            "consumer_key_code": "play_or_pause"
                        }
                    ]
                },
                {
                    "from": {
                        "key_code": "f9"
                    },
                    "to": [
                        {
                            "consumer_key_code": "fast_forward"
                        }
                    ]
                },
                {
                    "from": {
                        "key_code": "f10"
                    },
                    "to": [
                        {
                            "consumer_key_code": "mute"
                        }
                    ]
                },
                {
                    "from": {
                        "key_code": "f11"
                    },
                    "to": [
                        {
                            "consumer_key_code": "volume_decrement"
                        }
                    ]
                },
                {
                    "from": {
                        "key_code": "f12"
                    },
                    "to": [
                        {
                            "consumer_key_code": "volume_increment"
                        }
                    ]
                }
            ],
            "name": "Default profile",
            "parameters": {
                "delay_milliseconds_before_open_device": 1000
            },
            "selected": false,
            "simple_modifications": [],
            "virtual_hid_keyboard": {
                "country_code": 0,
                "indicate_sticky_modifier_keys_state": true,
                "mouse_key_xy_scale": 100
            }
        },
        {
            "complex_modifications": {
                "parameters": {
                    "basic.simultaneous_threshold_milliseconds": 50,
                    "basic.to_delayed_action_delay_milliseconds": 150,
                    "basic.to_if_alone_timeout_milliseconds": 500,
                    "basic.to_if_held_down_threshold_milliseconds": 500,
                    "mouse_motion_to_scroll.speed": 100
                },
                "rules": [
                    {
                        "description": "Brackets",
                        "manipulators": [
                            {
                                "from": {
                                    "key_code": "7",
                                    "modifiers": {
                                        "mandatory": [
                                            "right_option"
                                        ]
                                    }
                                },
                                "to": [
                                    {
                                        "key_code": "8",
                                        "modifiers": [
                                            "shift",
                                            "right_option"
                                        ]
                                    }
                                ],
                                "type": "basic"
                            },
                            {
                                "from": {
                                    "key_code": "0",
                                    "modifiers": {
                                        "mandatory": [
                                            "right_option"
                                        ]
                                    }
                                },
                                "to": [
                                    {
                                        "key_code": "9",
                                        "modifiers": [
                                            "shift",
                                            "right_option"
                                        ]
                                    }
                                ],
                                "type": "basic"
                            }
                        ]
                    },
                    {
                        "description": "Portuguese Accents",
                        "manipulators": [
                            {
                                "from": {
                                    "key_code": "backslash"
                                },
                                "to": [
                                    {
                                        "key_code": "quote"
                                    }
                                ],
                                "type": "basic"
                            },
                            {
                                "from": {
                                    "key_code": "backslash",
                                    "modifiers": {
                                        "mandatory": [
                                            "shift"
                                        ]
                                    }
                                },
                                "to": [
                                    {
                                        "key_code": "quote",
                                        "modifiers": [
                                            "shift"
                                        ]
                                    }
                                ],
                                "type": "basic"
                            }
                        ]
                    },
                    {
                        "description": "Portuguese Symbols",
                        "manipulators": [
                            {
                                "from": {
                                    "key_code": "quote"
                                },
                                "to": [
                                    {
                                        "key_code": "open_bracket"
                                    }
                                ],
                                "type": "basic"
                            },
                            {
                                "from": {
                                    "key_code": "quote",
                                    "modifiers": {
                                        "mandatory": [
                                            "shift"
                                        ]
                                    }
                                },
                                "to": [
                                    {
                                        "key_code": "open_bracket",
                                        "modifiers": [
                                            "shift"
                                        ]
                                    }
                                ],
                                "type": "basic"
                            },
                            {
                                "from": {
                                    "key_code": "open_bracket"
                                },
                                "to": [
                                    {
                                        "key_code": "equal_sign"
                                    }
                                ],
                                "type": "basic"
                            },
                            {
                                "from": {
                                    "key_code": "open_bracket",
                                    "modifiers": {
                                        "mandatory": [
                                            "shift"
                                        ]
                                    }
                                },
                                "to": [
                                    {
                                        "key_code": "equal_sign",
                                        "modifiers": [
                                            "shift"
                                        ]
                                    }
                                ],
                                "type": "basic"
                            },
                            {
                                "from": {
                                    "key_code": "non_us_backslash"
                                },
                                "to": [
                                    {
                                        "key_code": "grave_accent_and_tilde"
                                    }
                                ],
                                "type": "basic"
                            },
                            {
                                "from": {
                                    "key_code": "non_us_backslash",
                                    "modifiers": {
                                        "mandatory": [
                                            "shift"
                                        ]
                                    }
                                },
                                "to": [
                                    {
                                        "key_code": "grave_accent_and_tilde",
                                        "modifiers": [
                                            "shift"
                                        ]
                                    }
                                ],
                                "type": "basic"
                            },
                            {
                                "from": {
                                    "key_code": "grave_accent_and_tilde"
                                },
                                "to": [
                                    {
                                        "key_code": "backslash"
                                    }
                                ],
                                "type": "basic"
                            },
                            {
                                "from": {
                                    "key_code": "grave_accent_and_tilde",
                                    "modifiers": {
                                        "mandatory": [
                                            "shift"
                                        ]
                                    }
                                },
                                "to": [
                                    {
                                        "key_code": "backslash",
                                        "modifiers": [
                                            "shift"
                                        ]
                                    }
                                ],
                                "type": "basic"
                            }
                        ]
                    },
                    {
                        "description": "Modifier keys change",
                        "manipulators": [
                            {
                                "from": {
                                    "key_code": "left_option",
                                    "modifiers": {
                                        "mandatory": [
                                            "left_command"
                                        ]
                                    }
                                },
                                "to": [
                                    {
                                        "key_code": "left_control",
                                        "modifiers": [
                                            "any"
                                        ]
                                    }
                                ],
                                "type": "basic"
                            },
                            {
                                "from": {
                                    "key_code": "left_command",
                                    "modifiers": {
                                        "mandatory": [
                                            "left_shift"
                                        ]
                                    }
                                },
                                "to": [
                                    {
                                        "key_code": "fn",
                                        "modifiers": [
                                            "any"
                                        ]
                                    }
                                ],
                                "type": "basic"
                            }
                        ]
                    },
                    {
                        "description": "exchange tilde with backslash",
                        "manipulators": [
                            {
                                "from": {
                                    "key_code": "non_us_backslash"
                                },
                                "to": [
                                    {
                                        "key_code": "grave_accent_and_tilde"
                                    }
                                ],
                                "type": "basic"
                            },
                            {
                                "from": {
                                    "key_code": "non_us_backslash",
                                    "modifiers": {
                                        "mandatory": [
                                            "shift"
                                        ]
                                    }
                                },
                                "to": [
                                    {
                                        "key_code": "grave_accent_and_tilde",
                                        "modifiers": [
                                            "shift"
                                        ]
                                    }
                                ],
                                "type": "basic"
                            }
                        ]
                    },
                    {
                        "description": "f5 for screenshot",
                        "manipulators": [
                            {
                                "from": {
                                    "key_code": "f5"
                                },
                                "to": [
                                    {
                                        "key_code": "3",
                                        "modifiers": [
                                            "command",
                                            "shift"
                                        ]
                                    }
                                ],
                                "type": "basic"
                            }
                        ]
                    },

                {
                    "description": "Lock key for windows",
                    "manipulators": [
                        {
                            "from": 
                                {
                                    "key_code": "l",
                                    "modifiers": [
                                        "left_command"
                                    ]
                                },

                            "to": [ {
                                "key_code":"q",
                                "modifiers": [
                                    "command","control"
                                ]
                            }]
                        }
                    ]
                },

                    {
                        "description": "Option+Backtick to Command+Backtick",
                        "manipulators": [
                            {
                                "from": {
                                    "key_code": "grave_accent_and_tilde",
                                    "modifiers": {
                                        "mandatory": [
                                            "left_option"
                                        ],
                                        "optional": [
                                            "any"
                                        ]
                                    }
                                },
                                "to": [
                                    {
                                        "key_code": "grave_accent_and_tilde",
                                        "modifiers": "command"
                                    }
                                ],
                                "type": "basic"
                            },
                            {
                                "from": {
                                    "key_code": "grave_accent_and_tilde",
                                    "modifiers": {
                                        "mandatory": [
                                            "right_option"
                                        ],
                                        "optional": [
                                            "any"
                                        ]
                                    }
                                },
                                "to": [
                                    {
                                        "key_code": "grave_accent_and_tilde",
                                        "modifiers": "command"
                                    }
                                ],
                                "type": "basic"
                            }
                        ]
                    },
                    {
                        "description": "Option+Tab to Command+Tab",
                        "manipulators": [
                            {
                                "from": {
                                    "key_code": "tab",
                                    "modifiers": {
                                        "mandatory": [
                                            "left_option"
                                        ],
                                        "optional": [
                                            "any"
                                        ]
                                    }
                                },
                                "to": [
                                    {
                                        "key_code": "tab",
                                        "modifiers": "command"
                                    }
                                ],
                                "type": "basic"
                            },
                            {
                                "from": {
                                    "key_code": "tab",
                                    "modifiers": {
                                        "mandatory": [
                                            "right_option"
                                        ],
                                        "optional": [
                                            "any"
                                        ]
                                    }
                                },
                                "to": [
                                    {
                                        "key_code": "tab",
                                        "modifiers": "command"
                                    }
                                ],
                                "type": "basic"
                            }
                        ]
                    }
                ]
            },
            "devices": [
                {
                    "disable_built_in_keyboard_if_exists": false,
                    "fn_function_keys": [],
                    "identifiers": {
                        "is_keyboard": true,
                        "is_pointing_device": false,
                        "product_id": 2310,
                        "vendor_id": 1455
                    },
                    "ignore": false,
                    "manipulate_caps_lock_led": true,
                    "simple_modifications": [],
                    "treat_as_built_in_keyboard": false
                },
                {
                    "disable_built_in_keyboard_if_exists": false,
                    "fn_function_keys": [],
                    "identifiers": {
                        "is_keyboard": false,
                        "is_pointing_device": true,
                        "product_id": 2310,
                        "vendor_id": 1455
                    },
                    "ignore": true,
                    "manipulate_caps_lock_led": false,
                    "simple_modifications": [],
                    "treat_as_built_in_keyboard": false
                },
                {
                    "disable_built_in_keyboard_if_exists": false,
                    "fn_function_keys": [
                        {
                            "from": {
                                "key_code": "f1"
                            },
                            "to": [
                                {
                                    "software_function": {
                                        "iokit_power_management_sleep_system": {}
                                    }
                                }
                            ]
                        },
                        {
                            "from": {
                                "key_code": "f2"
                            },
                            "to": [
                                {
                                    "key_code": "f2"
                                }
                            ]
                        },
                        {
                            "from": {
                                "key_code": "f3"
                            },
                            "to": [
                                {
                                    "apple_vendor_keyboard_key_code": "mission_control"
                                }
                            ]
                        },
                        {
                            "from": {
                                "key_code": "f4"
                            },
                            "to": [
                                {
                                    "apple_vendor_keyboard_key_code": "spotlight"
                                }
                            ]
                        },
                        {
                            "from": {
                                "key_code": "f5"
                            },
                            "to": [
                                {
                                    "key_code": "f5"
                                }
                            ]
                        },
                        {
                            "from": {
                                "key_code": "f6"
                            },
                            "to": [
                                {
                                    "consumer_key_code": "rewind"
                                }
                            ]
                        },
                        {
                            "from": {
                                "key_code": "f7"
                            },
                            "to": [
                                {
                                    "consumer_key_code": "play_or_pause"
                                }
                            ]
                        },
                        {
                            "from": {
                                "key_code": "f8"
                            },
                            "to": [
                                {
                                    "consumer_key_code": "fast_forward"
                                }
                            ]
                        },
                        {
                            "from": {
                                "key_code": "f9"
                            },
                            "to": [
                                {
                                    "consumer_key_code": "mute"
                                }
                            ]
                        },
                        {
                            "from": {
                                "key_code": "f10"
                            },
                            "to": [
                                {
                                    "consumer_key_code": "volume_decrement"
                                }
                            ]
                        },
                        {
                            "from": {
                                "key_code": "f11"
                            },
                            "to": [
                                {
                                    "consumer_key_code": "volume_increment"
                                }
                            ]
                        },
                        {
                            "from": {
                                "key_code": "f12"
                            },
                            "to": [
                                {
                                    "apple_vendor_keyboard_key_code": "launchpad"
                                }
                            ]
                        }
                    ],
                    "identifiers": {
                        "is_keyboard": true,
                        "is_pointing_device": false,
                        "product_id": 20480,
                        "vendor_id": 2821
                    },
                    "ignore": false,
                    "manipulate_caps_lock_led": true,
                    "simple_modifications": [
                        {
                            "from": {
                                "apple_vendor_top_case_key_code": "keyboard_fn"
                            },
                            "to": [
                                {
                                    "apple_vendor_top_case_key_code": "keyboard_fn"
                                }
                            ]
                        },
                        {
                            "from": {
                                "consumer_key_code": "ac_home"
                            },
                            "to": [
                                {
                                    "key_code": "left_option"
                                }
                            ]
                        },
                        {
                            "from": {
                                "key_code": "application"
                            },
                            "to": [
                                {
                                    "pointing_button": "button2"
                                }
                            ]
                        },
                        {
                            "from": {
                                "key_code": "left_control"
                            },
                            "to": [
                                {
                                    "key_code": "left_command"
                                }
                            ]
                        }
                    ],
                    "treat_as_built_in_keyboard": false
                },
                {
                    "disable_built_in_keyboard_if_exists": false,
                    "fn_function_keys": [],
                    "identifiers": {
                        "is_keyboard": false,
                        "is_pointing_device": true,
                        "product_id": 13330,
                        "vendor_id": 14
                    },
                    "ignore": true,
                    "manipulate_caps_lock_led": false,
                    "simple_modifications": [],
                    "treat_as_built_in_keyboard": false
                }
            ],
            "fn_function_keys": [
                {
                    "from": {
                        "key_code": "f1"
                    },
                    "to": [
                        {
                            "consumer_key_code": "display_brightness_decrement"
                        }
                    ]
                },
                {
                    "from": {
                        "key_code": "f2"
                    },
                    "to": [
                        {
                            "consumer_key_code": "display_brightness_increment"
                        }
                    ]
                },
                {
                    "from": {
                        "key_code": "f3"
                    },
                    "to": [
                        {
                            "apple_vendor_keyboard_key_code": "mission_control"
                        }
                    ]
                },
                {
                    "from": {
                        "key_code": "f4"
                    },
                    "to": [
                        {
                            "apple_vendor_keyboard_key_code": "spotlight"
                        }
                    ]
                },
                {
                    "from": {
                        "key_code": "f5"
                    },
                    "to": [
                        {
                            "consumer_key_code": "dictation"
                        }
                    ]
                },
                {
                    "from": {
                        "key_code": "f6"
                    },
                    "to": [
                        {
                            "key_code": "f6"
                        }
                    ]
                },
                {
                    "from": {
                        "key_code": "f7"
                    },
                    "to": [
                        {
                            "consumer_key_code": "rewind"
                        }
                    ]
                },
                {
                    "from": {
                        "key_code": "f8"
                    },
                    "to": [
                        {
                            "consumer_key_code": "play_or_pause"
                        }
                    ]
                },
                {
                    "from": {
                        "key_code": "f9"
                    },
                    "to": [
                        {
                            "consumer_key_code": "fast_forward"
                        }
                    ]
                },
                {
                    "from": {
                        "key_code": "f10"
                    },
                    "to": [
                        {
                            "consumer_key_code": "mute"
                        }
                    ]
                },
                {
                    "from": {
                        "key_code": "f11"
                    },
                    "to": [
                        {
                            "consumer_key_code": "volume_decrement"
                        }
                    ]
                },
                {
                    "from": {
                        "key_code": "f12"
                    },
                    "to": [
                        {
                            "consumer_key_code": "volume_increment"
                        }
                    ]
                }
            ],
            "name": "Default",
            "parameters": {
                "delay_milliseconds_before_open_device": 1000
            },
            "selected": true,
            "simple_modifications": [],
            "virtual_hid_keyboard": {
                "country_code": 0,
                "indicate_sticky_modifier_keys_state": true,
                "mouse_key_xy_scale": 100
            }
        }
    ]
}

Posted

in

by

Tags: