Long-running background operations on Linux—such as large database backups, operating system package upgrades, video transcodes, or multi-gigabyte file transfers—can fail catastrophically if a workstation automatically enters sleep or initiates an idle shutdown. While desktop environments offer graphical power toggles, automated scripts and terminal sessions require a programmatic, command-line mechanism to temporarily suspend system power management. systemd-inhibit is the native utility that takes temporary inhibitor locks to prevent sleep, shutdown, and idle transitions while a designated command executes.
How systemd Inhibitor Locks Function
Under systemd, power management transitions (such as sleep, suspend, hybrid-sleep, poweroff, and reboot) are coordinated centrally by systemd-logind. When an application or script invokes systemd-inhibit, it registers an inhibitor lock with the logind daemon across specific lock categories:
- sleep: Blocks system suspend and hibernation (ideal for laptops when closing the lid or leaving the desk).
- shutdown: Blocks clean system poweroff, reboot, and automated maintenance powerdowns.
- idle: Prevents the desktop or console session from entering an idle state (stops screensavers and display dimming).
- handle-power-key / handle-lid-switch: Overrides physical hardware button presses or laptop lid closures.
The moment your executed command finishes (whether it succeeds, fails, or is interrupted), systemd automatically releases the lock, restoring normal power-saving policies immediately.
Basic Command Syntax and Executing Protected Tasks
The standard syntax for running a command under an inhibitor lock requires specifying what power events to block, along with a human-readable justification:
systemd-inhibit --what=sleep --why="Database backup in progress" /usr/local/bin/backup.sh
While backup.sh executes, any attempt by the system to enter suspend will be rejected or delayed. Once the script terminates, the sleep inhibitor lock is automatically purged from systemd-logind.
Blocking Both Sleep and Shutdown Simultaneously
For mission-critical operations—such as distribution upgrades via apt, dnf, or pacman—you can block multiple power transitions by supplying a colon-separated list to the --what flag:
systemd-inhibit --what=sleep:shutdown --who="System Maintenance" --why="Full OS Upgrade" sudo apt dist-upgrade -y
| Inhibitor Flag | Parameter Value | Operational Impact |
|---|---|---|
| –what | sleep, shutdown, idle, handle-lid-switch |
Specifies the exact power events blocked during execution |
| –who | Descriptive String (e.g. “Rsync Backup”) | Identifies the process author in systemd diagnostic logs |
| –why | Descriptive Reason (e.g. “Exporting 500GB Archive”) | Explains to other administrators why a shutdown request is pending |
| –mode | block (default) or delay |
Determines whether transitions are blocked indefinitely or delayed briefly |
Auditing Active Inhibitor Locks on Your System
If your Linux machine refuses to sleep or a shutdown command hangs, you can inspect all currently registered inhibitor locks across the operating system:
systemd-inhibit --list
This command queries systemd-logind and outputs a structured table detailing active locks:
WHO UID USER PID WHAT WHY MODE
NetworkManager 0 root 789 sleep NetworkManager needs to turn off delay
System Maintenance 0 root 4520 sleep:shutdown Full OS Upgrade block
GNOME Shell 1000 user 1820 idle Audio stream playing block
The table displays the process ID (PID), the specific power events inhibited, the justification string, and whether the lock operates in block or delay mode.
Managing Laptop Lid Closures During Workloads
By default on many Linux laptops, closing the lid immediately triggers system suspend, terminating running compile jobs or downloads. You can run tasks while ignoring lid switches using:
systemd-inhibit --what=handle-lid-switch --why="Compiling kernel" make -j$(nproc)
You can now safely shut your laptop lid and place the machine on your desk; the compilation will continue uninterrupted, with standard lid behaviour resuming as soon as the compiler exits.
Incorporating systemd-inhibit into automated maintenance scripts and administrative workflows guarantees that vital computing tasks run to completion without falling victim to aggressive power-saving policies.