Eu finalmente encontrei uma solução que funciona muito bem para a maioria dos meus casos de uso. Usando xdotools
, criei dois scripts, um para rolagem em cada direção. Este é o script para rolagem para baixo (para rolar para cima, substitua '5' por '4').
#!/bin/bash
#Get active window id
win='xdotool getactivewindow'
#Move the mouse to the active window
xdotool mousemove --window $win 45 110
#Scroll active window several times
xdotool click --clearmodifiers 5
xdotool click --clearmodifiers 5
xdotool click --clearmodifiers 5
xdotool click --clearmodifiers 5
xdotool click --clearmodifiers 5
xdotool click --clearmodifiers 5
xdotool click --clearmodifiers 5
xdotool click --clearmodifiers 5
xdotool click --clearmodifiers 5
xdotool click --clearmodifiers 5
xdotool click --clearmodifiers 5
#Send click to specific window. Finicky.
#xdotool click --window $win 5
Basicamente, o xdotools obtém o ID activewindow e move os movimentos para lá antes de enviar o sinal de rolagem do mouse várias vezes. Eu não consegui fazer isso funcionar especificando diretamente para qual janela enviar os cliques, então resolvi movendo o cursor do mouse. Como o Linux rola automaticamente a janela sob o mouse, isso resolve o problema 1 listado na minha pergunta. O parâmetro --clearmodifiers
libera a chave modificadora usada na combinação de teclas de atalho para que a única chave enviada seja a do xdotool, isso resolve o problema número 2 para mim.
O único inconveniente que resta é que, em algumas janelas, há vários painéis e, com esse script, só posso rolar o painel superior esquerdo. Isso não é um problema ao navegar, mas para IDEs como spyder. Então, se alguém tiver uma abordagem melhor, por favor, compartilhe!