mrwick/notebook

drag or arrow keys to move · scroll to zoom · esc to exit

When hypridle broke

In May 2026 my Arch laptop stopped locking itself when idle. No error on screen. The screen simply stayed on.

My first thought: I must have changed a config. I had not.

What changed

A routine pacman -Syu upgraded sdbus-cpp from 2.2.1 to 2.3.0. hypridle, the idle daemon for Hyprland, stayed at version 0.1.7-9.

The new sdbus-cpp kept the same SONAME, libsdbus-c++.so.2. The SONAME is the promise that programs linked against the old library still work with the new one. This time the promise broke. The internals of sdbus::internal::Proxy::registerSignalHandler changed, and hypridle crashed on every start.

How it looked

systemctl --user status hypridle.service

The log showed a SIGSEGV right after the line “Sleep inhibition enabled”. The crash pointed into libsdbus-c++.so.2. The service kept restarting and crashing. Nothing told me, because a crashing idle daemon produces no visible symptom, only an absence: the lock never comes.

The fix

Three days later, sdbus-cpp 2.3.1 shipped with a new hyprlock build. A plain pacman -Syu fixed it. hypridle itself did not need a rebuild.

If the fix had not shipped yet, the fallback was:

  1. Downgrade from the package cache: sudo pacman -U /var/cache/pacman/pkg/sdbus-cpp-2.2.1-*.pkg.tar.zst
  2. Hold it with IgnorePkg = sdbus-cpp in /etc/pacman.conf.
  3. Remove the hold after the Hyprland packages are rebuilt.

What I learned