Como remapear teclas no Linux?
Tags: ubuntu, linux, sistemasoperacionais, portugues
Published: 2020-10-07 14:34:24

---
title: Como remapear teclas no Linux?
published: true
description: Remapeando e persistindo configuração de teclas com xmodmap no Linux
tags: ubuntu, linux, sistemasoperacionais, portugues
cover_image: https://images.unsplash.com/photo-1529236183275-4fdcf2bc987e?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=1047&q=80
---
Comprei um teclado simples esse ano, mas logo notei alguns diferenças da foto que tinha no site.

Não havia algumas teclas, como o __Print screen__ e o __F11__. Testei combinações das teclas com __`Shift`__, __`Ctrl`__ e __`AltGr`__ para ver o que acontecia e não encontrei o __`|`__ (pipe), por exemplo.

Algumas pesquisas na internet me retornaram a seguinte opção: __setar o layout para o padrão ABNT2__:

```bash
$ setxkbmap -model abnt2 -layout br
 ```

Ainda assim algumas coisas não funcionaram, mas pode ser que o comando funcione para você. Pois bem.

Para suprir minha necessidade do F11, fui em “Settings” no Ubuntu, depois em “Keyboard shortcuts” e procurei pelo *fullscreen*. Setei para `Alt + Super + F`, no meu caso, sendo o super aquele símbolo do Windows. Após isso, procurei pelo *print* e setei para `Alt + Super + P`. Pronto, parte do problema resolvido.

Para resolver o problema do pipe precisei pesquisar um pouco mais, já que não o encontrei ao testar algumas combinações. Foi aí que me deparei com perguntas e respostas sobre __como remapear teclas__, pois até então só tinha pesquisado na linha __”configurar teclado padrão americano”__ ou __“meu teclado não tem tecla x”__.

Ao pressionar uma tecla o sistema operacional irá identificar o código que foi disparado e vai interpretar esse código para devolver no output o esperado. Para entender quais códigos estão sendo disparados, digite o seguinte:

```bash
$ xev
 ```

O __`xev`__ é um comando que printa o conteúdo de eventos. Você pode ler mais sobre a [documentação do `xev` aqui](https://www.commandlinux.com/man-page/man1/xev.1.html). 

Assim que você der um enter, o `xev` irá abrir uma janelinha e ficar esperando as suas ações. Dei um print da tela com o já setado comando `Alt + Super + P`, com a janelinha aberta, e o terminal me mostrou o seguinte:

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/rb1hcyjgeuoonz2zvsmf.png)

Certo. Fiquei me perguntando onde poderia encontrar uma lista completa com essas `keycode` que apareceram, então encontrei o seguinte comando:

```bash
$ xmodmap -pke
 ```

O [`xmodmap` é uma ferramenta para modificar o mapeamento de teclas](http://manpages.ubuntu.com/manpages/trusty/man1/xmodmap.1.html) e o comando acima indica que o atual layout de teclas deve ser printado na tela. 

Testando os eventos com o `xev` vi que `AltGr + R` resultava em ®, símbolo de *registered trademark*, sendo o `keycode = 27`. Esse símbolo não tem utilidade para mim, por isso o escolhi para substituir pelo pipe.

Cheguei a ver algumas teclas que começavam com “dead_” e fiquei curiosa para saber o que era. Se quiser ver uma tabela com esses codinomes e seus significados, dê uma olhada no [The Gtk Dead Key Compose Table](https://help.ubuntu.com/community/GtkDeadKeyTable).

## Comando para remapear teclas

Até aí eu havia disparado o evento para ver rapidamente o código e tinha verificado quais outros símbolos a tecla que eu queria mudar continha, mas ainda precisava do comando para modificar a tecla. Então encontrei um exemplo de comando:

```bash
$ xmodmap -e "keycode 94 = backslash bar backslash bar masculine"
```

Esse comando está modificando o `keycode = 94`, onde temos barra invertida (backslash), pipe (bar) e o símbolo º (masculine). Eles estão em sequência devido ao `Shift`, `Ctrl`, `AltGr` e por aí vai que podemos combinar para alcançar outras camadas além da tecla sozinha.  

No meu caso, o `keycode = 27` mostrava `r R r R registered`. Para modificar a tecla que eu queria, bastou fazer o seguinte:

```bash
$ xmodmap -e "keycode 27 = r R r R bar"
```

Pronto, meu `xmodmap -pke` ficou com essa configuração no `keycode = 27`:

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/kbv2rfm5dgfml4r464f5.png)

Fiz o teste com a tecla e estava funcionando corretamente.

## Como persistir a configuração do teclado

A configuração de remapear as teclas não permanece na próxima sessão, o que significa que se você desligar o computador irá perder o remapeamento que fez. 

Para persistir sua configuração você pode adicionar a linha de modificação no seu `.bashrc`, porém, isso só terá efeito se você abrir o terminal primeiro sempre que ligar o computador. Se você quiser __persistir o remapeamento da tecla automaticamente ao iniciar__, faça o seguinte no seu terminal:

```bash
$ cd ../../
$ cd usr/bin/
$ sudo vim remap27.sh
```

Acabamos de criar um arquivo de shell, e no `remap27.sh` você pode botar o nome que desejar. No `vim`, adicione um tempo (contado em segundos) para a aplicação esperar ao ligar o computador e adicione o comando na primeira linha, depois salve e saia:

```bash
sleep 30 && xmodmap -e "keycode 27 = r R r R bar"
```

Como explicado [nessa respostas do StackExchange](https://askubuntu.com/questions/708012/startup-applications-not-working), esses comandos de teclado necessitam que o desktop esteja totalmente carregado, e com frequência podem rodar muito cedo quando você estiver inicializando a máquina e quebrar. A não ser que você tenha um SSD.

De volta ao terminal, dê permissão para executar o script:

```bash
$ chmod +x remap27.sh
```

Agora os últimos passos:

1. Abra o “Startup applications” do Ubuntu
2. Clique em “Add”
3. Dê um nome a configuração, como “Remap key [número da key que você mudou]”
4. Na parte do “Command”, digite a localização do script do comando, no meu exemplo: `/usr/bin/remap27.sh`
5. Salve
6. Fecha a janela e reinicie o computador

Pronto. Toda vez que você ligar seu pc ele irá inicializar automaticamente com essa configuração de teclado remapeado. 

---
_Fontes_:
[Viva o Linux](https://www.vivaolinux.com.br/topico/vivaolinux/Configurar-Teclado-para-ABNT2-Ubuntu-1404)
[xev man page](https://www.commandlinux.com/man-page/man1/xev.1.html)
[xmodmap Ubuntu Manpage](http://manpages.ubuntu.com/manpages/trusty/man1/xmodmap.1.html)
[Comunidade Hardware](https://www.hardware.com.br/comunidade/teclado-pipe/1006212/)
[StackExchange](https://askubuntu.com/questions/708012/startup-applications-not-working)

---
_Esse texto não tem intenção de esgotar o tema. Acrescente nos comentários, e também aponte erros quando os identificar._