Chrome/Chromium 在 Linux 和 Mac 上使用中键滚动

点击中间按钮无法滚动页面。有没有办法修复这个问题?
信息:
1. Ubuntu 10.10 2. Chromium 9.0.597.94 3. Logitech MX518
更新:还有Chrome和其他基于Chromium的浏览器。
5个回答

在基于Linux/Mac系统的操作中,Google Chrome / Chromium没有这个功能。 你需要安装一个扩展,例如:AutoScroll AutoScroll

2太棒了 - 对我有用。 - Mark Rooney
23真可惜默认情况下他们没有这个。 - Jeggy
你如何控制速度? - khatchad
不是在设置里吗? - antivirtel
1回答不错,但是为什么你要让我点击图片,而不是提供一个普通的链接呢? - mwfearnley
@mwfearnley,我特意为你修改了它 :) - antivirtel
这个扩展在某些情况下会阻止鼠标按下事件。而且它可能会破坏一些网站的行为 :( 例如:它可能会导致在新标签页中打开某些内容的<span>元素无法正常工作。 - faiwer
@faiwer然后向开发者报告此问题,将其视为一个错误! - antivirtel
我看到了代码。我认为这不是一个错误。这是一种方法的特性。它在开始滚动之前不需要等待鼠标移动。 - faiwer
这个答案更好,应该被接受:https://askubuntu.com/a/868173/37979 - jtolds
这个方法还行,但是它只适用于启用了JavaScript的网站,所以一些更注重安全性的用户可能不太喜欢。这里有一个系统级的替代方案:https://unix.stackexchange.com/questions/472398/can-i-make-middle-mouse-scrolling-behave-more-like-autoscrolling/472451#472451 - Cestarian

这将适用于您的所有应用程序,无需安装任何内容。
获取您的输入设备ID号码。
xinput list

要列出可用的属性,请使用xinput list-props $deviceId。如果您正在使用libinput(未来/现在),几乎所有属性都将以libinput开头(还要检查libinput list-devices)。

测试:您始终可以使用libinput debug-eventsxevevtestevemu-recordxinput --test $deviceId来测试输入设备。

使用libinput

自从17.04版本以来,Ubuntu使用libinput来设置鼠标属性。
# xinput device option setting
xinput set-prop $deviceId "libinput Scroll Method Enabled" 0, 0, 1  # _button_ as scroll method
xinput set-prop $deviceId "libinput Button Scrolling Button" 2      # Using middle buttpn. Already 2 by default

xinput set-prop $deviceId "libinput Natural Scrolling Enabled" 1    # OPTIONAL, for natural scrolling. You can also get this with gsettings set org.gnome.desktop.peripherals.mouse natural-scroll true

man libinput的描述:

  • libinput滚动方法已启用 3个布尔值(8位,0或1),按顺序为“双指”、“边缘”、“按钮”。表示当前设备上启用的滚动方法。
  • libinput按钮滚动按钮 1个32位值。设置用于按钮滚动的按钮编号。此设置与滚动方法无关,要启用按钮滚动,必须将方法设置为按钮滚动,并设置有效的按钮。

使用evdev

xinput --set-prop $deviceId 'Evdev Wheel Emulation' 1
xinput --set-prop $deviceId 'Evdev Wheel Emulation Button' 2
xinput --set-prop $deviceId 'Evdev Wheel Emulation Axes' 6 7 4 5

  • 你可以把这个添加到一个bash脚本中并在登录时运行。
  • 和鼠标滚轮一样,按住Ctrl键并进行相同的手势会放大/缩小页面。按下Ctrl + 0进行重置。
  • Ubuntu 20.04默认使用X。 可能也适用于Wayland
  • 比Firefox的自动滚动更好,更容易控制。
  • ArchLinux Wiki的Libinput

在Ubuntu 16.04上对我无效;运行建议的evdev命令中的第一个命令会给我返回*"属性 'Evdev Wheel Emulation' 不存在,您需要指定其类型和格式"*。 - Mark Amery
@markAmery 我也在使用Ubuntu 16.04。很可能你正在使用libinput。列出设备属性。如果有帮助,请别忘了点赞。 - Pablo Bianchi
7这是最好的答案,应该被接受。 - jtolds
evdev运行得非常顺利。只是要注意我的鼠标设备编号是10而不是11 - piepi
@piepi 我修改了我的回答,让它更清楚一些,11只是我的情况。如果你觉得有用的话,请别忘了点赞。 - Pablo Bianchi
这个方法非常有效。下一个问题是,我如何设置这个脚本在鼠标插入时自动运行?否则,如果脚本已经运行,而后插入了鼠标,那么更改将不会生效。 - Arthur Colombini Gusmão
@ArthurColombiniGusmão 你可以创建一个脚本并使用udev规则 - Pablo Bianchi
谢谢 @PabloBianchi。我忘了提到我已经尝试过了,但是由于某种原因脚本失败了,显示无法访问 Xserver。也许在脚本中添加一些延迟可以作为一种解决方法,但我不确定如何正确执行这个操作。 - Arthur Colombini Gusmão
这些属性不能在/usr/share/X11/xorg.conf.d中设置吗?这样就不需要使用udev脚本了吗? - Arthur Colombini Gusmão
如果你想在开始操作之前查看数值,可以使用 xinput list-props ##,其中 ## 是从 xinput list 中获取的设备编号。 - CTS_AE
太棒了。谢谢 @PabloBianchi - Tim Richardson
使用"Evdev"的命令在我在Arch Linux上无法工作。 - elig
当我释放鼠标点击后,剪贴板上的内容也被粘贴了。我是否可以在释放中间按钮时不粘贴剪贴板上的任何内容? - Varun Chhangani

TLDR:

在Chrome/Chromium/Electron或任何基于Chromium的应用中使用此标志

--enable-blink-features=MiddleClickAutoscroll

确保在运行此程序之前关闭所有 Chrome 实例。
要使其永久生效,您可以编辑 .desktop 文件,并在 Exec= 行的末尾添加此标志(浏览器通常有许多 Exec= 行用于右键操作,主要的在 [Desktop Entry] 下面,但您可能希望对它们都进行更改)。
对于 Chrome 来说,桌面文件可以在以下路径中找到:
/usr/share/applications/google-chrome.desktop 解释: 在 Linux/Mac 上禁用鼠标中键自动滚动的代码在 这里,基本上是说如果在 Windows 上运行,则启用此闪烁 Runtime Enabled 功能。
根据Chromium维基的说法,您可以使用--{enable,disable}-blink-features来启用或禁用闪烁运行时启用的功能。 根据此处找到的信息,该功能称为MiddleClickAutoscroll,因此应为--enable-blink-features=MiddleClickAutoscroll。 唯一需要注意的是,当您使用此标志时会出现一个警告消息。除此之外,在Chrome/-ium、基于Chromium的浏览器(如Brave)和Electron应用程序(如Discord、Slack等)上都能完美运行。
备注:
  1. 我只在Linux上进行了测试,但在Mac上可能也可以以同样的方式工作。
  2. 使用enable-featuresblink-enable-features标志既不被Chrome/Chromium或您正在使用的其他浏览器推荐,也不受其支持。这就是为什么会显示警告消息,这些选项仅用于测试目的。如果在启用此标志后遇到任何错误,请确保在发送错误报告之前将其禁用。
  3. 似乎有一个原因,默认情况下(至少在Linux上)禁用了此功能。如果您正在使用Xorg(x11)并尝试在选择文本框时使用自动滚动,它将把最后选择的文本粘贴到其中。修复此问题的方法是"禁用"选择剪贴板

1请注意,要使--enable-blink-features=MiddleClickAutoscroll生效,您需要先关闭所有的Chrome实例。如果您在保持此窗口打开的同时尝试在新窗口中运行其他答案,它将无法工作。在运行此命令之前,请关闭所有Chrome实例!另外值得注意的是,在Ubuntu中,Chrome的可执行文件位于/opt/google/chrome/chrome,因此您应该运行/opt/google/chrome/chrome --enable-blink-features=MiddleClickAutoscroll - Adrian
1Chrome的桌面文件路径是/usr/share/applications/google-chrome.desktop - Adrian

我推荐另外两个插件,可以让你在鼠标下方滚动页面。我发现这样可以更好地控制滚动。 使用这两个插件,你只需按住鼠标右键并移动鼠标上下甚至水平方向即可滚动页面。

名为“Scrollbar Anywhere”的扩展比“AutoScroll”更好,因为它不会在网页上阻止不必要的鼠标按下js事件。 - faiwer

我使用的是Ubuntu 14.04,其中一个Chrome实例中鼠标滚轮突然失效了。我按照这里的提示进行操作,效果非常好。当我进入页面about::flags时,发现"平滑滚动"选项被启用了。我将其禁用后问题解决了。