Como vincular botões do mouse a teclas ou comandos do teclado (Linux usando X11)

22 de novembro de 2019

Se você tiver um mouse com botões extras, poderá vinculá-los para executar uma combinação de teclas, executar um programa, comando ou script. Isso só funcionará se você usar o X11 (não funciona no Wayland) porque as ferramentas que usaremos para isso suportam apenas o X11.

Para vincular os botões do mouse às combinações de teclas, usaremos as seguintes ferramentas:

  • xbindkeys: um programa que captura as teclas e eventos do botão do mouse no X e inicia o comando shell associado
  • xev: uma ferramenta que imprime o conteúdo dos eventos X
  • xdotool: ferramenta de automação de linha de comando X11 que permite que você simule programaticamente (ou manualmente) a entrada do teclado e a atividade do mouse (e mais)

Caso você não precise vincular os botões do mouse às teclas do teclado, e tudo o que deseja vincular aos botões do mouse são programas, comandos ou scripts, você pode pular a instalação do xdotool.

1. Instale xbindkeys, xev e xdotool

Debian, Ubuntu, Linux Mint, Pop!_OS, Elementary OS e outras distribuições Linux baseadas em Debian ou Ubuntu

{{ terminalcard('sudo apt install xbindkeys x11-utils xdotool') }}

Fedora

{{ terminalcard('sudo dnf install xbindkeys xorg-x11-utils xdotool') }}

openSUSE

{{ terminalcard('sudo zypper install xbindkeys xev xdotool') }}

Arch Linux ou Manjaro

{{ terminalcard('sudo pacman -S xbindkeys xorg-xev xdotool') }}

Em outras distribuições do Linux, você terá que pesquisar nos repositórios por xdotool, xev e xbindkeys e instalá-los.

2. Pegue os códigos do botão do mouse

Para obter o (s) código (s) do botão do mouse, execute este comando:

{{ terminalcard('xev | grep button') }}

Em seguida, focalize a pequena janela que aparece e observe a saída do terminal. Agora pressione o botão do mouse para o qual deseja obter o código. Após pressionar o botão você deverá ver seu código no terminal onde executou o xev, por exemplo:

