KeyChatter is a lightweight C++ utility that filters out mecanical keyboard chatter on Linux.
- A C++ compiler (e.g.
g++) libevdevdevelopment headers- Linux kernel support for
uinput
On Debian/Ubuntu:
sudo apt install g++ libevdev-devg++ -std=c++17 -o keychatter main.cpp $(pkg-config --cflags --libs libevdev)ls -l /dev/input/by-id/Example:
ls -l /dev/input/by-id/
total 0
lrwxrwxrwx 1 root root 10 Jun 13 17:25 usb-Razer_Razer_BlackWidow_V4-event-if01 -> ../event17
lrwxrwxrwx 1 root root 10 Jun 13 17:25 usb-Razer_Razer_BlackWidow_V4-event-kbd -> ../event15
lrwxrwxrwx 1 root root 10 Jun 13 17:25 usb-Razer_Razer_BlackWidow_V4-if01-event-kbd -> ../event16
lrwxrwxrwx 1 root root 10 Jun 13 17:25 usb-Razer_Razer_BlackWidow_V4-if02-event-mouse -> ../event27
lrwxrwxrwx 1 root root 9 Jun 13 17:25 usb-Razer_Razer_BlackWidow_V4-if02-mouse -> ../mouse4In my case the correct one is usb-Razer_Razer_BlackWidow_V4-event-kbd
When started manually it may spam the last used key (enter most likley) untill you press any key. As the kernel is slightly confused
sudo ./keychatter /dev/input/by-id/usb-Razer_Razer_BlackWidow_V4-event-kbd [threshold_ms]/dev/input/by-id/usb-Razer_Razer_BlackWidow_V4-event-kbd: Path to your keyboardthreshold_ms(optional): Milliseconds to treat as chatter (default:55)
To run KeyChatter automatically at startup:
sudo cp keychatter /usr/local/bin/# /etc/systemd/system/keychatter.service
[Unit]
Description=KeyChatter - Keyboard Debounce Filter
After=network.target
[Service]
ExecStart=/usr/local/bin/keychatter /dev/input/by-id/usb-Razer_Razer_BlackWidow_V4-event-kbd
Restart=on-failure
StandardOutput=journal
StandardError=journal
[Install]
WantedBy=multi-user.targetReplace
/dev/input/by-id/usb-Razer_Razer_BlackWidow_V4-event-kbdwith your actual keyboard device.
sudo systemctl daemon-reexec
sudo systemctl enable --now keychatter.serviceTo view logs
sudo journalctl -u keychatter.service -fMIT License — use responsibly. Contributions and suggestions welcome!