O ponteiro do mouse se move muito rápido, o xinput resolve o problema temporariamente

2

Em todos os sistemas Ubuntu, eu configuro a velocidade do ponteiro do mouse para a mais lenta, mas ela ainda se move muito rápido. (Agora eu uso o Ubuntu 16.04.) Eu fiz algumas pesquisas e descobri que este comando resolve o meu problema:

xinput --set-prop "Logitech USB Laser Mouse" "Device Accel Constant Deceleration" 1.75

Mas quando eu desconecto o mouse e o conecto de volta, sua velocidade retorna às configurações do sistema. Então eu tenho que executar esse comando o tempo todo. O que devo fazer?

    
por Graduate 06.07.2017 / 16:24

2 respostas

2

1 / Versão curta: (verificada no Ubuntu 16.04)

Atualize o arquivo .xinputrc em seu diretório $ HOME e coloque seus comandos xinput dentro (um por linha). Ele será lido toda vez que você abrir sua sessão. Se não existir, crie-o: (deveria ter sido gerado por im-config)

Meu:

# im-config(8) generated on Wed, 15 Feb 2017 19:29:43 +0100
run_im ibus
# im-config signature: 90bece1e5f840b27085989abd900276a  -

#BYME# Put your xinput commands here
#BYME#With DRI2 : Device Accel Constant Deceleration (267)
xinput --set-prop 11 267 2
#BYME#With DRI3 : Device Accel Constant Deceleration (264)
xinput --set-prop 11 264 2

Este .xinputrc funciona para ambos os casos (se o DRI3 estiver ativado ou não)

A propósito, estou usando várias telas (mixando telas 4K e antiquadas 16: 9) e me sinto confortável tendo apenas Device Accel Constant Deceleration to 2 . Sinta-se à vontade para alterar este (ou outro) valor.

2 / Forma errada de fazê-lo:

(NÃO) adicione-o ao seu .bashrc ou outro arquivo específico do perfil (que pode ser lido muito mais vezes e pode levar a interpretações erradas de qual comportamento do mouse é realmente aplicado)

3 / Versão longa: (trabalhando em distribuições suportando comandos xinput)

Para determinar quais opções você deve usar:

$ xinput --list --short

No meu host Ubuntu (estou usando um KVM para alternar entre meus computadores), ele retorna:

Virtual core pointer                        id=2    [master pointer  (3)]
⎜   ↳ Virtual core XTEST pointer                id=4    [slave  pointer  (2)]
⎜   ↳ No brand Combo Free KVM                   id=11   [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)]
    ↳ Video Bus                                 id=7    [slave  keyboard (3)]
    ↳ Power Button                              id=8    [slave  keyboard (3)]
    ↳ Sleep Button                              id=9    [slave  keyboard (3)]
    ↳ No brand Combo Free KVM                   id=10   [slave  keyboard (3)]

Então, em vez de mexer com strings (e cometer erros ao digitar), prefiro usar (abreviar) identificadores numéricos (saber agora como encontrá-los e seus significados).

No meu caso, meu mouse está em Virtual core pointer , identificado como No brand Combo Free KVM com o identificador numérico 11 . Como explicado anteriormente, agora vou usar esse identificador numérico em vez da string correspondente, mas você pode fazer o que quiser (ambos funcionam).

Para saber quais propriedades / capacidades estão disponíveis com meu mouse, eu tenho que digitar: ( adapte este comando com o resultado do anterior , seu próprio identificador deve ser diferente)

$ xinput --list-props 11

Device 'No brand Combo Free KVM':
    Device Enabled (136):   1
    Coordinate Transformation Matrix (138): 1.000000, 0.000000, 0.000000, 0.000000, 
1.000000, 0.000000, 0.000000, 0.000000, 1.000000
    Device Accel Profile (266): 0
    Device Accel Constant Deceleration (267):   1.000000
    Device Accel Adaptive Deceleration (268):   1.000000
    Device Accel Velocity Scaling (269):    10.000000
    Device Product ID (257):    4309, 20480
    Device Node (258):  "/dev/input/event16"
    Evdev Axis Inversion (270): 0, 0
    Evdev Axes Swap (272):  0
    Axis Labels (273):  "Rel X" (146), "Rel Y" (147), "Rel Horiz Wheel" (264), "
Rel Vert Wheel" (265)
    Button Labels (274):    "Button Left" (139), "Button Middle" (140), "Button Righ
t" (141), "Button Wheel Up" (142), "Button Wheel Down" (143), "Button Horiz Wheel Left" 
(144), "Button Horiz Wheel Right" (145), "Button Side" (262), "Button Extra" (263), "But
ton Unknown" (260), "Button Unknown" (260), "Button Unknown" (260), "Button Unknown" (26
0)
    Evdev Scrolling Distance (275): 1, 1, 1
    Evdev Middle Button Emulation (276):    0
    Evdev Middle Button Timeout (277):  50
    Evdev Third Button Emulation (278): 0
    Evdev Third Button Emulation Timeout (279): 1000
    Evdev Third Button Emulation Button (280):  3
    Evdev Third Button Emulation Threshold (281):   20
    Evdev Wheel Emulation (282):    0
    Evdev Wheel Emulation Axes (283):   0, 0, 4, 5
    Evdev Wheel Emulation Inertia (284):    10
    Evdev Wheel Emulation Timeout (285):    200
    Evdev Wheel Emulation Button (286): 4
    Evdev Drag Lock Buttons (287):  0

É assim que podemos identificar quais propriedades devem ser alteradas!

