Comment désactiver une entrée de mouvement de souris, tout en laissant les boutons de la souris activés?

9

J'ai une souris que je viens d'utiliser pour les boutons. Je souhaite désactiver uniquement l'entrée de mouvement de la souris. Couvrir physiquement le capteur ne fonctionne pas.

Ian Kelling
la source

Réponses:

9

Vous pouvez utiliser xinput.

>xinput --list
⎡ Virtual core pointer                      id=2    [master pointer  (3)]
⎜   ↳ Virtual core XTEST pointer            id=4    [slave  pointer  (2)]
⎜   ↳ Mouse0                                id=6    [slave  pointer  (2)]
⎣ Virtual core keyboard                     id=3    [master keyboard (2)]
    ↳ Virtual core XTEST keyboard           id=5    [slave  keyboard (3)]
    ↳ Keyboard0

Là, vous obtenez le nom de la souris dans ce cas Mouse0.

Avec la commande suivante, vous ralentissez la vitesse de votre souris d'un facteur 100000, qui est alors pratiquement nul.

xinput --set-prop 6 'Device Accel Constant Deceleration' 100000

ou

xinput --set-prop Mouse0 'Device Accel Constant Deceleration' 100000

Pour revenir, vous pouvez utiliser le même

xinput --set-prop Mouse0 'Device Accel Constant Deceleration' 1
Raphael Ahrens
la source
1
Hack soigné. Les propriétés disponibles peuvent être trouvées avec xinput list 6(où se 6trouve l'appareil). La documentation sur les propriétés peut être trouvée ici: x.org/wiki/Development/Documentation/PointerAcceleration
Lekensteyn
3

Ma souris n'a pas la propriété «Device Accel Constant Deceleration». Je pouvais toujours désactiver le mouvement avec

xinput set-prop 9 266 -1    
xinput set-prop 9 269 0 1

et le réactiver avec

xinput set-prop 9 269 1 0
input set-prop 9 266 0.0

J'ai également désactivé mes boutons avec

xinput set-button-map 9 0 0 0

Le périphérique 9 étant ma souris optique USB optique Mitsumi Electric Apple .

Liste des périphériques

Device 'Mitsumi Electric Apple Optical USB Mouse':
    Device Enabled (132):   1
    Coordinate Transformation Matrix (134): 1.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 1.000000
    libinput Accel Speed (266):     -1.000000
    libinput Accel Speed Default (267):     0.000000
    libinput Accel Profiles Available (268):        0, 0
    libinput Accel Profile Enabled (269):   0, 1
    libinput Accel Profile Enabled Default (270):   1, 0
    libinput Natural Scrolling Enabled (271):       0
    libinput Natural Scrolling Enabled Default (272):       0
    libinput Send Events Modes Available (250):     1, 0
    libinput Send Events Mode Enabled (251):        0, 0
    libinput Send Events Mode Enabled Default (252):        0, 0
    libinput Left Handed Enabled (273):     0
    libinput Left Handed Enabled Default (274):     0
    libinput Scroll Methods Available (275):        0, 0, 1
    libinput Scroll Method Enabled (276):   0, 0, 0
    libinput Scroll Method Enabled Default (277):   0, 0, 0
    libinput Button Scrolling Button (278): 2
    libinput Button Scrolling Button Default (279): 274
    libinput Middle Emulation Enabled (280):        0
    libinput Middle Emulation Enabled Default (281):        0
    Device Node (253):      "/dev/input/event4"
    Device Product ID (254):        1452, 772
    libinput Drag Lock Buttons (282):       <no items>
    libinput Horizonal Scroll Enabled (255):        1
gam3
la source
2

Si je lis man 4 mousedrvcorrectement, vous pouvez définir, dans la section CorePointer de votre xorg.conf,

Option "EmulateWheel" true
Option "EmulateWheelButton" 0
Option "EmulateWheelInertia" 10000

ce qui convertirait les mouvements en événements de bouton de la molette de la souris, mais le paramètre d'inertie le rendrait trop insensible pour en enregistrer un. Sur les systèmes modernes, c'est evdev au lieu de mousedrv. Cela peut également être défini lors de l'exécution à l'aide de xinput, par exemple:

xinput --set-prop 17 'Evdev Wheel Emulation' 1
xinput --set-prop 17 'Evdev Wheel Emulation Button' 0
xinput --set-prop 17 'Evdev Wheel Emulation Inertia' 10000

Où 17 devrait être votre propre numéro d'appareil. J'utilise une fonction pour obtenir ce numéro par le nom de l'appareil et le stocker dans $ device-id lors d'un script de démarrage.

set_device_id() {
  device_id=$(xinput --list | grep -m 1 "$1")
  device_id=${device_id##*id=}
  device_id=${device_id%%[[:space:]]*}
}

Cela a malheureusement pour effet secondaire de désactiver l'entrée de la molette de défilement de l'appareil.

Ulrich Schwarz
la source