Debian 有没有办法控制鼠标滚轮分辨率?

Debian 有没有办法控制鼠标滚轮分辨率?

我在用Debian 6.0.4。鼠标滚轮滚动得太多,以至于没有任何用处。有什么方法可以配置鼠标滚轮转动一圈完成多少“滚动”?

更新:

我的键盘和鼠标是无线的,连接到 KVM 中的 USB 端口,该端口通过 USB 连接到计算机(甚至可以工作)。

xinput --list输出:

⎡Virtual core pointer                       id=2    [master pointer  (3)]
⎜↳ Virtual core XTEST pointer               id=4    [slave  pointer  (2)]
⎜↳ Microsoft Microsoft® 2.4GHz Transceiver v8.0 id=9    [slave  pointer  (2)]
⎜↳ Microsoft Microsoft® 2.4GHz Transceiver v8.0 id=10   [slave  pointer  (2)]
⎜↳ Justcom Technology USB KVM Switch        id=12   [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)]
↳ Power Button                              id=7    [slave  keyboard (3)] 
↳ Microsoft Microsoft® 2.4GHz Transceiver v8.0  id=8    [slave  keyboard (3)]
↳ Justcom Technology USB KVM Switch         id=11   [slave  keyboard (3)]

xinput --list-props 9输出:

Device 'Microsoft Microsoft® 2.4GHz Transceiver v8.0':
    Device Enabled (128):   1
    Device Accel Profile (254): 0
    Device Accel Constant Deceleration (255):   1.000000
    Device Accel Adaptive Deceleration (257):   1.000000
    Device Accel Velocity Scaling (258):    10.000000
    Evdev Reopen Attempts (246):    10
    Evdev Axis Inversion (259): 0, 0
    Evdev Axes Swap (261):  0
    Axis Labels (262):  "Rel X" (136), "Rel Y" (137), "Rel Misc" (263)
    Button Labels (264):    "Button Left" (129), "Button Middle" (130), "Button Right" (131), "Button Wheel Up" (132), "Button Wheel Down" (133), "Button Horiz Wheel Left" (134), "Button Horiz Wheel Right" (135), "Button Side" (249), "Button Extra" (250), "Button Unknown" (247), "Button Unknown" (247), "Button Unknown" (247), "Button Unknown" (247)
    Evdev Middle Button Emulation (265):    2
    Evdev Middle Button Timeout (266):  50
    Evdev Wheel Emulation (267):    0
    Evdev Wheel Emulation Axes (268):   0, 0, 4, 5
    Evdev Wheel Emulation Inertia (269):    10
    Evdev Wheel Emulation Timeout (270):    200 
    Evdev Wheel Emulation Button (271): 4
    Evdev Drag Lock Buttons (272):  0

答案1

为了使以下功能正常工作,您需要程序 xte 和 xbindkeys。对于 Debian 和大多数衍生版本(如 Ubuntu),它们分别包含在 xautomation 和 xbindkeys 包中。如果您使用其他发行版,则只需搜索包管理器即可找到正确的包。

其背后的想法是,我们并不是实际加速鼠标滚轮的移动,而是在每次滚动滚轮时生成多个按钮事件。这样做的方式不会节省你的CPU,因为每次我们生成多个按钮事件时都会运行一个外部程序。每次滚动滚轮时。这可能需要一些考虑,但黑客就是黑客。

首先你需要获取输入设备的id,即。您正在使用的鼠标。您将从 的输出中得到这个xinput list

然后您需要获取设备的按钮映射。您将从 的输出中得到这个xinput get-button-map <device>

要找出哪些按钮映射到滚轮,请运行xinput test <device>并向上/向下滚动几次。这会将指定设备中的事件输出到终端,并让您查看哪些按钮映射到滚轮。

举个例子,我们将使用旧的 Microsoft USB 鼠标,有两个普通按钮和一个滚轮。向上滚动滚轮映射到按钮 4,向下滚动滚轮映射到按钮 5。幸运的是,该设备的按钮映射有两个未使用的按钮:6 和 7,因此我们将使用它们。

首先,我们将按钮 4 和 5 重新映射到未使用的按钮。

xinput set-button-map <devid> 1 2 3 6 7 4 5

这将使我们能够将按钮 6 和 7 的事件用于滚轮事件,从而使我们能够在收到这些按钮的事件时执行我们喜欢的任何操作。在这种情况下,我们将为单个鼠标滚轮滚动(即向任一方向单击)生成多个鼠标事件。

例如,要乘以(加速)三,我们将以下内容放入~/.xbindkeysrc

"/usr/bin/xte 'mouseup 6' 'mouseclick 4' 'mouseclick 4' 'mouseclick 4' &"
b:6 
"/usr/bin/xte 'mouseup 7' 'mouseclick 5' 'mouseclick 5' 'mouseclick 5' &"
b:7 

实际上,它绑定到按钮 6 的释放事件,按钮 4 的三个单击事件。直接将其绑定到按钮 4 的释放事件会产生无限循环,因为每次释放按钮 4 时,都会产生相同类型的三个新事件。按钮已生成。这就是我们之前重新映射按钮的原因。

要测试设置,请运行xbindkeys -n -v(这将在控制台上产生详细输出,让您看到滚动鼠标滚轮时到底产生了什么。如果一切顺利,这应该会产生如下内容:

user@host:~$ xbindkeys -n -v
displayName = :0
rc file = /home/sjl/.xbindkeysrc
rc guile file = /home/sjl/.xbindkeysrc.scm

min_keycode=8     max_keycode=255 (ie: know keycodes)
"/usr/bin/xte 'mouseup 6' 'mouseclick 4' 'mouseclick 4' 'mouseclick 4' &"
    m:0x0 + b:6   (mouse)
"/usr/bin/xte 'mouseup 7' 'mouseclick 5' 'mouseclick 5' 'mouseclick 5' &"
    m:0x0 + b:7   (mouse)
starting loop...
Button press !
e.xbutton.button=6
e.xbutton.state=0
"/usr/bin/xte 'mouseup 6' 'mouseclick 4' 'mouseclick 4' 'mouseclick 4' &"
    m:0x0 + b:6   (mouse)
got screen 0 for window ae
Start program with fork+exec call
Button release !
e.xbutton.button=6
e.xbutton.state=0
Button press !
e.xbutton.button=7
e.xbutton.state=0
"/usr/bin/xte 'mouseup 7' 'mouseclick 5' 'mouseclick 5' 'mouseclick 5' &"
    m:0x0 + b:7   (mouse)
got screen 0 for window ae
Start program with fork+exec call
Button release !
e.xbutton.button=7
e.xbutton.state=0

如果您现在将焦点移至某个可滚动窗口(例如 Firefox),您应该会看到滚轮滚动速度变为原来的三倍。

xbindkeys现在剩下要做的就是在启动 X 会话时在后台启动。这留给读者作为练习。

答案2

您可以通过命令行程序控制鼠标(和滚轮)的加速度xinput。用于xinput --list列出输入设备。然后,您可以使用鼠标的 ID 来列出其属性,例如xinput --list-props <ID>.应该有一个用于滚轮加速的。您可以通过更改它xinput --set-prop <ID> <propertyID> <value>。您可能需要对这些值进行一些试验才能找出正确的值。

答案3

我的 Microsoft 无线鼠标 1000 具有“Evdev 滚动距离”属性。

尝试增加到 3、3、3

xinput --set-prop 10 274 3, 3, 3

答案4

一般来说,鼠标滚轮分辨率由您使用的桌面环境决定。您当前使用的是哪种桌面环境?

相关内容