增加鼠标滚轮滚动速度

如标题所述,我想增加使用鼠标滚轮滚动时传递的行数。我知道在Firefox和Chromium中有方法可以做到这一点,尽管我希望整个系统都能生效,主要是因为PDF阅读器。
我使用的是Microsoft Wireless Mouse 5000,桌面版。

21人们可能会认为这应该可以通过“鼠标和触摸板”系统配置来实现。可惜的是,我们目前仍然需要第三方软件。 - Domi
罗技有超级滚轮鼠标,它们拥有自由旋转的滚轮。就个人而言,我使用的是M705。仅仅更换硬件通常比尝试通过软件来实现相同效果要简单得多。但要小心,你可能最终希望减慢这些鼠标的滚动速度(这就是我偶然发现这个问题的方式)! - Yrogirg
可能是增加滚动速度的重复问题。 - Cees Timmerman
如果你关心鼠标滚动速度加速问题,也可以在这里查看:链接 - Albert
另请参阅:永久修复Chrome滚动速度 - Gabriel Staples
9个回答

事先准备

目前使用的输入驱动系统无法更改鼠标滚动速度,至少没有不良影响。您可以通过KDE设置来调整Qt应用程序的滚动速度,但当前通用方式改变滚动速度的唯一方法是使用imwheel,但这种方法在很多方面存在问题(请参见评论)。未来,这将通过libinput和systemd硬件数据库来修复。

当前方式

使用以下命令安装imwheel或者从软件中心安装:

$ sudo apt-get install imwheel

使用您选择的编辑器(例如gedit),创建(如果必要)并编辑配置文件~/.imwheelrc。填写以下内容以增加每个命令的滚动速度。注意:此配置文件将将这些新的滚动设置应用于所有程序(包括终端,这可能不是您想要的)。

".*"
None,       Up,     Up,     3
None,       Down,   Down,   3

如果你只想将这些设置应用于Chrome,那么请使用以下设置:
".*-chrome*"
None,       Up,     Up,     3
None,       Down,   Down,   3

3是一个滚轮倍增器,用于增加滚轮的效果。在项目的README中,它被称为"REPS"。README中写道:
[ REPS ] Reps(重复)允许您指定输出按键符号被按下的次数。请参考默认绑定的图表,了解每个修饰组合的默认重复次数(该图表位于本文档末尾附近)。
换句话说,它是一个滚轮倍增器。如果REPS设置为3,那意味着当您的鼠标滚轮执行一次滚动命令时,软件会拦截此命令并发送3个命令给计算机,从而使其滚动的距离变为原来的3倍,或者说更"快"。
要获取更多信息,请查看manpage。
$ man imwheel

或者请参考项目的README
您可以通过输入以下命令来启动imwheel
$ imwheel

确保不要启动两次imwheel!这是一个已知的错误,但你可以使用以下命令停止imwheel:
$ killall imwheel

要让imwheel在计算机启动时自动运行,你必须在加载x窗口后将其添加到启动菜单中。重要提示:由于imwheel依赖于已经运行的x窗口,如果将其添加到crontab、/etc/init.d或/etc/rc.local中,它将无法工作。这意味着你必须按照以下方式进行操作:
Ubuntu:
使用"启动应用程序"GUI编辑器将imwheel添加为启动程序:https://askubuntu.com/a/48327/327339 Xubuntu:
使用"会话和启动"GUI编辑器 --> 应用程序自动启动 --> 添加以将imwheel作为启动程序添加进去。

enter image description here

更多屏幕截图请参见:https://askubuntu.com/a/369443/327339

未来展望

本教程目前正在开发中。

libinput 似乎已包含在Wily Werewolf (15.10)版本中,您需要安装xserver-xorg-input-libinput软件包。安装完libinput后,您可以使用以下命令:

$ sudo apt-get install xserver-xorg-input-libinput

在重新启动Xorg(注销即可)之后,应该对每个输入都使用它。现在你正在使用libinput,你可以调整鼠标的设置。你可以在文件/lib/udev/hwdb.d/70-mouse.hwdb中找到完整的教程。我在这里只介绍基础知识。

