web-dev-qa-db-fra.com

Le pointeur de la souris se déplace trop rapidement, xinput résout le problème temporairement

Sur tous les systèmes Ubuntu, la vitesse du pointeur de la souris est réglée sur la vitesse la plus lente, mais la vitesse de déplacement est trop élevée. (Maintenant, j'utilise Ubuntu 16.04.) J'ai effectué des recherches et découvert que cette commande résout mon problème:

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

Mais lorsque je débranche la souris et la rebranche, sa vitesse revient aux paramètres du système. Je dois donc exécuter cette commande tout le temps. Que devrais-je faire?

2
Graduate

1/Version courte: (vérifié sur Ubuntu 16.04)

Mettez à jour le fichier . Xinputrc dans votre répertoire $ HOME et insérez-y vos commandes xinput (une par ligne). Il sera lu chaque fois que vous ouvrirez votre session. S'il n'existe pas, créez-le: (aurait dû être généré par im-config)

Mien :

_# 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
_

Ce fichier .xinputrc fonctionne dans les deux cas (si DRI3 est activé ou non)

En passant, j’utilise plusieurs écrans (mixant les écrans 4K et 16: 9) et je me sens bien d’avoir seulement réglé _Device Accel Constant Deceleration_ à _2_. N'hésitez pas à changer cette valeur (ou une autre).

2/Mauvaise façon de le faire:

(NE PAS) l'ajouter à votre fichier .bashrc ou à un autre fichier spécifique à votre profil (qui peut être lu plusieurs fois et peut conduire à une interprétation erronée du comportement réellement appliqué à la souris)

3/Version longue: (travaille sur les distributions supportant les commandes xinput)

Pour déterminer les options à utiliser:

_$ xinput --list --short_

Sur mon hôte Ubuntu (j'utilise un KVM pour basculer entre mes ordinateurs), il renvoie:

_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)]
_

Donc au lieu de jouer avec les chaînes (et de faire des erreurs en les tapant), je préfère utiliser des identifiants numériques (courts) (sachant maintenant comment les trouver et leur signification).

Dans mon cas, ma souris est sous _Virtual core pointer_, identifié comme No brand Combo Free KVM avec l'identificateur numérique 11. Comme expliqué précédemment, je vais maintenant utiliser cet identifiant numérique au lieu de la chaîne correspondante, mais vous pouvez le faire comme vous le souhaitez (les deux fonctionnent).

Pour savoir quelles propriétés/fonctionnalités sont disponibles avec ma souris, je dois taper: (adaptez cette commande au résultat de la précédente, votre propre identifiant devrait être différent)

_$ 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
_

Voici comment identifier les propriétés à modifier!

_Accel Constant Deceleration_ (identificateur numérique: 267) fait très bien le travail pour moi. N'hésitez pas à "jouer" avec d'autres propriétés pour trouver le bon comportement pour votre propre souris.

C'est pourquoi j'ai ajouté la ligne suivante à mon . Xinputrc, en changeant la valeur de _1.000000_ à _2_ (spécifier un float n'est pas obligatoire) car augmenter la décélération conduit à ralentir la vitesse de la souris:

_xinput --set-prop 11 267 2_

4/Attention: ces identifiants peuvent changer si vous avez activé DRI3

DRI2 uniquement, par défaut, sous Ubuntu 16.04 (Bien que cela puisse entraîner des problèmes, comme avec les dernières versions de Chrome, nécessitant que DRI3 prenne en charge le multi-fenêtre en douceur)

Si vous avez activé DRI3, les identifiants doivent maintenant être:

_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_ est maintenant identifié par 264. C'est pourquoi j'ai également ajouté (ayant le même comportement, que DRI3 soit activé ou non) dans mon . Xinputrc:

_xinput --set-prop 11 264 2_

J'espère que cela vous aidera.

2
Another Tux User

Nous pouvons résoudre ce problème en écrivant une règle udev.

Identifiez votre souris

Nous devons d’abord identifier notre souris, il y a différentes façons de le faire, j’ai lancé lsusb et le résultat est le suivant:

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

puis j'ai utilisé le vendeur id 104f, cherchez le noeud de périphérique de la souris:

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

donc mon périphérique de souris est /dev/input/mouse2.

Recueillir des données identiques sur le périphérique

Utilisez udevadm info /dev/input/mouse2 --attribute-walk pour obtenir une liste de détails sur le périphérique afin que nous puissions les utiliser pour écrire une règle udev.

Sélectionnez une seule section contenant: ATTRS{idProduct} & ATTRS{idVendor}.

Écrire la règle udev

Ensuite, créez un fichier ici:

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

avec un contenu choisi semblable à:

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

N'oubliez pas de changer xxxx avec votre propre périphérique et code produit.

Maintenant, lancez:

Sudo udevadm control --reload

Qu'avons-nous fait jusqu'à maintenant?

Chaque fois que vous connectez votre souris au système, udev exécutera une commande, qui sera touch un fichier situé à /tmp/my.udev.

Pourquoi ne lançons-nous pas simplement xinput ? Après l'exécution d'une règle udev, "X" réinitialise certains détails afin que nous ne puissions pas simplement exécuter une commande xinput en tant que commande udev.

alors installez inotify-tools:

Sudo apt install inotify-tools

puis écrivez un script et mettez-le où vous voulez:

#!/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

Comment le faire fonctionner?

Exécutez le dernier script après la connexion, vous pouvez le mettre dans des scripts de démarrage, ou même le fichier .profile, à chaque fois que vous connectez votre souris, udev va touch le /tmp/my.udev et inotifywait déclenche le xinput.

inotifywait l'idée vient de ici

1
Ravexina