table of contents
| BUCKLE-LIBINPUT.SERVICE(8) | System Manager Configuration | BUCKLE-LIBINPUT.SERVICE(8) |
NAME¶
buckle-libinput.service - systemd user unit for the bucklespring keyboard sound
SYNOPSIS¶
buckle-libinput.service
/usr/lib/systemd/user/buckle-libinput.service
DESCRIPTION¶
A systemd(1) user unit which runs buckle-libinput(1) for the duration of a desktop session, so that the keyboard sounds like an IBM Model M without anything having to be started by hand.
The unit is shipped disabled: a program that makes a noise on every keystroke is better asked for than sprung on you. Enable it, for your own account only, with
and undo that with systemctl --user disable --now buckle-libinput. Neither needs root.
SESSION LIFETIME¶
The unit is wanted by graphical-session.target, and declared PartOf it, so it follows that target, which the desktop session starts at login and which is stopped again at logout. So the sound follows the session on the local seat: it begins when you log in there and ends when you log out.
That is deliberately not default.target. Where the account has lingering enabled, see loginctl(1), the per user service manager is started at boot and kept running until shutdown, whether or not anybody is logged in; a unit wanted by default.target would then play to an empty room.
There is no equivalent for a login on a plain text console. systemd has a target for the graphical session but none for a session on a tty, and systemctl --user units live in one service manager per user rather than one per session, so there is nothing for such a unit to follow. On the console start it by hand.
CONDITIONS¶
The unit carries a ConditionPathExists on /etc/bucklespring/uaccess, the flag file which arms the udev rule that grants the user at the local seat read access to the input devices. Until that access has been granted buckle-libinput(1) has nothing to listen to, so the unit stays inert rather than starting a process which can only fail; see /usr/share/doc/bucklespring-libinput/README.Debian for how to grant it, and for what it costs you.
When granting the access some other way, such as through the input group, override the condition with
putting ConditionPathExists= on a line of its own in the drop-in to clear it.
FILES¶
- /usr/lib/systemd/user/buckle-libinput.service
- The unit itself. Do not edit it; it is replaced on upgrade.
- ~/.config/systemd/user/buckle-libinput.service.d/
- Drop-in directory for local changes, as created by systemctl --user edit buckle-libinput.
- /etc/bucklespring/uaccess
- Flag file the unit is conditioned on.
SEE ALSO¶
buckle-libinput(1), buckle-x11.service(8), systemd.unit(5), systemctl(1), loginctl(1)
| September 2026 | Nostalgia bucklespring keyboard sound |