某些应用程序无法使用自然滚动

某些应用程序无法使用自然滚动

我刚刚在 Linux 设置中启用了自然滚动,但它只对某些应用程序有效。发生了什么?

❯ cat .Xmodmap
pointer = 1 2 3 5 4 6 7 8 9 10

Chromium 和 Libreoffice 现在具有所需的滚动行为。Codium (VSCode) 和 Alacritty 仍然以错误的方向滚动(即使在重新启动后)。我正在运行 BSPWM,想不出有什么会影响此行为。

我的点文件已打开Github

我看到了一个相关的问题,对于某些 gtk 应用程序,使用 xmodmap 的键重新映射不起作用

答案1

在现代 X11(使用 XInput2 扩展)中,滚动不再只是一系列模拟鼠标按钮点击——它实际上是一系列运动事件。鼠标滚轮被视为相对运动轴;每次滚轮点击通常对应 15° 运动事件。

(触摸板总是无论您是否使用它们来滚动,它们都被视为运动设备 - 这种区别不再由硬件完成,双指滚动手势而是由软件识别,最常见的是 Xorg 中运行的 libinput。)

Xorg 仍然会为每个这样的滚动事件模拟一个假按钮按下,但通常由每个工具包来对一个事件做出反应或者另一个。越来越多的程序正在使用运动事件(这使得它们能够从触摸板获得像素精确的滚动,而不是跳跃式的步进滚动),并且完全不受“假按钮”更改的影响。

因此,一般来说,我根本不建议使用 xmodmap 来实现这一点(因为它完全基于传统的 X11“核心”输入机制)。相反,因为你的 Xorg 很可能使用xf86 输入库要访问输入设备,只需启用其已有的“自然滚动”选项。

在 Xorg 中,这可以通过 XInput2 设备属性来完成:

$ xinput
⎡ 虚拟核心指针id=2[主指针(3)]
⎜ ↳ 虚拟核心 XTEST 指针 id=4 [从属指针 (2)]
⎜ ↳ AlpsPS/2 ALPS GlidePoint id=11 [从属指针 (2)]
⎜ ↳ HP HP Link-5 微型加密狗鼠标 id=17 [从属指针 (2)]
⎜ ↳ ...
⎣ 虚拟核心键盘id=3[主键盘(2)]
    ↳ 虚拟核心 XTEST 键盘 id=5 [从属键盘 (3)]
    ↳ 电源按钮 id=6 [从属键盘 (3)]
    ↳ ...

$ xinput list-props “HP HP Link-5 微型加密狗鼠标”
设备‘HP HP Link-5 微型加密狗鼠标’:
    设备已启用(133):1
    坐标变换矩阵(135):1.000000, 0.000000, ...
    libinput 自然滚动已启用 (276): 0
    libinput 自然滚动启用默认值 (277):0
    libinput 加速度(285):0.000000
    libinput ...

$ xinput set-prop “AlpsPS/2 ALPS GlidePoint” “libinput 自然滚动已启用” 1

(此属性还有一个对应的 Xorg.conf 选项,请查看man 4 libinput是否要永久启用它。)

同时,每个 Wayland 合成器都有自己的配置 - 但是,它们中的大多数实际上使用相同的 libinput 库来处理原始输入事件,并且它们中的大多数已经为触摸板用户公开了 libinput 的“自然滚动”选项(它也应该对鼠标同样有效)。

在最坏的情况下,只需要在合成器的源代码中添加一行补丁即可:

libinput_device_config_scroll_set_natural_scroll_enabled(...);

相关内容