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.