{{ terminalcard('$ xev | grep button

state 0x10, button 8, same_screen YES') }}

Neste exemplo, o código do botão de que precisaremos mais tarde é 8.

3. Pegue as teclas que enviaremos mais tarde usando um botão do mouse

Pule essa etapa se você quiser vincular um comando/script/programa a um botão do mouse

Abra um terminal e execute este comando (via AskUbuntu):

{{ terminalcard('xev | sed -ne \'/^KeyPress/,/^$/p\'') }}

Mais uma vez, aparecerá uma pequena janela que você precisa focalizar. Em seguida, pressione as teclas do teclado que deseja remapear para o mouse, uma de cada vez, e observe a saída do comando xev no terminal.

Por exemplo, se você deseja vincular Ctrl + Alt + Up a um botão do mouse, pressione Ctrl, depois Alt e finalmente Up. No meu caso, esta é a saída de xev para essas três teclas pressionadas (a primeira é para Control_L ou a tecla Control esquerda, a o segundo para Alt_L ou Alt esquerdo, e o terceiro é para Up:

KeyPress event, serial 33, synthetic NO, window 0x2200001,
    root 0x1eb, subw 0x0, time 6741696, (46,-37), root:(728,598),
    state 0x10, keycode 37 (keysym 0xffe3, Control_L), same_screen YES,
    XLookupString gives 0 bytes: 
    XmbLookupString gives 0 bytes: 
    XFilterEvent returns: False

KeyPress event, serial 36, synthetic NO, window 0x2200001,
    root 0x1eb, subw 0x0, time 6743289, (46,-37), root:(728,598),
    state 0x10, keycode 64 (keysym 0xffe9, Alt_L), same_screen YES,
    XLookupString gives 0 bytes: 
    XmbLookupString gives 0 bytes: 
    XFilterEvent returns: False

KeyPress event, serial 36, synthetic NO, window 0x2200001,
    root 0x1eb, subw 0x0, time 6744780, (46,-37), root:(728,598),
    state 0x10, keycode 111 (keysym 0xff52, Up), same_screen YES,
    XLookupString gives 0 bytes: 
    XmbLookupString gives 0 bytes: 
    XFilterEvent returns: False

Anote o código da tecla, keysim ou nome da tecla. Você pode usar qualquer um dos 3, por exemplo, para a primeira chave acima, você pode usar 37, 0xffe3 ou Control_L. Neste artigo, usarei o nome da chave (por exemplo, Control_L para a tecla de controle esquerda), pois são mais fáceis de ler.

É importante notar que xbindkeys pode ser usado para capturar os códigos de tecla também (xbindkeys -k), mas ele lê todas as chaves ativas, então pode ser confuso em alguns casos, por exemplo, se você tem Caps_Lock ou Num_Lock ligado, etc., então eu pessoalmente prefiro usar o xev para esta tarefa.

Nem xed nem xbindkeys -k mostrarão os códigos de tecla/símbolos do teclado para teclas de multimídia. No caso de desejar remapear teclas multimídia para botões do mouse, você pode obter uma lista de tais símbolos de teclado visitando este link.

4. Crie a configuração xbindkeys (em ~/.xbindkeysrc)

Você pode criar um arquivo ~/.xbindkeysrc vazio ou gerar um arquivo de configuração de amostra usando este comando:

{{ terminalcard('xbindkeys -d > ~/.xbindkeysrc') }}

Em seguida, abra ~/.xbindkeysrc com seu editor de texto favorito. Observe que .xbindkeysrc é um arquivo oculto em seu diretório inicial, então você precisará pressionar Ctrl + h (para mostrar arquivos e pastas ocultos) para vê-lo em seu gerenciador de arquivos.

Para vincular um botão do mouse a uma combinação de teclas, cole o seguinte no final do arquivo ~/.xbindkeysrc (pode já conter algumas combinações de teclas, pode conter a configuração de amostra ou pode estar vazio - não importa ):

{{ terminalcard('"xdotool key \'KEY-COMBINATION\'"

   b:MOUSE-BUTTON-CODE') }}

Onde:

  • KEY-COMBINATION são os pressionamentos de tecla que você obteve na etapa 3 (separe as teclas com um sinal +)
  • MOUSE-BUTTON-CODE é o código do botão do mouse que você obteve na etapa 2

Exemplo:

{{ terminalcard('"xdotool key \'Control_L+Alt_L+Down\'"

   b:8') }}

Isso remapeia o botão 8 do mouse (que para o meu mouse é o botão que pode ser usado como um botão de voltar em um navegador da web, por exemplo) para Control_L+Alt_L+Down que no GNOME Shell é usado para alternar para a área de trabalho para baixo.

Para também remapear o botão de avanço do mouse (botão 9 do mouse no meu caso) para Control_L+Alt_L+Up (alternar para a área de trabalho no GNOME Shell), eu teria que adicionar isso ao arquivo ~/.xbindkeysrc:

{{ terminalcard('"xdotool key \'Control_L+Alt_L+Up\'"

   b:9') }}

Outro exemplo. Para vincular as teclas de mídia do teclado para aumentar e diminuir o volume aos botões 8 e 9 do mouse:

{{ terminalcard('"xdotool key \'XF86AudioRaiseVolume\'"

   b:9

"xdotool key \'XF86AudioLowerVolume\'"

   b:8') }}

Da mesma forma, adicione quantas combinações de teclas desejar, mas certifique-se de não usar algumas combinações de teclas já existentes.

Para vincular um comando, script ou programa a um botão do mouse, use isto no arquivo ~/.xbindkeysrc:

{{ terminalcard('"COMMAND"

   b:MOUSE-BUTTON-CODE') }}

Aqui:

  • COMMAND é um comando, script ou programa
  • MOUSE-BUTTON-CODE é o código do botão do mouse obtido na etapa 2

Exemplo para executar um programa usando um botão do mouse:

{{ terminalcard('"firefox"

   b:8') }}

Isso inicia o Firefox ao pressionar o botão 9 do mouse (que para o meu mouse é o botão que pode ser usado como um botão de voltar em um navegador da web, por exemplo).

5. Inicie o xbindkeys

Agora você pode iniciar o xbindkeys usando um terminal e digitando:

{{ terminalcard('xbindkeys') }}

No caso de xbindkeys estar em execução, você pode fazer com que ele use a nova configuração emitindo:

{{ terminalcard('xbindkeys --poll-rc') }}

Este comando falhou em alguns casos para mim quando mudei a configuração xbindkeys, não tenho certeza do porquê. Nesse caso, você pode reiniciá-lo eliminando o processo xbindkeys e executando-o novamente:

{{ terminalcard('killall xbindkeys

xbindkeys') }}

No Ubuntu, o xbindkeys é iniciado automaticamente na inicialização do sistema se encontrar um arquivo de configuração ~/.xbindkeysrc não vazio (ele precisa ter linhas sem comentários). Se a ferramenta não iniciar automaticamente para a distribuição Linux que você está usando, adicione xbindkeys aos seus programas de inicialização.

Esse post foi traduzido do site LinuxUprising.com pela rtland.team.

Linux Uprising Blog

Confira a versão original desse post em inglês:

How To Bind Mouse Buttons To Keyboard Keys Or Commands (Linux Using X11)
Propaganda
Propaganda