Remapeando teclas

Se você usa um notebook, é bem provável que tenha vontade de trocar as funções de algumas das teclas do teclado. Em muitos notebooks da Acer, por exemplo, a tecla “/” é digitada pressionando “AltGr+Q” e a “?” pressionando “AltGr+W”, o que não é nada prático. Existem ainda casos em que alguma das teclas não é reconhecida pelo sistema, ou que você deseja desativar alguma tecla específica (como o CapsLock) para evitar toques acidentais. No Linux isso pode ser feito usando o xmodmap, um pequeno utilitário de linha de comando que permite definir funções e remapear as teclas.

O primeiro passo é descobrir os códigos das teclas que você deseja remapear. Para isso, abra um terminal e rode o comando “xev“. Ele abrirá uma pequena janela que monitorará os toques no teclado. Ao pressionar cada tecla, ele exibe um conjunto de informações sobre ela, como em:

KeyRelease event, serial 34, synthetic NO, window 0x4000001,
   root 0x4f, subw 0x0, time 170297154, (401,512), root:(404,537),
   state 0x0, keycode 117 (keysym 0xff67, Menu), same_screen YES,
   XLookupString gives 0 bytes:
   XFilterEvent returns: False

Entre todas as informações, o que interessa é o keycode da tecla, informado na terceira linha. No exemplo, pressionei a tecla menu (entre o AltGr e o Ctrl), que retorna o keycode 117.

Imagine que você tem um notebook Acer e deseja que ela assuma a função de tecla “/ ?” que não está presente no teclado. O comando seria:

$ xmodmap -e "keycode 117 = slash question"

Se você quisesse usar a tecla Windows (keycode 115), bastaria trocar o código da tecla ao executar o comando, como em:

$ xmodmap -e "keycode 115 = slash question"

Se o sistema não detectar a tecla “\ |” do teclado, o que é relativamente comum em teclados ABNT2, use o xev para verificar qual é o keycode da tecla (normalmente será o 94) e atribua a ele as teclas “backslash bar”, como em:

$ xmodmap -e "keycode 94 = backslash bar"

Você pode estar se perguntando como descobri que o “nome científico” da tecla é “backslash bar”. Na verdade é bem simples, basta ir em outro micro (onde a tecla seja reconhecida normalmente) e usar o xev para descobrir o nome correto do caracter para a tecla minúscula e para a maiúscula, que é também informado na terceira linha. No caso da tecla “~^”, por exemplo, você teria:

KeyPress event, serial 34, synthetic NO, window 0x4000001,
   root 0x4f, subw 0x0, time 172081108, (453,538), root:(456,563),
   state 0x0, keycode 48 (keysym 0xfe53, dead_tilde), same_screen YES,
   XLookupString gives 1 bytes: (7e) "~"
   XmbLookupString gives 0 bytes:
   XFilterEvent returns: True

KeyRelease event, serial 34, synthetic NO, window 0x4000001,
   root 0x4f, subw 0x0, time 172080489, (453,538), root:(456,563),
   state 0x4, keycode 48 (keysym 0xfe52, dead_circumflex), same_screen YES,
   XLookupString gives 1 bytes: (1e) ""
   XFilterEvent returns: False

Para remapear a tecla, bastaria informar o keycode da tecla que receberá as funções, como em:

$ xmodmap -e "keycode 48 = dead_tilde dead_circumflex"

O xmodmap pode ser usado para remapear qualquer outra tecla que eventualmente não seja reconhecida pelo sistema, o que você queira trocar de posição por comodidade.

Um bom exemplo é a tecla Caps_Lock, uma função pouco usada hoje em dia, que é basicamente usada apenas quando você quer dar a impressão de que está gritando. Alguns tem tamanha aversão à pobre tecla que chegam a arrancá-la do teclado.

Uma forma menos radical de se livrar dela é usar a função “remove lock = Caps_Lock” do xmodmap:

$ xmodmap -e "remove lock = Caps_Lock"

A partir daí, o Caps_Lock é desativado. Se quiser, você pode até mesmo atribuir outra função à tecla. Uma configuração comum é simplesmente fazer com que ela clone a função da tecla “A”, já que a maioria dos toques acidentais no Caps_Lock são destinados a ela. Para isso, o comando seria:

$ xmodmap -e "keycode 66 = a A"

Como de praxe, a configuração é perdida quando você reinicia o micro, ou faz logout. Para que ela se torne permanente, você tem basicamente duas opções. A primeira é simplesmente adicionar os comandos no final do arquivo “/etc/profile“. Isso fará com que eles sejam executados sempre que você abrir um terminal.

Para que eles sejam realmente executados logo que o KDE ou o GNOME é aberto, é necessário adicioná-los no final do arquivo “/etc/profile.d/kde4.sh” (para o KDE 4), “/etc/profile.d/kde.sh” (para o KDE 3) ou “/etc/profile.d/gconf.sh” (para o GNOME). Não preciso dizer que você deve ter cuidado ao editar estes arquivos, já que eles são essenciais para o carregamento do ambiente gráfico. Simplesmente adicione as linhas no final do arquivo correspondente, sem alterar as demais.

Se você passar a receber um erro como:

xmodmap: commandline:1: bad keysym in remove modifier list 'Caps_Lock',
no corresponding keycodes

… volte ao arquivo de configuração e adicione a linha:

xmodmap -e "keycode 66 = Caps_Lock"

… antes da linha: xmodmap -e “remove lock = Caps_Lock”. Isso faz com que a função da tecla seja re-atribuída antes de ser removida, evitando a exibição da mensagem de erro. Isso é necessário sempre que o comando é adicionado em um arquivo de inicialização que é executado mais de uma vez por sessão (como no caso do “/etc/profile”, que é executado toda vez que você abre um terminal). Um exemplo da configuração seria:

xmodmap -e "keycode 66 = Caps_Lock"
xmodmap -e "remove lock = Caps_Lock"
xmodmap -e "keycode 66 = a A"

Antigamente, esta configuração era colocada no arquivo “/etc/X11/xinit/xinitrc” ou no arquivo “Xmodmap”, dentro do home, mas eles caíram em desuso, já que não são mais executados por padrão nas distribuições atuais.

O xinitrc, por exemplo, é executado quando abrimos o ambiente gráfico usando o comando “startx”. Como nas distribuições atuais o ambiente gráfico é carregado a partir do GDM ou do KDM (os gerenciadores de login), ele acaba nunca sendo executado. Este é apenas um exemplo de como mesmo as configurações mais básicas podem mudar com o tempo, conforme novos softwares e novas camadas de componentes são introduzidos dentro do sistema. 

Sobre o Autor

Redes Sociais:

Deixe seu comentário

X