Existe uma maneira de controlar a resolução da roda do mouse no Debian?

6

Estou usando Debian 6.0.4 . A roda do mouse rola muito para que possa ser usada. Existe alguma maneira de configurar o quanto "rolagem" é feito com um giro de roda do mouse?

Atualização:

Meu teclado e mouse são sem fio, conectados a uma porta USB em um KVM conectado por USB ao computador (e até funciona).

xinput --list output:

⎡Virtual core pointer                       id=2    [master pointer  (3)]
⎜↳ Virtual core XTEST pointer               id=4    [slave  pointer  (2)]
⎜↳ Microsoft Microsoft® 2.4GHz Transceiver v8.0 id=9    [slave  pointer  (2)]
⎜↳ Microsoft Microsoft® 2.4GHz Transceiver v8.0 id=10   [slave  pointer  (2)]
⎜↳ Justcom Technology USB KVM Switch        id=12   [slave  pointer  (2)]
⎣Virtual core keyboard                      id=3    [master keyboard (2)]
↳ Virtual core XTEST keyboard               id=5    [slave  keyboard (3)]
↳ Power Button                              id=6    [slave  keyboard (3)]
↳ Power Button                              id=7    [slave  keyboard (3)] 
↳ Microsoft Microsoft® 2.4GHz Transceiver v8.0  id=8    [slave  keyboard (3)]
↳ Justcom Technology USB KVM Switch         id=11   [slave  keyboard (3)]

xinput --list-props 9 output:

Device 'Microsoft Microsoft® 2.4GHz Transceiver v8.0':
    Device Enabled (128):   1
    Device Accel Profile (254): 0
    Device Accel Constant Deceleration (255):   1.000000
    Device Accel Adaptive Deceleration (257):   1.000000
    Device Accel Velocity Scaling (258):    10.000000
    Evdev Reopen Attempts (246):    10
    Evdev Axis Inversion (259): 0, 0
    Evdev Axes Swap (261):  0
    Axis Labels (262):  "Rel X" (136), "Rel Y" (137), "Rel Misc" (263)
    Button Labels (264):    "Button Left" (129), "Button Middle" (130), "Button Right" (131), "Button Wheel Up" (132), "Button Wheel Down" (133), "Button Horiz Wheel Left" (134), "Button Horiz Wheel Right" (135), "Button Side" (249), "Button Extra" (250), "Button Unknown" (247), "Button Unknown" (247), "Button Unknown" (247), "Button Unknown" (247)
    Evdev Middle Button Emulation (265):    2
    Evdev Middle Button Timeout (266):  50
    Evdev Wheel Emulation (267):    0
    Evdev Wheel Emulation Axes (268):   0, 0, 4, 5
    Evdev Wheel Emulation Inertia (269):    10
    Evdev Wheel Emulation Timeout (270):    200 
    Evdev Wheel Emulation Button (271): 4
    Evdev Drag Lock Buttons (272):  0
    
por vainolo 30.01.2012 / 20:19

6 respostas

2

Para o seguinte funcionar, você precisa dos programas xte e xbindkeys. Para o Debian, e a maioria dos derivados como o Ubuntu, estes vêm em pacotes xautomation e xbindkeys, respectivamente. Se você usar alguma outra distribuição, você terá que apenas procurar em seu gerenciador de pacotes para encontrar os pacotes corretos.

A ideia por trás disso é que, em vez de realmente acelerar o movimento da roda do mouse, geramos vários eventos de botão cada vez que a roda é rolada. A maneira como isso é feito não salva o seu cpu, como um programa externo será executado toda vez que gerarmos vários eventos de botão, por exemplo. toda vez que a roda de rolagem é rolada. Isso pode ser de alguma consideração, mas um hack é um hack.

Primeiro você precisa obter o id do dispositivo de entrada, ou seja. o mouse, você está usando. Você obterá isso da saída de xinput list .

Em seguida, você precisa obter o mapa de botões do dispositivo. Você vai conseguir isso de saída de xinput get-button-map <device> .

Para descobrir quais botões mapeiam para a roda de rolagem, execute xinput test <device> e role para cima / para baixo algumas vezes. Isso produzirá eventos do dispositivo especificado para o terminal e permitirá ver quais botões mapeiam para a roda de rolagem.

