An idle-dim screensaver for the official Raspberry Pi DSI touch displays. Runs entirely in user space — no sudo after the initial dependency install, no systemd services, no compositor config changes, nothing system-wide.
The Raspberry Pi Control Center's built-in screen blanking is unreliable on touch displays — it blanks once, then fails to blank again on subsequent idle periods. There's also no way to adjust the timeout from the Control Center UI. Backlight DSI Solace was built to fix both problems with a dedicated, user-space tool made specifically for DSI panels.
After a configurable number of seconds with no touch/mouse/keyboard activity, the backlight fades smoothly to zero (screen stays powered — no flicker on wake). The next tap fades it back up to whatever brightness you had set. That's it.
- Smooth fade in/out — configurable fade duration, not an instant on/off
- Adjustable idle timeout — set however long you want before it dims
- GTK3 control panel — gear icon opens a settings UI; no command line needed for day-to-day use
- Brightness slider (4–100%) — floor set at 4% because 1–3% reads as fully black on the official 7" panel
- Four safety layers against getting stuck dimmed:
- Tapping the screen during a dim always wakes it
- Resume signal from the idle daemon always wakes it
- Stopping the app from the panel force-restores brightness
- A boot guard checks for and corrects a 0% brightness left over from a power loss while dimmed
- Optional autostart — off by default; toggle it on from the panel if you want it running every boot
- HDMI audio re-detect shortcut — one-tap WirePlumber restart for when HDMI audio devices don't get picked up after a display change
- Optional logging — off by default (keeps SD card writes minimal); flip on from settings if you need to troubleshoot
- Clean uninstall — removes all configs, caches, and binaries from your user directories; shared system packages are never removed
- Raspberry Pi OS Trixie (Debian 13) with the labwc Wayland compositor — this is what the script is built and tested against
- An official Raspberry Pi DSI touch display — the script auto-detects the DSI backlight device and has been confirmed against the official panel specifically. It may work with other DSI panels, but that's untested
- Uses
swayidle+ext-idle-notify-v1for idle detection (not X11, not evdev) — installed automatically as a dependency
Download the single .sh file and run it:
chmod +x backlight-dsi-solace-manager.sh
./backlight-dsi-solace-manager.shChoose Install / Repair from the menu. It installs dependencies via apt, writes the watcher and GUI scripts to ~/.local/share/, optionally creates a desktop shortcut, and installs the boot guard.
- Launch the control panel (desktop shortcut, or the gear icon from the manager menu)
- Set your idle timeout and fade duration
- Adjust the brightness slider to your preferred level
- Optionally enable autostart if you want it running on every boot
- Tap Stop any time you don't want the screen dimming — for movies, games, anything — then Start again with one tap when you're done
Run the script again and choose Uninstall from the menu. This removes the watcher/GUI scripts, configs, logs, and desktop shortcuts under your user account. Dependencies installed via apt (e.g. swayidle, GTK3 bindings) are left in place since they may be shared by other software — the script never removes system packages.
- No gamepad-driven idle reset — this is an upstream
swayidlelimitation, not a bug in this script - No automatic HDMI hotplug watcher — audio re-detection is a manual one-tap action, by design, to avoid unexpected WirePlumber restarts
- Built and confirmed on Pi OS Trixie / labwc; other compositors (e.g. X11-based desktops, older Bookworm setups) are untested
Confirmed working: Raspberry Pi 4, official 7" DSI touch display, Pi OS Trixie, labwc compositor. If you try it on a different setup, feedback on what works (or doesn't) is welcome.
Questions or issues are welcome — open an issue on this repo or reply on the Raspberry Pi Forums thread where this was originally shared.