Scroll to navigation

BUCKLE-LIBINPUT(1) User Commands BUCKLE-LIBINPUT(1)

NAME

buckle-libinput - Nostalgia bucklespring keyboard sound, libinput flavour

SYNOPSIS

buckle-libinput [options]

DESCRIPTION

Buckle emulates the sound of an old IBM Model-M space saver bucklespring keyboard while typing.

It runs as a background process and plays back the sound of each key pressed and released on the keyboard, just as if using an IBM Model-M. The sound of each key has carefully been sampled, and is played back while simulating the proper distance and direction for a realistic 3D sound palette of pure nostalgic bliss.

This flavour reads key events straight from the raw input devices in /dev/input through libinput, rather than from X11, so that it also works under a Wayland compositor and on the console. Those devices are not readable for ordinary users out of the box, and running it as root is no answer, as it then no longer reaches the sound daemon of the user session. The udev rule installed with this flavour, 70-bucklespring-libinput.rules, grants that access to the user at the local seat, and is inert until armed; read the comments in it for how, and for what it costs you.

libinput discards the key repeat the kernel generates for a held key and leaves repeating to its caller, so this flavour keeps its own clock. Nothing can tell it when a repeat has actually happened: a Wayland compositor sends no event per repeat, it tells each client the delay and the rate once and every client then runs a timer of its own, so the repeats that put characters on the screen exist only inside whichever window has the focus. What can be had is the delay and the rate themselves, and buckle asks in turn the compositor, which is authoritative under Wayland, then the input device, which is authoritative on the console, falling back on the kernel default of 250 ms and then one click every 33 ms. Should it still disagree with what you see on the screen, set it with --repeat-delay and --repeat-rate. Modifier keys never repeat. Use -r for the older behaviour, a single click however long the key is held.

The mouse clicks too: the buttons, and the scroll wheel, one click per detent. Two fingers scrolling on a touchpad make no sound, having no detents to make one for. Use --no-click to silence it, or to silence only some of it. Reading the mouse needs access to the pointer devices as well as the keyboard ones, which the shipped udev rule grants together.

The X11 flavour is buckle-x11(1).

Where it was built with the system tray, and there is a tray to put it in, an icon appears there with a menu for pausing, the volume, the output device and quitting. The volume is a submenu of levels with + and - at the ends of it, and rolling the wheel over the icon changes it without opening the menu at all. --no-tray leaves it out. The icon is a StatusNotifierItem, which KDE Plasma shows as it is and GNOME Shell shows through an extension; where nothing is listening there is simply no icon and nothing else changes.

OPTIONS

use OpenAL audio device DEVICE
use a fallback sound for unknown keys
set playback gain [0..100]
use CODE as mute key (default 0x46 for scroll lock)
start the program muted
don't play a sound on mouse click; LIST narrows it to some of left, middle, right, side, extra, wheel, hwheel, all, none
show help
list available OpenAL audio devices
load .wav files from directory PATH
stay silent while a held key auto repeats
wait MS before the first repeat, overriding what the compositor or the kernel says
make HZ repeats per second, likewise
set stereo width [0..100]
do not put an icon in the system tray
increase verbosity / debugging
show version and exit

AUTHOR

Written by Ico Doornekamp.

COPYRIGHT

Copyright © 2016-2025 Ico Doornekamp License GPLv2+: GNU GPL version 2 or later <https://gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law.

This manual page is generated from the output of buckle-libinput --help and --version by help2man(1), around wording written by Dominik George for the Debian project.

SEE ALSO

buckle-libinput.service(8), buckle-x11(1), update-alternatives(1)

October 2026 Bucklespring keyboard sound