Emule a rolagem vertical e horizontal usandolibinput

Emule a rolagem vertical e horizontal usandolibinput

Eu construí um teclado personalizado com um trackball sob o polegar e quero mapear um comportamento de rolagem de forma que, quando eu pressionar um atalho (como alt esquerdo) e girar a bola, ela se comporte como uma rolagem. Estou usando o Xorg aqui, mas estaria muito interessado em ver soluções para X e Wayland (se a solução envolver servidor de exibição).

Responder1

Emule a rolagem vertical e horizontal usandolibinput

O evdevmotorista deDirkt'sresposta suporta apenas emulação de rolagem vertical. Se você (como eu) também deseja rolar horizontalmente, o libinputdriver pode ser usado para fazer isso:

  1. Os detalhes estão na página de manual para libinput(4):

    Opção "ScrollButton" "int"

    Designa um botão como botão de rolagem. Se oScrollMethodébotãoe o botão é pressionado logicamente, o movimento do eixo x/y é convertido em eventos de rolagem.

    Opção "ScrollMethod" "string"

    Ativa um método de rolagem. Os valores permitidos sãonenhum, dois dedos, borda, botão. Nem todos os dispositivos suportam todas as opções; se uma opção não for suportada, a opção de rolagem padrão para este dispositivo será usada

  2. Por exemplo:

    Section "InputClass"
      Identifier "Some Trackball"
      # ... Stuff to match your trackball, see xorg.conf(5)
      Driver "libinput"
      Option "ScrollMethod" "button"
      Option "ScrollButton" "4" # Or whatever button suits your needs
    EndSection
    

Responder2

Simule a roda do mouse com trackball

Você pode usar opções de configuração existentes de drivers que fazem algo semelhante ao que você deseja ou escrever seu próprio driver.

OLogitech M570é um trackball sem fio com um receptor USB. Isso significa que ele aparecerá como um ESCONDIDOdispositivo, e os eventos do mouse serão disponibilizados através doentradacamada no kernel e pode ler no /dev/eventdispositivo correspondente.

O driver X, por sua vez, usa o evdevdriver para ler eventos desta camada e os transforma em eventos X. Não estou familiarizado com o Wayland, mas presumo que funcionará de forma semelhante lá.

1) O evdevdriver já contém opções para emular a roda do mouse em um trackball, consulte man evdev. Os mais importantes são

Opção "EmulateWheel" "booleano"

Habilite/desabilite a emulação de "roda". Emulação de roda significa emular eventos de pressionar/soltar botão quando o mouse é movido enquanto um botão real específico é pressionado. Eventos de botão de roda (normalmente botões 4 e 5) são geralmente usados ​​para rolagem. A emulação de roda é útil para obter um comportamento semelhante ao de uma roda com trackballs.

Opção "EmulateWheelButton" "inteiro"

Especifica qual botão deve ser mantido pressionado para ativar o modo de emulação de roda. Enquanto este botão estiver pressionado, o movimento do ponteiro X e/ou Y gerará eventos de pressionar/soltar o botão conforme especificado para as configurações XAxisMapping e YAxisMapping. Se o botão estiver em 0 e EmulateWheel estiver ativado, qualquer movimento do dispositivo será convertido em eventos de roda. Padrão: 4.

Portanto, isso funciona usando um botão do trackball em vez de um atalho de teclado (porque o driver só vê eventos do mouse, não do teclado) e irá convertermovimentoem eventos de roda, e nãorotação.

2) Escreva seu próprio driver modificando vários drivers existentes. Você precisará combinar os drivers do teclado e do mouse, para que a emulação da roda possa ser acionada pressionando as teclas.

O código-fonte docamada de entrada do kernelestá drivers/inputna árvore do kernel.

O código-fonte doevdevO driver X está emxorg/driver/xf86-input-evdev/tree/src/evdev.c.

O driver do teclado depende do tipo de teclado que você usou.

informação relacionada