Scroll to navigation

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

systemctl --user enable --now buckle-libinput

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

systemctl --user edit buckle-libinput

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