Por exemplo, usaremos um mouse USB antigo da Microsoft, com dois botões normais e uma roda de rolagem. Rolando a roda para cima mapeia para o botão 4 e rolando os mapas para o botão 5. Felizmente o mapa de botão para este dispositivo tem dois botões não usados, 6 e 7, então vamos usá-los.

Primeiro, remapeamos os botões 4 e 5 para os botões não usados.

xinput set-button-map <devid> 1 2 3 6 7 4 5

Isso nos permitirá usar eventos para os botões 6 e 7 para eventos de roda, permitindo-nos fazer o que quisermos quando os eventos para esses botões são recebido. Neste caso, vamos produzir vários eventos de mouse para um único rolo de roda do mouse (ou seja, um clique em qualquer direção).

Para multiplicar (acelerar) por três, por exemplo, colocaríamos o seguinte em ~/.xbindkeysrc :

"/usr/bin/xte 'mouseup 6' 'mouseclick 4' 'mouseclick 4' 'mouseclick 4' &"
b:6 
"/usr/bin/xte 'mouseup 7' 'mouseclick 5' 'mouseclick 5' 'mouseclick 5' &"
b:7 

Que, na verdade, se liga ao evento release do botão 6, três eventos de clique do botão 4. Ligar diretamente ao evento release do botão 4 produziria um loop infinito, porque toda vez que o botão 4 é liberado, três novos eventos do mesmo tipo para o mesmo botão são gerados. É por isso que remapeamos os botões antes.

