libinput 按钮滚动:按下按钮和滚动之间的延迟

libinput 按钮滚动:按下按钮和滚动之间的延迟

我使用 libinput 为我的轨迹球启用“按钮滚动”,其中按住特定按钮会导致球运动转换为滚动运动。

xinput set-prop $TRACKBALL_ID "libinput Scroll Method Enabled" 0, 0, 1
xinput set-prop $TRACKBALL_ID "libinput Button Scrolling Button" 8

然而,按下按钮和滚动翻译开始之间可能有几百毫秒的延迟。时间线是这样的:

+---+---+-------
^   ^   ^
|   |   +-- scrolling starts
|   +-- start moving ball
+-- button down

当我开始移动球时并不重要 - 关键是在“按钮按下”和“确定,准备将移动转换为滚动”之间有一个固定的延迟。

看来这种延迟的存在是为了启用双模式按钮的使用。如果我只是快速按下并释放按钮,则会执行其正常功能(浏览器“后退”按钮)。

(有趣的是,按下按钮后,即使在滚动输出开始之前,光标也会立即静止。)

有没有办法配置这个延迟?如果有必要的话,我非常乐意牺牲双模式的使用。即使不可配置,谁定义了这个常量,在哪里定义的?也许我可以改变它的来源。

答案1

您可以更改@henrebotha突出显示的值并自行编译libinput以达到所需的效果。

这种延迟让我感到沮丧,所以我修改了DEFAULT_BUTTON_SCROLL_TIMEOUT常量(在源代码中找到)这里并编译,这似乎解决了问题。在过去的一个小时里进行了测试,没有观察到奇怪的行为。

我按照以下步骤操作这一页。一切都以 root 身份进行,就像我之前遇到问题一样......

  1. 按照上面的链接安装构建依赖项(例如对于我来说在 Ubuntu 上)。
    • sudo pip3 install meson
    • sudo apt-get install ninja-build
    • sudo apt-get build-dep libinput
  2. git clone https://gitlab.freedesktop.org/libinput/libinput
  3. cd libinput
  4. 编辑./src/evdev.c:53到您想要的时间(50对我来说有好处)。即从#define DEFAULT_BUTTON_SCROLL_TIMEOUT ms2us(200)#define DEFAULT_BUTTON_SCROLL_TIMEOUT ms2us(50)
  5. sudo meson --prefix=/usr builddir/
  6. sudo ninja -C builddir/
  7. sudo ninja -C builddir/ install
  8. 重启。

应该可以做到这一点。

答案2

在 libinput 存储库中找到硬编码的常量/src/evdev.c:53(Git commit df527b07b47f5f512db48f0c30c76137d173e230):

#define DEFAULT_BUTTON_SCROLL_TIMEOUT ms2us(200)

遗憾的是,这意味着它不可配置。

相关内容