¿Cómo deshabilitar una entrada de movimiento del mouse, dejando los botones del mouse habilitados?

9

Tengo un mouse que solo uso para los botones. Quiero deshabilitar solo la entrada de movimiento del mouse. Cubrir físicamente el sensor no funciona.

Ian Kelling
fuente

Respuestas:

9

Puedes usar 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

Allí obtienes el nombre del mouse en este caso Mouse0.

Con el siguiente comando, reduce la velocidad de su mouse en un factor de 100000, que es básicamente cero.

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

o

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

Para revertir puedes usar el mismo

xinput --set-prop Mouse0 'Device Accel Constant Deceleration' 1
Raphael Ahrens
fuente
1
Hack limpio. Las propiedades disponibles se pueden encontrar con xinput list 6(donde 6está el dispositivo). La documentación sobre las propiedades se puede encontrar aquí: x.org/wiki/Development/Documentation/PointerAcceleration
Lekensteyn
3

Mi mouse no tiene la propiedad 'Device Accel Constant Deceleration'. Todavía podía desactivar el movimiento con

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

y volver a habilitarlo con

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

También deshabilité mis botones con

xinput set-button-map 9 0 0 0

El dispositivo 9 es mi mouse USB óptico de Apple Mitsumi Electric .

Lista de dispositivos

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
fuente
2

Si leo man 4 mousedrvcorrectamente, puede configurar, en la sección CorePointer de su xorg.conf,

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

lo que convertiría los movimientos en eventos de botón de la rueda del mouse, pero la configuración de inercia lo haría demasiado insensible para registrar uno. En los sistemas modernos, es evdev en lugar de mousedrv. Esto también se puede configurar en tiempo de ejecución usando xinput, por ejemplo:

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

Donde 17 debe ser su propio número de dispositivo. Utilizo una función para obtener este número por el nombre del dispositivo, y lo guardo en $ device-id durante un script de inicio.

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

Desafortunadamente, esto tiene el efecto secundario de deshabilitar la entrada de la rueda de desplazamiento del dispositivo.

Ulrich Schwarz
fuente