Para testar a configuração, execute xbindkeys -n -v (isso produzirá uma saída detalhada no console, permitindo que você veja exatamente o que é produzido quando você rola a roda do seu mouse. Se tudo correr bem, isso deve produzir algo assim:

user@host:~$ xbindkeys -n -v
displayName = :0
rc file = /home/sjl/.xbindkeysrc
rc guile file = /home/sjl/.xbindkeysrc.scm

min_keycode=8     max_keycode=255 (ie: know keycodes)
"/usr/bin/xte 'mouseup 6' 'mouseclick 4' 'mouseclick 4' 'mouseclick 4' &"
    m:0x0 + b:6   (mouse)
"/usr/bin/xte 'mouseup 7' 'mouseclick 5' 'mouseclick 5' 'mouseclick 5' &"
    m:0x0 + b:7   (mouse)
starting loop...
Button press !
e.xbutton.button=6
e.xbutton.state=0
"/usr/bin/xte 'mouseup 6' 'mouseclick 4' 'mouseclick 4' 'mouseclick 4' &"
    m:0x0 + b:6   (mouse)
got screen 0 for window ae
Start program with fork+exec call
Button release !
e.xbutton.button=6
e.xbutton.state=0
Button press !
e.xbutton.button=7
e.xbutton.state=0
"/usr/bin/xte 'mouseup 7' 'mouseclick 5' 'mouseclick 5' 'mouseclick 5' &"
    m:0x0 + b:7   (mouse)
got screen 0 for window ae
Start program with fork+exec call
Button release !
e.xbutton.button=7
e.xbutton.state=0

Se você agora mover o foco para alguma janela rolável, o Firefox, por exemplo, você deve ver que a rolagem com a roda se tornou três vezes mais rápido como era.

Agora tudo o que resta a fazer é iniciar xbindkeys em segundo plano quando você comece sua sessão X. Isso é deixado como um exercício para o leitor.

    
por 04.08.2014 / 15:01
1

Você pode controlar a aceleração do mouse (e roda de rolagem) através do programa de linha de comando xinput . Use xinput --list para listar os dispositivos de entrada. Você pode então usar o ID do seu mouse para listar suas propriedades como xinput --list-props <ID> . Deve haver um para a aceleração da roda de rolagem. Você pode alterá-lo por xinput --set-prop <ID> <propertyID> <value> . Você pode ter que experimentar os valores um pouco para descobrir o caminho certo.

    
por 31.01.2012 / 20:13
1

Meu Microsoft Wireless Mouse 1000 tem a propriedade "Evdev Scrolling Distance".

Tente aumentar para 3, 3, 3

xinput --set-prop 10 274 3, 3, 3
    
por 02.10.2015 / 06:04
1

Noto que você está usando um dispositivo Microsoft Microsoft® 2.4GHz Transceiver . Muitos, muitos usuários de Linux encontraram insanidade relacionada à rolagem com dispositivos apontadores da Microsoft. Os passos para resolver o problema são quase sempre:

  1. Desligue o mouse e ligue-o novamente.
  2. Se a etapa 1 não funcionar, desconecte o dongle USB e conecte-o novamente.

Eu sei que isso parece estupidamente simples. Eu tive o mesmo problema. Depois de horas pesquisando e analisando meu sistema operacional, os eventos de rolagem estavam sendo duplicados devido a um mau estado do dispositivo / driver.

Eu estava me preparando para começar a escrever um driver de middleware para ficar entre meu kernel e meu Xserver para resolver o problema. ( libevdev é o lugar para começar, se você mesmo estiver interessado.) Mas eu decidi que o ocasional alternar entre as teclas foi suficiente.

    
por 15.02.2015 / 19:21
0

Geralmente, a resolução da roda do mouse é determinada pelo ambiente de área de trabalho que você usa. Qual ambiente de área de trabalho você está usando atualmente?

    
por 30.01.2012 / 20:46
0

Eu encontrei uma solução para o meu dispositivo específico. Pode ser de ajuda para os outros. Mouse: Logitech M560 em um receptor unificado.

Saída de $ xinput:

 Virtual core pointer                       id=2    [master pointer  (3)]
   ↳ Virtual core XTEST pointer                 id=4    [slave  pointer  (2)]
   ↳ Logitech Unifying Device. Wireless PID:4002    id=9    [slave  pointer  (2)]
   ↳ Logitech Unifying Device. Wireless PID:402d    id=10   [slave  pointer  (2)]
...

meu mouse é id 10 (e o teclado é 9)

$ xinput list-props 10

Device 'Logitech Unifying Device. Wireless PID:402d':
Device Enabled (143):   1
Coordinate Transformation Matrix (145): 1.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 1.000000
Device Accel Profile (269): 2
Device Accel Constant Deceleration (270):   3.000000
Device Accel Adaptive Deceleration (271):   1.000000
Device Accel Velocity Scaling (272):    10.000000
Device Product ID (263):    1133, 50475
Device Node (264):  "/dev/input/event2"
Evdev Axis Inversion (273): 0, 0
Evdev Axes Swap (275):  0
Axis Labels (276):  "Rel X" (153), "Rel Y" (154), "Rel Horiz Wheel" (268), "Rel Vert Wheel" (296)
Button Labels (277):    "Button Left" (146), "Button Middle" (147), "Button Right" (148), "Button Wheel Up" (149), "Button Wheel Down" (150), "Button Horiz Wheel Left" (151), "Button Horiz Wheel Right" (152), "Button Side" (291), "Button Extra" (292), "Button Forward" (293), "Button Back" (294), "Button Task" (295), "Button Unknown" (266), "Button Unknown" (266), "Button Unknown" (266), "Button Unknown" (266), "Button Unknown" (266), "Button Unknown" (266), "Button Unknown" (266), "Button Unknown" (266), "Button Unknown" (266), "Button Unknown" (266), "Button Unknown" (266), "Button Unknown" (266)
Evdev Scrolling Distance (278): -4, 1, 1
Evdev Middle Button Emulation (279):    0
Evdev Middle Button Timeout (280):  50
Evdev Third Button Emulation (281): 0
Evdev Third Button Emulation Timeout (282): 1000
Evdev Third Button Emulation Button (283):  3
Evdev Third Button Emulation Threshold (284):   20
Evdev Wheel Emulation (285):    0
Evdev Wheel Emulation Axes (286):   0, 0, 4, 5
Evdev Wheel Emulation Inertia (287):    10
Evdev Wheel Emulation Timeout (288):    200
Evdev Wheel Emulation Button (289): 4
Evdev Drag Lock Buttons (290):  0

Eu acho que tive sorte com o meu motorista ter uma "Evdev Scrolling Distance (278)", e ajustei como -4, 1, 1. (menos) é para inverter a direção da roda (curiosamente a inversão do botão 4 5 - > 5 4 não funciona neste caso, mas esta configuração faz). O valor padrão foi 1, 1, 1. Experimentar mostrou que ficou mais lento com maior abs (número), daí o valor 4.

Eu instalei o driver "solaar", talvez para referência aqui está o link repositório da Debian

    
por 26.09.2016 / 04:40

Tags