如何禁用鼠标移动输入,同时保持鼠标按钮启用?

如何禁用鼠标移动输入,同时保持鼠标按钮启用?

我有一个鼠标,仅用于按钮。我只想禁用鼠标的移动输入。物理覆盖传感器是行不通的。

答案1

您可以使用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

在这里您可以得到鼠标的名称,在本例中为 Mouse0。

使用以下命令,您可以将鼠标速度减慢 100000 倍,然后基本上为零。

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

或者

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

要恢复,您可以使用相同的

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

答案2

我的鼠标没有“设备加速恒定减速”属性。我仍然可以禁用运动

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

并重新启用它

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

我还禁用了我的按钮

xinput set-button-map 9 0 0 0

设备 9 是我的三美电机 Apple 光学 USB 鼠标

设备列表

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

答案3

如果我man 4 mousedrv没看错的话,您可以在 xorg.conf 的 CorePointer 部分中设置,

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

这会将移动转换为鼠标滚轮按钮事件,但惯性设置会使其过于不敏感而无法注册事件。在现代系统上,它是 evdev 而不是 mousedrv。这也可以在运行时使用 xinput 设置,例如:

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

其中 17 应该是您自己的设备编号。我使用一个函数通过设备名称获取此数字,并在启动脚本期间将其存储在 $device-id 中。

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

不幸的是,这会产生禁用设备滚轮输入的副作用。

相关内容