以下步骤需要以root身份执行。因此,我友情提醒你,你所做的一切都需要负责任。

首先使用lsusb获取厂商ID <vid>和产品ID <pid>。以MX 518罗技鼠标为例。如果在lsusb的输出中有以下行:

Bus 005 Device 002: ID 046d:c051 Logitech, Inc. G3 (MX518) Optical Mouse
<vid>046d,而 <pid>c051
然后使用 gksudo gedit /etc/udev/hwdb.d/71-mouse-local.hwdb 命令创建一个类似下面的文件。
mouse:usb:v<vid>p<pid>:name:*:
    MOUSE_WHEEL_CLICK_ANGLE=??

例如,对于上面的Logitech MX 518示例,可以使用此文件。
mouse:usb:v046dpc051:name:*:
    MOUSE_WHEEL_CLICK_ANGLE=30

这个文件将鼠标滚轮点击角度设置为30°(默认通常为15°)。要使用此设置,请使用以下命令更新硬件数据库(hwdb):
udevadm hwdb --update
udevadm trigger /dev/input/event${id}

通过使用xinput(注意鼠标的id),可以找出${id},然后运行xinput list-props ${xinput_id}

3太好了!谢谢,虽然我唯一要抱怨的是使用imwheel会禁用在Unity启动器上通过鼠标滚动图标来切换窗口的功能。 - Rodrigo Oliveira
2不客气。昨天我检查了你的问题,如果你只需要在pdf 阅读器上增加滚动速度,你可以将".*" 替换成 "Evince"(如果你使用的是 Evince)。这样 Unity-Launcher 就会按预期工作。 - tvn
2数字能再小一点吗?我的滚轮滚动得太快了。尝试将'3'替换为'1'仍然太快。 - DarenW
1@DarenW 你试过像 '0.5' 或者 '0.1' 这样的数字吗? - Rodrigo Oliveira
6这是一个糟糕、粗糙且不太有效的方法。在Nautilus中,标记的文件跳转3行而不是实际滚动。当你越过边界时它会滚动,但就像键盘上按了3次向上/向下一样。在Sublime Text和许多其他程序中也是如此。(Ubuntu 13.10) - redanimalwar
1明白了,已经成功解决了,请查看我的回答。 - redanimalwar
1当运行imwheel时,在Chromium标签栏上滚动不会切换选项卡。 - Amir Karimi
116.04 LTS 有更新吗?对我来说,只有第一种(当前的)方法有效。 - loki
然而,这种方法缺少“鼠标悬停滚动”效果。有人能帮忙解决这个问题吗? - loki
我尝试了各种配置方法,包括libinput,但无法使更改生效。我使用的是elementary 0.4版本,但我想16.04的说法意味着libinput并没有像我们想象的那样实施。 - Wolf
想要自动化这个的人们:不要考虑“新兴”(太早了),只需将其添加到启动应用程序中即可。 - Frank N
`imwheel --kill'现在是一个用来关闭不需要的先前实例的选项。 - Frank N
有没有办法消除终端窗口中的讨厌副作用?(现在鼠标滚轮会迭代之前的命令,而不是滚动窗口内容) - Frank N
1有没有办法消除终端窗口中的讨厌副作用?(鼠标滚轮现在迭代之前的命令而不是滚动窗口内容)- 答案8-):有,即通过将第一行中的匹配器限制为名为".*-chrome"的窗口。 - Frank N
6有人已经成功使用Future解决方案了吗?我尝试过,但是没有使其工作。我希望知道是否成功更改了MOUSE_WHEEL_CLICK_ANGLE的方法,但是我不知道如何检查它的当前值。默认角度因鼠标而异,可以在/usr/lib/udev/hwdb.d/70-mouse.hwdb中看到,目前大多数鼠标的角度为15。 - miyalys
".-chrome" 可能是指 ".*-chrome.*" - Frank N
1很好,但一点也不容易。 - wayofthefuture
4@miyalys libinput debug-events 应该显示滚动和其他指针事件,这样你至少可以看到数字是否根据你的自定义配置发生了变化。 - Jani Uusitalo
libinput(未来)方法对我不起作用。 - zwolin
现在示例文件位于/lib/udev/hwdb.d/70-mouse.hwdb - sjas
1对我来说,未来的解决方案也没有起作用,所以我提交了以下错误报告https://github.com/systemd/systemd/issues/10459。如果对你也不起作用,请在那里留下评论。 - InvisibleShadowGhost
点击角度属性似乎并不是用来设置滚动速度的。虽然它可以起到这样的作用,但更多地是用于硬件特定设置,以使每个鼠标滚动相同的距离。问题在于libinput目前似乎不支持更改滚动速度。因此,我为滚动速度创建了一个问题,希望您能通过投票来支持:https://gitlab.freedesktop.org/libinput/libinput/issues/185 - clel
Steven C. Howell的回答(https://askubuntu.com/a/621140/327339)比这个更好,这是我的改进版本:https://askubuntu.com/a/991680/327339。 - Gabriel Staples
在Lubuntu 19上安装和启动imwheel对我来说很有效,它修复了鼠标滚轮失灵的问题。 - Felipe
1那对我来说已经够用的ubuntu了。非常好的服务器软件,但作为桌面系统没什么用。就连像改变滚轮速度这样简单的事情都需要掌握大量cli和Linux内核的基础知识。我会继续在我的web服务器上使用你,但恐怕我得回到Windows了。 - Abraham Brookes
我只使用Ubuntu大约10天,你极大地改善了我的体验!谢谢! - Michael Malinovskij
在Ubuntu 22.04中,imwheel似乎在x11和Wayland窗口管理器中都能很好地与Chrome配合使用,但它只能在x11中与其他程序(如Sublime Text)一起工作!在Wayland中无法正常工作。有什么想法或者如何修复这个问题吗? - Gabriel Staples

请注意,使用推荐的~/.imwheelrc并不能真正增加滚轮速度。相反,它将滚动替换为多次箭头键操作。这样做的缺点是在您切换焦点之前无法滚动窗口,而这不是默认行为。本答案旨在提供一个更接近原生行为的替代方案。
为了提供一个简洁的答案,适用于Ubuntu >14.04(结合了@tvm@redanimalwar的回答以及@aroll605的评论),似乎最好的选择是安装imwheel并按照以下步骤进行配置以实际增加滚轮速度:
  1. 通过运行以下命令安装 imwheel

    sudo apt install imwheel
    

    (根据您的系统,将 apt 替换为 apt-get)

  2. 编辑 ~/.imwheelrc 文件:

    gedit ~/.imwheelrc
    

    并粘贴以下内容:

     ".*"
     None,      Up,   Button4, 3
     None,      Down, Button5, 3
     Control_L, Up,   Control_L|Button4
     Control_L, Down, Control_L|Button5
     Shift_L,   Up,   Shift_L|Button4
     Shift_L,   Down, Shift_L|Button5
    

    您可以尝试不同的数值替换以下行中的 #

     None,      Up,   Button4, #
     None,      Down, Button5, #
    
  3. 使用以下命令测试设置:

    killall imwheel && imwheel -b "4 5"
    
  4. 打开“启动应用程序”并添加:

    imwheel -b "4 5"
    

    请注意,使用选项 -b "4 5" 限制了 imwheel 只影响滚轮,详细讨论请参考 here


2我的滚动真的很卡/延迟。 - Wolf
1@Wolf,你试过在#的位置尝试较小的值吗?比如21,甚至是一个小数值,例如0.5 - Steven C. Howell
是的。它似乎即使在低数字时也会出现卡顿,比如滚轮点击有时会滚动一点然后跳过剩余的距离。我移除了该程序并回到了流畅的状态,只是滚动间隔不太理想。我认为增加一些关于数字含义的说明会很有用,尽管对我来说,在考虑到所有卡顿情况下,2这个解决方案效果最好。 - Wolf
我建议尝试另一只鼠标来进行比较行为,不是作为解决方案,而是为了缩小问题的来源范围。如果另一只鼠标仍然跳跃,那么您的配置中肯定存在问题;您可以通过使用一个实时CD来测试,以查看自安装以来是否有任何更改。如果另一只鼠标没有跳跃,那么很遗憾您选择的鼠标在Ubuntu上支持得不好;也许您可以搜索其他使用相同鼠标的人并看看他们做了什么。 - Steven C. Howell
这对我有效。 - Jamie Hutber
2这个答案在这个页面上我认为是最好的!但是...我现在已经改进了你的答案,我认为做出了更好的答案:https://askubuntu.com/a/991680/327339。我在`~/.imwheelrc`文件的顶部添加了`".*-chrome*"`而不是`".*"`,这样这些新设置只适用于我的 Chrome 浏览器,而不会影响其他东西。 - Gabriel Staples
坦白说,这个回答应该被接受,因为现在的回答就像楼主说的那样,只是一堆上下箭头,而不是鼠标滚动。在文档和终端中真的很烦人...谢谢! - JulioQc

// 编辑

由于这个帖子偶尔会得到一些赞扬: 我不再使用它(重新安装后的懒惰),而且我现在认为这个脚本的滑块和其他东西太过繁琐。此外,人们随着时间的推移已经指出了一些问题。所以作为一个极简主义者,我现在自己创建了配置。对于大多数人来说,这可能只是一次性的事情。

我已经编辑了这个,让它成为一个包含所有你需要的四步指南。

另一个更新:由于我切换到 KDE,它实际上有一个针对此设置和数百万其他 Gnome 不具备的功能的设置(甚至没有意识到我多么想念 KDE)。问题是 KDE 的鼠标设置实际上对 Firefox(以及我认为的其他 GTK 应用程序)没有任何效果,但由于我使用它主要是为了网页浏览,我现在发现你实际上可以调整 Firefox 中鼠标滚动的速度。

about:config
mousewheel.default.delta_multiplier_y

我将其设置为600,对我来说很完美

// 编辑结束

被接受的答案有一个配置,出于某种原因将滚动映射到键盘上的上下方向。对我来说没有意义。

我找到了一个完美的脚本,实际上将其映射到鼠标,并添加了一个GUI来设置鼠标速度。

#!/bin/bash
# Version 0.1 Tuesday, 07 May 2013
# Comments and complaints http://www.nicknorton.net
# GUI for mouse wheel speed using imwheel in Gnome
# imwheel needs to be installed for this script to work
# sudo apt-get install imwheel
# Pretty much hard wired to only use a mouse with
# left, right and wheel in the middle.
# If you have a mouse with complications or special needs,
# use the command xev to find what your wheel does.
#
### see if imwheel config exists, if not create it ###
if [ ! -f ~/.imwheelrc ]
then

cat >~/.imwheelrc<<EOF
".*"
None,      Up,   Button4, 1
None,      Down, Button5, 1
Control_L, Up,   Control_L|Button4
Control_L, Down, Control_L|Button5
Shift_L,   Up,   Shift_L|Button4
Shift_L,   Down, Shift_L|Button5
EOF

fi
##########################################################

CURRENT_VALUE=$(awk -F 'Button4,' '{print $2}' ~/.imwheelrc)

NEW_VALUE=$(zenity --scale --window-icon=info --ok-label=Apply --title="Wheelies" --text "Mouse wheel speed:" --min-value=1 --max-value=100 --value="$CURRENT_VALUE" --step 1)

if [ "$NEW_VALUE" == "" ];
then exit 0
fi

sed -i "s/\($TARGET_KEY *Button4, *\).*/\1$NEW_VALUE/" ~/.imwheelrc # find the string Button4, and write new value.
sed -i "s/\($TARGET_KEY *Button5, *\).*/\1$NEW_VALUE/" ~/.imwheelrc # find the string Button5, and write new value.

cat ~/.imwheelrc
imwheel -kill

还有一个视频进行了介绍。我甚至还没看完这个视频,因为它安装起来非常迅速。下面的操作将安装所需的软件包,下载脚本并执行:
sudo apt-get install -y imwheel
wget http://www.nicknorton.net/mousewheel.sh ~/bin/set-mousewheel
chmod +x ~/bin/set-mousewheel
~/bin/set-mousewheel

设置一个漂亮的滑块来调整鼠标滚轮速度,让你开心起来。之后只需使用set-mousewheel命令进行更改。
不确定imweel是否在安装后自动启动,如果没有的话,我们需要将其添加到启动应用程序中。

2真是太棒了!这个脚本在Ubuntu 14.04 LTS上不能直接使用,但如果我将脚本中的配置直接提取出来放到.imwheelrc文件里,它就能完美运行。 - aroll605
在14.04 LTS中似乎存在一个问题。偶尔,它会完全停止滚轮的工作,直到我重新启动进程。这只发生在启动时,并且“imwheel”已包含在启动应用程序列表中。 - aroll605
2我遇到了一个问题,即 imwheel 会禁用鼠标的后退/前进按钮。解决方法是使用选项“imwheel -b“4 5””启动 imwheel,以将其限制为滚轮:http://askubuntu.com/questions/421645/imwheel-destroys-back-forth-navigation-buttons-from-my-mouse - jmiserez
1太好了,但是你不能使用返回/前进按钮。 - Jamie Hutber
在映射方面的工作做得很好,但是脚本在我的Ubuntu上没有运行:命令zenity --scale --window-icon=info --ok-label=Apply --title="Wheelies" --text "Mouse wheel speed:" --min-value=1 --max-value=100 --value="$CURRENT_VALUE" --step 1返回错误: 此选项不可用。请参阅--help以获取所有可能的用法。 - Mobigital

我的建议是:我的Microsoft Sculpt Ergonomic鼠标在Ubuntu 15.04(Lenovo ThinkPad x220)上每次滚动大约半页,这真的让我很烦恼。我尝试了各种解决方案,但最后想到了将鼠标从USB端口(无线接收器)断开并重新连接。哇!滚动速度恢复正常了 :). 希望对某人有所帮助。

4我有相同的设置,遇到了相同的问题,并获得了相同的成功结果。很高兴在尝试其他方法之前读到了这个答案。谢谢@sammy34 - nic
2我也是,重新连接一下无线适配器就解决了。微软无线鼠标2000。 - SlimDeluxe
2这怎么可能是一个解决方案????但它起作用了 :) 谢谢 :) - Himanshu Bhandari
遇到相同问题(Microsoft Sculpt + ThinkPad + Ubuntu 18.10) 拔下并重新插入就解决了! - jvoigt
哇,重新连接微软 Arc 无线适配器也成功了。但是为什么呢? - lkraav
最好的解决方案:)罗技MK710 - StahlRat

尽管上述的imwheel建议有所帮助,但我发现移除机械滚轮点击机制使得我的鼠标滚轮使用起来更加愉快 - 不仅消除了点击声音,还使其控制起来更加快速和精确
而且只需要3分钟 - 请查看以下说明:

http://www.instructables.com/id/Making-a-mouse-wheel-not-click./

简而言之,你要移除这个左弹簧(请小心确保将正确的弹簧放回原位):

enter image description here

注意:我有一只标准的廉价鼠标 - Logitech B100,其他人报告在类似型号上取得了成功。你的情况可能会有所不同。

使用xmodmap来禁用鼠标中键更加简单。(xmodmap .Xmodmap)其中你的.Xmodmap文件包含一行"pointer = 1 0 3 4 5 6 7 8 9 10 11 12 13 14 15 16"。零表示关闭中键。在启动时运行xmodmap [你的.Xmodmap路径]。 - Harryg123
我推荐这个。我也有一个罗技B100,做了这个之后,我不再感到滚动的摩擦力了。现在我可以愉快地滚动长页面,而不会被噪音逼疯。 - Manish Chandra Joshi

imwheel在Chrome中会发出双倍的滚动事件,这很烦人。
对于i3wm和libinput用户,我建议使用libinput_patch,它提供了实时更改滚动增量的选项,在我的使用情况下要好得多。

我还想增加鼠标滚轮的加速度,而不仅仅是绝对速度。这是MacOSX中的一个功能,但在Xorg(以及Wayland)中尚未内置。
我在用户空间实现了这样一个功能在这里(鼠标滚轮加速度用户空间)。 这将增加滚动速度,或加快滚动速度。 您只需在后台运行此程序,并选择您喜欢的选项。 代码非常简单,使用Python编写,也很容易进行修改。
安装方法:
# get the tool
git clone https://github.com/albertz/mouse-scroll-wheel-acceleration-userspace.git
cd mouse-scroll-wheel-acceleration-userspace

# install Python dependencies
sudo apt install python3-pip
pip3 install --user -r requirements.txt  # (basically pynput)

# run the tool
./main.py -v --exp 1  # example flags. see --help
# (leave this running in background)

1或许你可以在这里添加安装说明? - Zanna
1@Zanna:好的,非常简单。我已经添加了。 - Albert
2虽然这不是一个完美的“增加滚轮速度”的解决方案,但实际上这要好得多(在我看来)。添加加速支持的好处是,您仍然可以在需要时缓慢滚动。非常感谢您提供如此优雅的解决方案。 - Tafel
点赞了,但我觉得还需要改进。在运行默认的Wayland窗口管理器的Ubuntu 22.04上进行了测试。这个工具确实能用,但有些不稳定,在非常缓慢滚动鼠标滚轮时经常会丢失编码器计数。关闭该工具后,我的电脑可以再次响应每个滚轮刻度。 - Gabriel Staples
同样,就像imwheel在除了Chrome之外的程序中工作有问题一样,比如在Sublime Text中(我会在这里简要描述),这个工具也不能在除了Chrome之外的程序中工作,比如在Sublime Text中。 - Gabriel Staples

我刚刚搜索了这个问题,因为在重新启动后,我的鼠标滚轮变得非常慢。 尝试使用不同的应用程序(如imwheel等)来解决它,但最终我只是将鼠标拔下来再插回去,结果就恢复正常了。 所以,如果速度在重新启动之间发生了变化而你没有做任何操作,那么这个方法可能值得一试。

我修改了mousewheel.sh文件,以便包括水平滚动速度调整功能。
#!/bin/bash
# Version 0.1 Tuesday, 07 May 2013
# Comments and complaints http://www.nicknorton.net
# GUI for mouse wheel speed using imwheel in Gnome
# imwheel needs to be installed for this script to work
# sudo apt-get install imwheel
# Pretty much hard wired to only use a mouse with
# left, right and wheel in the middle.
# If you have a mouse with complications or special needs,
# use the command xev to find what your wheel does.
#
### see if imwheel config exists, if not create it ###
if [ ! -f ~/.imwheelrc ]
then
cat >~/.imwheelrc<<EOF
".*"
None,      Up,   Button4, 1
None,      Down, Button5, 1
Control_L, Up,   Control_L|Button4
Control_L, Down, Control_L|Button5
Shift_L,   Up,   Shift_L|Button4, 1
Shift_L,   Down, Shift_L|Button5, 1
EOF
fi
##########################################################
CURRENT_VALUE=$(awk -F '[|]Button4,' '{print $2}' ~/.imwheelrc)
NEW_VALUE=$(zenity --scale --window-icon=info --ok-label=Apply --title="Wheelies" --text "Mouse wheel speed:" --min-value=1 --max-value=100 --value="$CURRENT_VALUE" --step 1)
if [ "$NEW_VALUE" == "" ];
then exit 0
fi
sed -i "s/\($TARGET_KEY *Button4, *\).*/\1$NEW_VALUE/" ~/.imwheelrc # find the string Button4, and write new value.
sed -i "s/\($TARGET_KEY *Button5, *\).*/\1$NEW_VALUE/" ~/.imwheelrc # find the string Button5, and write new value.
cat ~/.imwheelrc
killall imwheel ; 
imwheel
imwheel -kill -b "4 5"

添加第三和倒数第二行以在manjaro / arch上杀死和重新启动imwheel进程,如果它们在ubuntu上导致错误,请将其删除。