Accel Constant Deceleration (identificador numérico: 267 ) está fazendo o trabalho muito bem para mim. Sinta-se à vontade para "brincar" com outras propriedades e encontrar o comportamento certo para o seu próprio mouse.

Então, é por isso que adicionei a próxima linha ao meu .xinputrc , alterando o valor de 1.000000 para 2 (especificando um float não obrigatório) porque aumentando a desaceleração leva a diminuir a velocidade do mouse :

xinput --set-prop 11 267 2

4 / Aviso: estes identificadores podem mudar se você tiver ativado DRI3

DRI2 apenas, por padrão, no Ubuntu 16.04 (enquanto isso pode levar a problemas, como nas últimas versões do Chrome, exigindo que o DRI3 suporte multiwindow)

Se você ativou DRI3, os identificadores agora devem ser:

Device 'No brand Combo Free KVM':
    Device Enabled (133):   1
    Coordinate Transformation Matrix (135): 1.000000, 0.000000, 0.000000, 0.000000, 
1.000000, 0.000000, 0.000000, 0.000000, 1.000000
    Device Accel Profile (263): 0
    Device Accel Constant Deceleration (264):   1.000000
    Device Accel Adaptive Deceleration (265):   1.000000
    Device Accel Velocity Scaling (266):    10.000000
    Device Product ID (254):    4309, 20480
    Device Node (255):  "/dev/input/event9"
    Evdev Axis Inversion (267): 0, 0
    Evdev Axes Swap (269):  0
    Axis Labels (270):  "Rel X" (143), "Rel Y" (144), "Rel Horiz Wheel" (261), "
Rel Vert Wheel" (262)
    Button Labels (271):    "Button Left" (136), "Button Middle" (137), "Button Righ
t" (138), "Button Wheel Up" (139), "Button Wheel Down" (140), "Button Horiz Wheel Left" 
(141), "Button Horiz Wheel Right" (142), "Button Side" (259), "Button Extra" (260), "But
ton Unknown" (257), "Button Unknown" (257), "Button Unknown" (257), "Button Unknown" (25
7)
    Evdev Scrolling Distance (272): 1, 1, 1
    Evdev Middle Button Emulation (273):    0
    Evdev Middle Button Timeout (274):  50
    Evdev Third Button Emulation (275): 0
    Evdev Third Button Emulation Timeout (276): 1000
    Evdev Third Button Emulation Button (277):  3
    Evdev Third Button Emulation Threshold (278):   20
    Evdev Wheel Emulation (279):    0
    Evdev Wheel Emulation Axes (280):   0, 0, 4, 5
    Evdev Wheel Emulation Inertia (281):    10
    Evdev Wheel Emulation Timeout (282):    200
    Evdev Wheel Emulation Button (283): 4
    Evdev Drag Lock Buttons (284):  0

Accel Constant Deceleration agora está identificado por 264 . É por isso que eu também adicionei (tendo o mesmo comportamento, não importa se o DRI3 está habilitado ou não) no meu .xinputrc :

xinput --set-prop 11 264 2

Espero que isso ajude você.

    
por Another Tux User 06.07.2017 / 18:57
1

Podemos corrigir esse problema escrevendo uma regra udev .

Identifique seu mouse

Primeiro, devemos identificar nosso dispositivo de mouse, existem diferentes maneiras de fazer isso, eu corri lsusb e ele gera:

...
Bus 002 Device 011: ID 104f:0003  WB Electronics
...

então usei o ID do fornecedor 104f , localize para procurar o nó do meu dispositivo de mouse:

$ find /dev/input -iname *104f* -ls
540  0  lrwxrwxrwx   1  root ... /dev/input/by-id/usb-104f-mouse -> ../mouse2

então meu dispositivo de mouse é /dev/input/mouse2 .

Reunir dados idênticos sobre o dispositivo

Use udevadm info /dev/input/mouse2 --attribute-walk para obter uma lista de detalhes sobre o dispositivo, para que possamos usá-los para escrever uma regra udev .

Selecione uma única seção que contém: ATTRS{idProduct} & amp; ATTRS{idVendor} .

Escreva a regra do udev

Em seguida, crie um arquivo aqui:

sudo nano /etc/udev/rules.d/95-mymouse.rules

com um conteúdo escolhido semelhante a:

SUBSYSTEMS=="usb", ATTRS{idProduct}=="xxxx", ATTRS{idVendor}=="xxxx", RUN+="/bin/touch /tmp/my.udev"

Não se esqueça de alterar xxxx com seu próprio dispositivo e código de produto.

Agora execute:

sudo udevadm control --reload

O que fizemos até agora?

Cada vez que você conectar seu mouse ao sistema udev executará um comando e o comando touch a arquivo /tmp/my.udev .

Por que simplesmente não executamos o xinput ? Depois que uma regra udev é executada, "X" redefine alguns detalhes, portanto, não podemos simplesmente executar um comando xinput como um comando udev .

então instale inotify-tools :

sudo apt install inotify-tools

escreva um script e coloque-o em qualquer lugar:

#!/bin/bash
touch /tmp/my.udev
inotifywait -m -e attrib --format '%w%f' /tmp/my.udev 2>/dev/null | while read event
do
sleep 2
xinput --set-prop "Logitech USB Laser Mouse" "Device Accel Constant Deceleration" 1.75
done

Como fazer isso funcionar?

Execute o último script após o login, você pode colocá-lo em scripts de inicialização ou até mesmo .profile file, cada vez que você conectar o mouse, udev %%% e touch /tmp/my.udev acionará inotifywait .

A ideia de xinput vem de aqui

    
por Ravexina 06.07.2017 / 19:01