ButtonMapping - Parâmetros posicionais

11

Em um arquivo de configuração X, os botões do mouse podem ser mapeados usando uma opção ButtonMapping:

Section "InputClass"
    # ...
    Option "ButtonMapping" "1 9 3 4 5 6 7 8 2"
    # ...
EndSection

Alterar a ordem dos números altera o comportamento dos botões do mouse. No entanto, não consigo encontrar nenhuma documentação que descreva como o comportamento é atribuído. Que pouca documentação existe, ajudei a escrever.

Por exemplo, se o mapeamento de botão foi escrito assim:

    Option "ButtonMapping" "a b c d e f g h i"

Documentaríamos essas posições como:

  • a - Clique esquerdo
  • b - Médio
  • c - Clique com o botão direito
  • d - Rolar para frente
  • e - Rolar para trás
  • f - Avançar
  • g - Para trás
  • h - Rolagem horizontal
  • i - Rolagem vertical

Minha pergunta então: o que os valores posicionais de a até eu realmente representam e como eles são mapeados para os botões do mouse?

Atualizar

xmodmap -ppShows em execução :

$ xmodmap -pp
There are 10 pointer buttons defined.

    Physical        Button
     Button          Code
        1              1
        2              2
        3              3
        4              4
        5              5
        6              6
        7              7
        8              8
        9              9
       10             10

Isso não é útil, pois não contém informações que um ser humano possa usar sobre os atributos físicos do mouse (ou seja, mostrar duas colunas de números é inútil sem nomes de botões, como "botão esquerdo"). Portanto, embora tecnicamente isso possa responder à questão de "como eles são mapeados", a questão permanece sem resposta em qualquer sentido prático.

Dave Jarvis
fonte
AFAICG, os valores são os números dos botões, conforme relatado pelo xev. Assim, por exemplo, no seu exemplo, o botão superior direito do meu trackball Kensington Slimblade é o número 8, atribuído à rolagem horizontal (voltar, em navegadores da Web).
Lfd

Respostas:

2

Eu acho que você deveria olhar para isso desta maneira:

                        1 2 3 4 5 6 7 8 9  <--position-- physical keys
Option "ButtonMapping" "1 9 3 4 5 6 7 8 2" <--function-- logical keys
  • A posição que indica o ID da chave conforme relatado pelo mouse (através do driver). Portanto, cabe ao fabricante como encomendá-los, no entanto, a maioria segue a ordem comum.

    Os mouses que ainda usam protocolos antigos, como o PS2, não têm uma maneira de armazenar ou informar informações sobre os botões disponíveis e suas funções. Portanto, o servidor X não pode informar o ID de cada botão físico, apenas experimentando-os usando uma ferramenta como xevessa que mostra os eventos X:

    xev -event mouse
    

    Ou evtestisso mostra os eventos brutos:

    sudo evtest
    
  • As chaves lógicas são as que realmente foram mapeadas em algum outro lugar para funções extras. Nesse nível, X os vê como: botão1, botão2, botão3, botão4, ..., botão24 e não conhece sua função.

Exemplos de referência oficiais:

  7.  Configuration Examples

  This section shows some example InputDevice section for popular mice.
  All the examples assume that the mouse is connected to the PS/2 mouse
  port, and the OS supports the PS/2 mouse initialization.  It is also
  assumed that /dev/mouse is a link to the PS/2 mouse port.

  Logitech MouseMan+ has 4 buttons and a wheel. The following example
  makes the wheel movement available as the button 5 and 6.

  Section "InputDevice"
          Identifier      "MouseMan+"
          Driver          "mouse"
          Option          "Device"    "/dev/mouse"
          Option          "Protocol"  "MouseManPlusPS/2"
          Option          "Buttons"   "6"
          Option          "ZAxisMapping"      "5 6"
  EndSection

  You can change button number assignment using the xmodmap command
  AFTER you start the X server with the above configuration.  You may
  not like to use the wheel as the button 2 and rather want the side
  button (button 4) act like the button 2. You may also want to map the
  wheel movement to the button 4 and 5.  This can be done by the
  following command:

          xmodmap -e "pointer = 1 6 3 2 4 5"

  After this command is run, the correspondence between the buttons and
  button numbers will be as shown in the following table.

  Physical Buttons        Reported as:
  ------------------------------------
  1 Left Button             Button 1
  2 Wheel Button            Button 6
  3 Right Button            Button 3
  4 Side Button             Button 2
  5 Wheel Negative Move     Button 4
  6 Wheel Positive Move     Button 5


  Starting in the Xorg 6.9 release, you can also achieve this in your
  configuration file by adding this to the "InputDevice" section in
  xorg.conf:

          Option "ButtonMapping" "1 6 3 2 4 5"

  For the MS IntelliMouse Explorer which as a wheel and 5 buttons, you
  may have the following InputDevice section.

  Section "InputDevice"
          Identifier      "IntelliMouse Explorer"
          Driver          "mouse"
          Option          "Device"    "/dev/mouse"
          Option          "Protocol"  "ExplorerPS/2"
          Option          "Buttons"   "7"
          Option          "ZAxisMapping"      "6 7"
  EndSection

  The IntelliMouse Explorer has 5 buttons, thus, you should give "7" to
  the Buttons option if you want to map the wheel movement to buttons (6
  and 7).  With this configuration, the correspondence between the
  buttons and button numbers will be as follows:

  Physical Buttons        Reported as:
  ------------------------------------
  1 Left Button             Button 1
  2 Wheel Button            Button 2
  3 Right Button            Button 3
  4 Side Button 1           Button 4
  5 Side Button 2           Button 5
  6 Wheel Negative Move     Button 6
  7 Wheel Positive Move     Button 7

  You can change button number assignment using xmodmap AFTER you
  started the X server with the above configuration.

          xmodmap -e "pointer = 1 2 3 4 7 5 6"

  The above command will moves the side button 2 to the button 7 and
  make the wheel movement reported as the button 5 and 6. See the table
  below.

  Physical Buttons        Reported as:
  ------------------------------------
  1 Left Button             Button 1
  2 Wheel Button            Button 2
  3 Right Button            Button 3
  4 Side Button 1           Button 4
  5 Side Button 2           Button 7
  6 Wheel Negative Move     Button 5
  7 Wheel Positive Move     Button 6

  For the A4 Tech WinEasy mouse which has two wheels and 3 buttons, you
  may have the following InputDevice section.

  Section "InputDevice"
          Identifier      "WinEasy"
          Driver          "mouse"
          Option          "Device"    "/dev/mouse"
          Option          "Protocol"  "IMPS/2"
          Option          "Buttons"   "7"
          Option          "ZAxisMapping"      "4 5 6 7"
  EndSection

  The movement of the first wheel is mapped to the button 4 and 5. The
  second wheel's movement will be reported as the buttons 6 and 7.

  The Kensington Expert mouse is really a trackball. It has 4 buttons
  arranged in a rectangle around the ball.

Fonte: ftp://ftp.x.org/pub/current/doc/mouse.txt

user.dz
fonte
Esta é uma informação excelente. Infelizmente, xmodmap -ppnão mostra os nomes (por exemplo, "botão esquerdo", "botão da roda") dos botões físicos, conforme a documentação. Veja minha atualização para a pergunta.
Dave Jarvis
@DaveJarvis, atualizou minha resposta. pode ser: / devemos esperar a próxima geração de ratos, espertos! ou pode não haver necessidade de mouse no futuro. :)
user.dz
Ou um banco de dados público de dispositivos que podem ser consultados para determinar nomes para seus mapas de botões?
Dave Jarvis