Chapter 8: Laptop Display, Suspend, and Wakeup

Display and suspend management can recover significant power on a laptop. The screen backlight alone draws 2–6 W, and a machine that never enters suspend when idle can waste hours of battery on a task list you left open. This chapter covers the Linux display power stack and the suspend/resume system.


8.1 Backlight Control

The backlight is controlled via sysfs. The interface varies by hardware:

# List backlight interfaces
ls /sys/class/backlight/

# Read current and maximum brightness
cat /sys/class/backlight/intel_backlight/brightness
cat /sys/class/backlight/intel_backlight/max_brightness

# Set brightness to 50% (replace 1000 with your max_brightness value)
echo 500 | sudo tee /sys/class/backlight/intel_backlight/brightness

Most desktop environments set brightness via D-Bus through upower or logind, which does not require root. From the command line, brightnessctl is convenient:

brightnessctl set 50%    # set to 50%
brightnessctl set -10%   # decrease by 10%

TLP does not control backlight brightness directly, but Power Profiles Daemon and GNOME/KDE power settings can dim the display after a configurable idle timeout.


8.2 DPMS: Display Power Management Signaling

DPMS is an older standard for putting the display into low-power states. Under Wayland, display power is managed by the compositor. Under X11:

# Enable DPMS with: standby after 60s, suspend after 120s, off after 180s
xset dpms 60 120 180

# Query current DPMS settings
xset q | grep -A 5 DPMS

Under systemd with a Wayland compositor, display timeout is typically configured in the desktop environment’s power settings. The underlying mechanism is wl_output.dpms or proprietary compositor-specific APIs.


8.3 Linux Suspend Targets

Linux supports several suspend-to-memory and suspend-to-disk states:

State Name Description Resume Latency
S1 Standby CPU halted, RAM powered < 1 s
S3 Suspend-to-RAM CPU off, RAM refreshed 1–3 s
S4 Suspend-to-Disk (hibernate) State saved to swap/file 10–30 s
S0ix Modern Standby CPU in deep C-state, NIC on Variable

S3 (Suspend-to-RAM) is the standard laptop sleep mode. RAM retains state; everything else powers down. Power draw is typically 0.5–2 W (the RAM refresh current).

S4 (Hibernate) saves the full memory image to disk and powers off completely. Resume reads from disk, which is slow but uses zero power during the suspended period. Useful for overnight suspend when you do not need fast resume.

S0ix / Modern Standby is the default on many newer Intel/AMD laptops. Unlike S3, the system stays in a low-power C-state rather than fully suspending. Network and calendar updates can still happen. Power draw varies widely (0.5–5 W) and can be higher than S3 on some hardware.

Check which states your hardware supports:

cat /sys/power/mem_sleep      # shows available mem sleep modes
cat /sys/power/state          # all available power states

To prefer S3 over Modern Standby:

# In /etc/default/grub, add: mem_sleep_default=deep
echo "mem_sleep_default=deep" | sudo tee /etc/systemd/sleep.conf.d/s3.conf

8.4 systemd Sleep Configuration

systemd manages suspend, hibernate, and hybrid sleep via systemd-sleep. Configuration in /etc/systemd/sleep.conf:

[Sleep]
AllowSuspend=yes
AllowHibernation=yes
AllowSuspendThenHibernate=yes
# Suspend for 60 min, then hibernate if still suspended
HibernateDelaySec=3600

Suspend-then-hibernate is a practical hybrid: the laptop suspends to RAM for a configurable duration, then automatically hibernates if not resumed. This gives fast resume for short absences while consuming zero power for long ones.


8.5 Lid Close and Power Button Actions

systemd-logind controls what happens when the lid is closed or the power button is pressed. Edit /etc/systemd/logind.conf:

[Login]
HandleLidSwitch=suspend
HandleLidSwitchExternalPower=lock     # just lock screen when plugged in
HandlePowerKey=hibernate
IdleAction=suspend
IdleActionSec=15min

After editing, reload:

sudo systemctl restart systemd-logind

8.6 Debugging Suspend Issues

Common problems:

Device prevents suspend: Check dmesg after a failed suspend for pm_prepare errors. Use sudo journalctl -b -1 | grep -i suspend to see the previous boot’s suspend log.

Immediate wakeup: Something is waking the system as soon as it suspends. Check active wakeup sources:

cat /proc/acpi/wakeup   # shows which ACPI devices can generate wakeup
# Disable a specific wakeup source (e.g., XHC for USB)
echo XHC | sudo tee /proc/acpi/wakeup

High power during S0ix/Modern Standby: Use powertop immediately after waking to see which subsystems prevented deep C-states. Common culprits: audio device (prevent D3 state), NIC firmware, or a process that called pm_qos_add_request for low latency.


← Chapter 7: Laptop CPU Governors and TLP Table of Contents Chapter 9: Advanced Laptop Power Profiling →