LOADING

加载过慢请开启缓存 浏览器默认开启

修复 libinput 鼠标点击抖动限制

2026/4/14

前言/废话

在 GNU/Linux 中, 无论是 wayland 还是 x11, 都会出现快速点击鼠标时 (例如 DBC), 最高只能识别到约 12 CPS, 而实际 CPS 为 20 CPS 的情况

症状

evtest 能检测到所有点击

libinput debug-eventswev 只能检测到部分点击

根源

libinput 1.23+ 版本引入了按键去抖动功能 (button debouncing) 用于防止硬件接触抖动导致的误触, 但这个功能默认会过滤掉间隔小于 25ms 的点击事件, 从而导致 CPS 被限制在 12 左右

虽然可以通过在 ‘/etc/libinput/local-overrides.quirks’ 中配置 ‘ModelDebounceTime=0’ ‘ModuelBouncingKeys=0’, 但几乎不生效

解决方案

直接通过修改 libinput 源码来禁用按键去抖动

安装编译依赖

sudo pacman -S --noconfirm base-devel git meson ninja libevdev mtdev systemd

克隆 libinput 源码

git clone https://gitlab.freedesktop.org/libinput/libinput.git && cd libinput

签出对应版本

git tag -l | grep 1.31.1 && git checkout 1.31.1

修改 src/libinput-plugin-button-debounce.c, 这里先备份

cp src/libinput-plugin-button-debounce.c src/libinput-plugin-button-debounce.c.bak

修改插件初始化函数

sed -i '855,864c\void\nlibinput_debounce_plugin(struct libinput *libinput)\n{\n\t/* Button debounce disabled permanently - no CPS limit! */\n\treturn;\n}' src/libinput-plugin-button-debounce.c

编译

meson setup builddir -Ddocumentation=false -Dtests=false && cd builddir && meson compile

安装

sudo meson install

编译默认安装到 /usr/local/lib, 由于我是 Archlinux, 默认从 /usr/lib/ 加载, 所以我们把安装好的复制过去

备份原库

sudo cp /usr/lib/libinput.so.10.13.0 /usr/lib/libinput.so.10.13.0.backup

复制新库

sudo cp /usr/local/lib/libinput.so.10.13.0 /usr/lib/

执行完上一步后系统应该会直接重新加载不需要手动重启, 现在直接打开浏览器 CPS 测试网站或者在游戏中开启 CPS 显示验证即可

预防措施

防止系统更新覆盖修改好的 libinput, 这边手动将其添加到 pacman 的 IgnorePkg

sudo nano /etc/pacman.conf
IgnorePkg = libinput

参考