swww icon indicating copy to clipboard operation
swww copied to clipboard

swww appears to destroy HDMI display after return from DPMS OFF resulting in black screen

Open corigne opened this issue 4 months ago • 3 comments

I am using the git version 0.11.0 in a debug build, to test. I have confirmed the same behavior that the swww and swww-git versions of the package from pacman/ the AUR do.

Describe the bug I run hypridle, which invokes hyprctl dispatch dpms off as part of an idle event listener. 5 seconds later, the session is locked using hyprlock. When the screen is awakened using variations on hyprctl dispatch dpms on the two monitors I use which are on displayport wake up with the original wallpapers swww previously applied as expected. However, when the HDMI connected display wakes, the wallpaper is missing and filled by black. This appears to happen regardless if the lockscreen is invoked, or not.

This issue can be worked around by prompting the wallpaper script I use to send another swww img command to the monitor in question. I have tested whether the same display exhibits this behavior when connected via displayport, and it does not.

The corresponding hypridle config:

general {
    before_sleep_cmd = playerctl pause
    ignore_systemd_inhibit = false
}

general {
    lock_cmd = pidof hyprlock || /usr/bin/bash $HOME/Scripts/hyprlock.sh cat-frappe
    before_sleep_cmd = playerctl pause; loginctl lock-session           # lock before suspend.
    after_sleep_cmd = hyprctl dispatch dpms on; sleep 1; swww restore   # to avoid having to press a key twice to turn on the display.
}
listener {
    timeout = 300                                                       # 5min 20sec
    on-timeout = hyprctl dispatch dpms off                              # screen off when timeout has passed
    on-resume = hyprctl dispatch dpms on; sleep 1; swww restore         # screen on when activity is detected after timeout has fired.
}

listener {
    timeout = 305                                 # 5min
    on-timeout = loginctl lock-session            # lock screen when timeout has passed
}

listener {
    timeout = 900                       # 15m
    on-timeout = systemctl suspend      # suspend pc
}

SWWW Debug Log: https://pastebin.com/0wqa4gDZ

To Reproduce Steps to reproduce the behavior. As described above:

  1. connect one DP and one HDMI display
  2. run hypridle with the supplied config
  3. run swww-daemon from swww-git
  4. allow the displays to be toggled off by hypridle
  5. awake from display idle
  6. observe the HDMI display has no background

Desktop (please complete the following information):

  • Arch Rolling
~/T/swww main•                                                                                                                                                                                                                                                      
Linux 6.16.7-arch1-1
Arch Linux rolling x86_64

Hyprland 0.51.0 (Wayland)
ghostty 1.1.3-arch1
FiraCode Nerd Font (11pt)
fish 4.0.2
nvim 0.12.0-dev-1201+ga47ef74ff1
AMD Ryzen 7 3800X (16) @ 4.56 GHz
AMD Radeon RX 7900 XTX [Discrete]
  • Monitor setup
################
### MONITORS ###
################
# See https://wiki.hyprland.org/Configuring/Monitors/
monitor= DP-1 , 2560x1440@144, 0x0, 1
monitor= HDMI-A-1 , 2560x1440@60, 2560x0, 1
monitor= DP-2 , 3840x2160@60, 5120x0, 1

corigne avatar Sep 13 '25 15:09 corigne