Skip to content

Instantly share code, notes, and snippets.

@diffficult
Created March 1, 2026 05:04
Show Gist options
  • Select an option

  • Save diffficult/0d1f8e6a0166cd4a8a8b00041c9c7e32 to your computer and use it in GitHub Desktop.

Select an option

Save diffficult/0d1f8e6a0166cd4a8a8b00041c9c7e32 to your computer and use it in GitHub Desktop.
Solution to monitors not waking from DPMS in Hyprland (NVIDIA GPU)

Solution to monitors not waking from DPMS in Hyprland (NVIDIA GPU)

If you are using Hyprland (specially versions 0.54 and newer) with an NVIDIA GPU, you may have experienced that your monitors do not wake up after going to sleep via DPMS.

Symptoms

  • Monitors enter DPMS power-off state (e.g. via hypridle) but do not wake up when a key is pressed or the mouse is moved.
  • The monitor goes dark but is no longer tracked as connected by the system.
  • The session is still running in the background but is not visible, leaving you stuck with a black screen.

Root Causes

A combination of default settings and how NVIDIA drivers handle DRM signals causes this issue:

  1. hyprctl dispatch dpms off is a DRM-level hack, not a proper Wayland protocol call. With NVIDIA GPUs, the driver can interpret the DRM DPMS signal as a physical monitor disconnect rather than a standby request.
  2. In Hyprland, key_press_enables_dpms and mouse_move_enables_dpms control whether the compositor itself wakes monitors on input, but both default to false. Without these, Hyprland relies entirely on hypridle's on-resume callback, which fails to execute properly because the monitor is considered disconnected.

Solution

The fix is to use wlopm instead, which uses the proper wlr-output-power-management-v1 Wayland protocol to communicate with the compositor correctly, and to explicitly enable DPMS wake on input.

Step 1. Install wlopm (Wayland Output Power Manager). It does not go through DRM directly and does not confuse NVIDIA drivers into treating the monitor as disconnected.

sudo pacman -S wlopm

Step 2. Edit your Hyprland configuration file (usually ~/.config/hypr/hyprland.conf) and add the following parameters to the misc {} section:

misc {
    key_press_enables_dpms = true
    mouse_move_enables_dpms = true
}

Step 3. Edit your hypridle.conf (usually ~/.config/hypr/hypridle.conf) to replace all the hyprctl dispatch dpms commands with wlopm.

# Before
listener {
    timeout = 600
    on-timeout = hyprctl dispatch dpms off
    on-resume = hyprctl dispatch dpms on
}

# After
listener {
    timeout = 600
    on-timeout = wlopm --off '*'
    on-resume = wlopm --on '*'
}

Note: The * pattern targets all connected outputs, which also fixes multi-monitor inconsistencies where the hyprctl dispatcher sometimes only turns off one monitor.

Step 4. Reload your Hyprland configuration and restart hypridle for the changes to take effect.

hyprctl reload
pkill hypridle
hypridle &

Sources
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment