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

Comandos para usar no terminal

sudo apt install xbindkeys x11-utils xdotool

Fedora

Comandos para usar no terminal

sudo dnf install xbindkeys xorg-x11-utils xdotool

openSUSE

Comandos para usar no terminal

sudo zypper install xbindkeys xev xdotool

Arch Linux ou Manjaro

Comandos para usar no terminal

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:

Comandos para usar no terminal

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:

Comandos para usar no terminal

$ 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):

Comandos para usar no terminal

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:

Comandos para usar no terminal

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 ):

Comandos para usar no terminal

"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:

Comandos para usar no terminal

"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:

Comandos para usar no terminal

"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:

Comandos para usar no terminal

"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:

Comandos para usar no terminal

"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:

Comandos para usar no terminal

"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:

Comandos para usar no terminal

xbindkeys

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

Comandos para usar no terminal

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:

Comandos para usar no terminal

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