Emular rolagem bidirecional usando tecla de atalho + trackball

3

Eu criei um teclado personalizado com um trackball sob o meu polegar e quero mapear um comportamento de rolagem de tal forma que quando eu pressiono um atalho (como o alt esquerdo) e giro a bola, ele deve se comportar como um pergaminho. Estou usando o Xorg aqui, mas estaria muito interessado em ver soluções para o X e o Wayland (se a solução envolver o servidor de exibição).

    
por Wojciech Danilo 14.10.2016 / 10:55

2 respostas

3

Emular rolagem vertical e horizontal usando libinput

O driver evdev da resposta do dirkt suporta apenas emulação de rolagem vertical. Se você (como eu) também quiser rolar horizontalmente, o driver libinput pode ser usado para fazer isso:

  1. Os detalhes estão na manpage de libinput(4) :

    Option "ScrollButton" "int"

    Designates a button as scroll button. If the ScrollMethod is button and the button is logically held down, x/y axis movement is converted into scroll events.

    Option "ScrollMethod" "string"

    Enables a scroll method. Permitted values are none, twofinger, edge, button. Not all devices support all options, if an option is unsupported, the default scroll option for this device is used

  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
    
por 08.06.2017 / 10:31
0

Simular roda do mouse com trackball

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

O Logitech M570 é um trackball sem fio com um receptor USB. Isso significa que ele será exibido como um dispositivo HID e os eventos de mouse serão disponibilizados por meio do input camada no kernel, e pode ler do dispositivo /dev/event correspondente.

O driver X, por sua vez, usa o driver evdev para ler os eventos dessa camada e os transforma em eventos X. Eu não estou familiarizado com Wayland, mas suponho que funcionará de forma semelhante lá.

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

Option "EmulateWheel" "boolean"

Enable/disable "wheel" emulation. Wheel emulation means emulating button press/release events when the mouse is moved while a specific real button is pressed. Wheel button events (typically buttons 4 and 5) are usually used for scrolling. Wheel emulation is useful for getting wheel-like behaviour with trackballs.

Option "EmulateWheelButton" "integer"

Specifies which button must be held down to enable wheel emulation mode. While this button is down, X and/or Y pointer movement will generate button press/release events as specified for the XAxisMapping and YAxisMapping settings. If the button is 0 and EmulateWheel is on, any motion of the device is converted into wheel events. Default: 4.

Então, isso funciona usando um botão de trackball em vez de um atalho de teclado (porque o driver vê apenas eventos do mouse, não do teclado) e converte movimento em eventos de roda, e não rotação .

2) Escreva seu próprio driver, modificando vários existentes. Você precisará combinar os drivers para o teclado e o mouse, para que a emulação de roda possa ser acionada por pressionamentos de tecla.

O código-fonte para a camada de entrada do kernel está em drivers/input na árvore do kernel.

O código fonte do driver X evdev está em xorg / driver / xf86-entrada-evdev / árvore / src / evdev.c .

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

    
por 16.10.2016 / 08:52