我使用 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 身份进行,就像我之前遇到问题一样......
- 按照上面的链接安装构建依赖项(例如对于我来说在 Ubuntu 上)。
sudo pip3 install meson
。sudo apt-get install ninja-build
。sudo apt-get build-dep libinput
。
git clone https://gitlab.freedesktop.org/libinput/libinput
。cd libinput
。- 编辑
./src/evdev.c:53
到您想要的时间(50
对我来说有好处)。即从#define DEFAULT_BUTTON_SCROLL_TIMEOUT ms2us(200)
到#define DEFAULT_BUTTON_SCROLL_TIMEOUT ms2us(50)
。 sudo meson --prefix=/usr builddir/
。sudo ninja -C builddir/
。sudo ninja -C builddir/ install
。- 重启。
应该可以做到这一点。
答案2
在 libinput 存储库中找到硬编码的常量/src/evdev.c:53
(Git commit df527b07b47f5f512db48f0c30c76137d173e230
):
#define DEFAULT_BUTTON_SCROLL_TIMEOUT ms2us(200)
遗憾的是,这意味着它不可配置。