DEV Community

Cover image for Como remapear teclas no Linux?
Natália Oliveira
Natália Oliveira

Posted on • Updated on

Como remapear teclas no Linux?

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:

$ setxkbmap -model abnt2 -layout br
Enter fullscreen mode Exit fullscreen mode

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:

$ xev
Enter fullscreen mode Exit fullscreen mode

O xev é um comando que printa o conteúdo de eventos. Você pode ler mais sobre a documentação do xev aqui.

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

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

$ xmodmap -pke
Enter fullscreen mode Exit fullscreen mode

O xmodmap é uma ferramenta para modificar o mapeamento de teclas 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.

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:

$ xmodmap -e "keycode 94 = backslash bar backslash bar masculine"
Enter fullscreen mode Exit fullscreen mode

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:

$ xmodmap -e "keycode 27 = r R r R bar"
Enter fullscreen mode Exit fullscreen mode

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

Alt Text

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:

$ cd ../../
$ cd usr/bin/
$ sudo vim remap27.sh
Enter fullscreen mode Exit fullscreen mode

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:

sleep 30 && xmodmap -e "keycode 27 = r R r R bar"
Enter fullscreen mode Exit fullscreen mode

Como explicado nessa respostas do StackExchange, 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:

$ chmod +x remap27.sh
Enter fullscreen mode Exit fullscreen mode

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
xev man page
xmodmap Ubuntu Manpage
Comunidade Hardware
StackExchange


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

Top comments (19)

Collapse
 
paikoala profile image
paikoala

O Tab do teclado do meu not estragou, estou usando o kali. Tentei fazer essa tecnica para colocar o Tab no CapsLock que não uso mas quando clico ele ativa os dois botões. Tentei deixar no comando que tanto o CL quanto o Tab fizessem a função do Tab mas mesmo assim qualdo clico ele muda a caixa da fonte e da um espaço no texto XD.
Mais uma duvida, no starup para que ele inicie sozinho tem como deixar para desde a tela de login, ou o minimo seria depois de logado? coloquei o temporalizador em 1 e assim que logo ele ja funciona ( os dois botões juntos ) mas queria ver se tem como deixar funcionando desde a tela de login.

Collapse
 
haglarrr profile image
Sparvöga

chmod: alterando permissões de 'remap135.sh': Operação não permitida
Alguem sabe como resolver?

Collapse
 
rafgam10 profile image
Rafael Timóteo Costa Oliveira

usar o "chmod 777 remap135.sh" ficar melhor

Collapse
 
mkyy profile image
mkyy

você precisa de permissões especiais, usa o sudo.

Collapse
 
m4rqu1nh0s profile image
M4rQu1Nh0S • Edited

Muito bom, eu tava com o mesmo problema pra poder usar a barra vertical "|" mas ainda estou em busca de criar um layout de verdade com as modificações, e parece que vou perder um tempinho pra conseguir isso.

Obrigado!

Collapse
 
mkyy profile image
mkyy

estava com o mesmo problema, com um teclado m-880 da AOES.
depois de uma hora ou duas pesquisando sobre configurações do linux, ou aplicativos de facil remapeamento, achei esse tópico, salvou minha vida, não estava conseguindo fazer "ou" || e é inviavel ficar usando o unicode toda hora.

Obrigado !!!

Collapse
 
mr_davidcarlos profile image
David Carlos

Muito bom, funcionou perfeitamente

Collapse
 
fmontoan profile image
fmontoan

Muito obrigado Natália, funcinou certinho.

Collapse
 
rafgam10 profile image
Rafael Timóteo Costa Oliveira

Natália, como faço para colocar o ' | ' no terminal tbm?? prf me ajudar!!! PRF ME AJUDAR!!!!

Collapse
 
erikgiovani profile image
Erik Giovani

À esquerda da tecla 1 há uma tecla, basta pressionar essa tecla, saudações e bem-vindo ao DEV 👋

Collapse
 
rafgam10 profile image
Rafael Timóteo Costa Oliveira

eu não entendi está tecla após a tecla 1 pode me explicar melhor?

Collapse
 
rafgam10 profile image
Rafael Timóteo Costa Oliveira

como eu faço para colocar o "|" no terminal?? tipo no arquio bashrc ou zshrc??

Collapse
 
alan1996colo profile image
Alan Echabarri

Gracias tu método me funcionó, genia!

Collapse
 
rafgam10 profile image
Rafael Timóteo Costa Oliveira

como eu faço para colocar o "|" no terminal?? tipo no arquio bashrc ou zshrc??

Collapse
 
flp2254 profile image
flp

sudo vim remap27.sh
Quando executo esse comando diz que "sudo 30" comando nao encontrado, alguem pode me ajudar

Collapse
 
armindu profile image
Armindu

Pode ser que o vim não está instalado, tenta instalar o vim

Collapse
 
rafgam10 profile image
Rafael Timóteo Costa Oliveira

Natália, como faço para colocar o ' | ' no terminal tbm prf me ajudar!!!

Collapse
 
thyagolucas profile image
Thyago Lucas

Natália do céu! Você me ajudou demais com esse artigo <3 \||| rs

Collapse
 
leomarccb profile image
leomar de Oliveira

salvou meu dia... me inscrevi aqui só pra agradecer...