hyprwm / Hyprland

Hyprland is an independent, highly customizable, dynamic tiling Wayland compositor that doesn't sacrifice on its looks.
https://hyprland.org
BSD 3-Clause "New" or "Revised" License
21.09k stars 882 forks source link

Red screen of death after locking the screen and turning monitor off and on #7330

Closed squeaktoy closed 1 month ago

squeaktoy commented 2 months ago

Regression?

Yes

System Info and Version

System/Version info ```sh Hyprland, built from branch at commit 9a09eac79b85c846e3a865a9078a3f8ff65a9259 (props: bump version to 0.42.0). Date: Wed Aug 7 19:17:10 2024 Tag: v0.42.0, commits: 5069 flags: (if any) System Information: System name: Linux Node name: weerwolf Release: 6.6.41-gentoo-dist Version: #1 SMP PREEMPT_DYNAMIC Sat Aug 10 13:31:41 CEST 2024 GPU information: 01:00.0 VGA compatible controller [0300]: NVIDIA Corporation GP107 [GeForce GTX 1050 Ti] [10de:1c82] (rev a1) (prog-if 00 [VGA controller]) NVRM version: NVIDIA UNIX x86_64 Kernel Module 550.107.02 Wed Jul 24 23:53:00 UTC 2024 os-release: NAME=Gentoo ID=gentoo PRETTY_NAME="Gentoo Linux" ANSI_COLOR="1;32" HOME_URL="https://www.gentoo.org/" SUPPORT_URL="https://www.gentoo.org/support/" BUG_REPORT_URL="https://bugs.gentoo.org/" VERSION_ID="2.15" plugins: ======Config-Start====== Config File: /home/user/.config/hypr/hyprland.conf: Read Succeeded # ####################################################################################### # AUTOGENERATED HYPR CONFIG. # PLEASE USE THE CONFIG PROVIDED IN THE GIT REPO /examples/hypr.conf AND EDIT IT, # OR EDIT THIS ONE ACCORDING TO THE WIKI INSTRUCTIONS. # ####################################################################################### # This is an example Hyprland config file. # Refer to the wiki for more information. # https://wiki.hyprland.org/Configuring/Configuring-Hyprland/ # Please note not all available settings / options are set here. # For a full list, see the wiki # You can split this configuration into multiple files # Create your files separately and then link them to this file like this: # source = ~/.config/hypr/myColors.conf debug { disable_logs = false } ################ ### MONITORS ### ################ # See https://wiki.hyprland.org/Configuring/Monitors/ monitor=DP-1,1920x1080@165,0x0,1 ################### ### MY PROGRAMS ### ################### # See https://wiki.hyprland.org/Configuring/Keywords/ # Set programs that you use $terminal = foot $menu = dmenu_path | fuzzel -d | /bin/sh ################# ### AUTOSTART ### ################# # Autostart necessary processes (like notifications daemons, status bars, etc.) # Or execute your favorite apps at launch like this: exec-once = hyprpm reload -n exec-once = hyprpaper exec-once = ckb-next --background exec-once = gammastep exec-once = dinitctl setenv DISPLAY=$DISPLAY exec-once = dinitctl start dunst exec-once = dinitctl start kwalletd exec-once = dbus-update-activation-environment --all ############################# ### ENVIRONMENT VARIABLES ### ############################# # See https://wiki.hyprland.org/Configuring/Environment-variables/ env = XCURSOR_SIZE,24 env = HYPRCURSOR_THEME,rose-pine-hyprcursor env = HYPRCURSOR_SIZE,32 env = SDL_VIDEODRIVER,wayland # NVIDIA env = LIBVA_DRIVER_NAME,nvidia env = XDG_SESSION_TYPE,wayland env = GBM_BACKEND,nvidia-drm env = __GLX_VENDOR_LIBRARY_NAME,nvidia ##################### ### LOOK AND FEEL ### ##################### # Refer to https://wiki.hyprland.org/Configuring/Variables/ # https://wiki.hyprland.org/Configuring/Variables/#general general { gaps_in = 5 gaps_out = 20 border_size = 2 # https://wiki.hyprland.org/Configuring/Variables/#variable-types for info about colors col.active_border = rgba(33ccffee) rgba(00ff99ee) 45deg col.inactive_border = rgba(595959aa) # Set to true enable resizing windows by clicking and dragging on borders and gaps resize_on_border = false # Please see https://wiki.hyprland.org/Configuring/Tearing/ before you turn this on allow_tearing = true layout = dwindle } # https://wiki.hyprland.org/Configuring/Variables/#decoration decoration { rounding = 10 # Change transparency of focused and unfocused windows active_opacity = 1.0 inactive_opacity = 1.0 drop_shadow = true shadow_range = 4 shadow_render_power = 3 col.shadow = rgba(1a1a1aee) # https://wiki.hyprland.org/Configuring/Variables/#blur blur { enabled = true size = 3 passes = 1 vibrancy = 0.1696 } } # https://wiki.hyprland.org/Configuring/Variables/#animations animations { enabled = false # Default animations, see https://wiki.hyprland.org/Configuring/Animations/ for more bezier = myBezier, 0.05, 0.9, 0.1, 1.05 animation = windows, 1, 7, myBezier animation = windowsOut, 1, 7, default, popin 80% animation = border, 1, 10, default animation = borderangle, 1, 8, default animation = fade, 1, 7, default animation = workspaces, 1, 6, default } # See https://wiki.hyprland.org/Configuring/Dwindle-Layout/ for more dwindle { pseudotile = true # Master switch for pseudotiling. Enabling is bound to mainMod + P in the keybinds section below preserve_split = true # You probably want this } # See https://wiki.hyprland.org/Configuring/Master-Layout/ for more master { new_status = master } cursor { zoom_rigid = 1 } # https://wiki.hyprland.org/Configuring/Variables/#misc misc { force_default_wallpaper = 0 # Set to 0 or 1 to disable the anime mascot wallpapers disable_hyprland_logo = true # If true disables the random hyprland logo / anime girl background. :( allow_session_lock_restore = true } group { col.border_active = rgba(33ccffee) rgba(00ff99ee) 45deg col.border_inactive = rgba(595959aa) groupbar { height = 15 font_size = 16 col.active = rgba(1188cc88) col.inactive = rgba(595959aa) } } plugin { overview { dragAlpha = 0.66 panelHeight = 150 centerAligned = true hideTopLayers = true showEmptyWorkspace = false drawActiveWorkspace = false overrideGaps = false } } ############# ### INPUT ### ############# # https://wiki.hyprland.org/Configuring/Variables/#input input { kb_layout = us kb_variant = kb_model = kb_options = compose:ralt kb_rules = repeat_delay = 300 repeat_rate = 40 follow_mouse = 1 sensitivity = -0.5 # -1.0 - 1.0, 0 means no modification. touchpad { natural_scroll = false } } # https://wiki.hyprland.org/Configuring/Variables/#gestures gestures { workspace_swipe = false } binds { allow_workspace_cycles = true } # Example per-device config # See https://wiki.hyprland.org/Configuring/Keywords/#per-device-input-configs for more device { name = epic-mouse-v1 sensitivity = -0.5 } #################### ### KEYBINDINGSS ### #################### # See https://wiki.hyprland.org/Configuring/Keywords/ $mainMod = SUPER # Sets "Windows" key as main modifier bind = $mainMod, Return, exec, $terminal bind = $mainMod & SHIFT, Q, killactive, bind = $mainMod & SHIFT, E, exit, bind = $mainMod, Space, togglefloating, bind = $mainMod, D, exec, $menu bind = $mainMod, F, fullscreen bind = $mainMod, M, fullscreen, 1 bind = $mainMod, Z, pin bind = $mainMod, P, pseudo, # dwindle bind = $mainMod, V, togglesplit, # dwindle bind = $mainMod CTRL, Q, exec, hyprctl kill bind = $mainMod ALT, L, exec, swaylock -c 000000 # Move focus with mainMod + arrow keys bind = $mainMod, left, movefocus, l bind = $mainMod, right, movefocus, r bind = $mainMod, up, movefocus, u bind = $mainMod, down, movefocus, d # Move focus with mainMod + hjkl bind = $mainMod, H, movefocus, l bind = $mainMod, L, movefocus, r bind = $mainMod, K, movefocus, u bind = $mainMod, J, movefocus, d # Move focus with mainMod + arrow keys bind = $mainMod SHIFT, left, movewindoworgroup, l bind = $mainMod SHIFT, right, movewindoworgroup, r bind = $mainMod SHIFT, up, movewindoworgroup, u bind = $mainMod SHIFT, down, movewindoworgroup, d # Move focus with mainMod + hjkl bind = $mainMod SHIFT, H, movewindoworgroup, l bind = $mainMod SHIFT, L, movewindoworgroup, r bind = $mainMod SHIFT, K, movewindoworgroup, u bind = $mainMod SHIFT, J, movewindoworgroup, d # Window cycle bind = $mainMod, Period, cyclenext bind = $mainMod, Comma, cyclenext, prev # Window swap bind = $mainMod SHIFT, Period, swapnext bind = $mainMod SHIFT, Comma, swapnext, prev # Group cycle bind = $mainMod CTRL, H, changegroupactive, b bind = $mainMod CTRL, J, changegroupactive, bind = $mainMod CTRL, K, changegroupactive, b bind = $mainMod CTRL, L, changegroupactive bind = $mainMod CTRL, left, changegroupactive, b bind = $mainMod CTRL, down, changegroupactive, bind = $mainMod CTRL, up, changegroupactive, b bind = $mainMod CTRL, right, changegroupactive # Group swap bind = $mainMod CTRL SHIFT, H, movegroupwindow, b bind = $mainMod CTRL SHIFT, J, movegroupwindow, bind = $mainMod CTRL SHIFT, K, movegroupwindow, b bind = $mainMod CTRL SHIFT, L, movegroupwindow bind = $mainMod CTRL SHIFT, left, movegroupwindow, b bind = $mainMod CTRL SHIFT, down, movegroupwindow, bind = $mainMod CTRL SHIFT, up, movegroupwindow, b bind = $mainMod CTRL SHIFT, right, movegroupwindow # Switch to previous workspace bind = $mainMod, B, workspace, previous bind = $mainMod SHIFT, B, movetoworkspace, previous # Switch workspaces with mainMod + [0-9] bind = $mainMod, 1, workspace, 1 bind = $mainMod, 2, workspace, 2 bind = $mainMod, 3, workspace, 3 bind = $mainMod, 4, workspace, 4 bind = $mainMod, 5, workspace, 5 bind = $mainMod, 6, workspace, 6 bind = $mainMod, 7, workspace, 7 bind = $mainMod, 8, workspace, 8 bind = $mainMod, 9, workspace, 9 bind = $mainMod, 0, workspace, 10 # Switch workspaces with mainMod + [F1-F10] bind = $mainMod, F1, workspace, 11 bind = $mainMod, F2, workspace, 12 bind = $mainMod, F3, workspace, 13 bind = $mainMod, F4, workspace, 14 bind = $mainMod, F5, workspace, 15 bind = $mainMod, F6, workspace, 16 bind = $mainMod, F7, workspace, 17 bind = $mainMod, F8, workspace, 18 bind = $mainMod, F9, workspace, 19 bind = $mainMod, F10, workspace, 20 # Move active window to a workspace with mainMod + SHIFT + [0-9] bind = $mainMod SHIFT, 1, movetoworkspace, 1 bind = $mainMod SHIFT, 2, movetoworkspace, 2 bind = $mainMod SHIFT, 3, movetoworkspace, 3 bind = $mainMod SHIFT, 4, movetoworkspace, 4 bind = $mainMod SHIFT, 5, movetoworkspace, 5 bind = $mainMod SHIFT, 6, movetoworkspace, 6 bind = $mainMod SHIFT, 7, movetoworkspace, 7 bind = $mainMod SHIFT, 8, movetoworkspace, 8 bind = $mainMod SHIFT, 9, movetoworkspace, 9 bind = $mainMod SHIFT, 0, movetoworkspace, 10 # Move active window to a workspace with mainMod + SHIFT + [F1-F10] bind = $mainMod SHIFT, F1, movetoworkspace, 11 bind = $mainMod SHIFT, F2, movetoworkspace, 12 bind = $mainMod SHIFT, F3, movetoworkspace, 13 bind = $mainMod SHIFT, F4, movetoworkspace, 14 bind = $mainMod SHIFT, F5, movetoworkspace, 15 bind = $mainMod SHIFT, F6, movetoworkspace, 16 bind = $mainMod SHIFT, F7, movetoworkspace, 17 bind = $mainMod SHIFT, F8, movetoworkspace, 18 bind = $mainMod SHIFT, F9, movetoworkspace, 19 bind = $mainMod SHIFT, F10, movetoworkspace, 20 # Example special workspace (scratchpad) bind = $mainMod, S, togglespecialworkspace, magic bind = $mainMod SHIFT, S, movetoworkspace, special:magic # Groups bind = $mainMod, G, togglegroup # Scroll through existing workspaces with mainMod + scroll bind = $mainMod, mouse_down, workspace, e-1 bind = $mainMod, mouse_up, workspace, e+1 # Scroll through existing workspaces with keyboard bind = $mainMod, N, workspace, e+1 bind = $mainMod SHIFT, N, workspace, e-1 bind = $mainMod, Period, workspace, e+1 bind = $mainMod, Comma, workspace, e-1 # Scroll through existing grouped windows with mainMod + scroll bind = $mainMod CTRL, mouse_down, changegroupactive, b bind = $mainMod CTRL, mouse_up, changegroupactive # Move/resize windows with mainMod + LMB/RMB and dragging bindm = $mainMod, mouse:272, movewindow bindm = $mainMod, mouse:273, resizewindow # Audio bindings bind =, XF86AudioMute, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle bind = CTRL, XF86AudioMute, exec, wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle # MPD media bindings bind =, Pause, exec, mpc toggle bind =, XF86AudioPlay, exec, mpc toggle binde =, XF86AudioNext, exec, mpc next binde =, XF86AudioPrev, exec, mpc prev binde = SHIFT, XF86AudioNext, exec, mpc seek +10 binde = SHIFT, XF86AudioPrev, exec, mpc seek -10 bind = SHIFT, XF86AudioRaiseVolume, exec, mpc seek +10 bind = SHIFT, XF86AudioLowerVolume, exec, mpc seek -10 bind = CTRL, XF86AudioRaiseVolume, exec, mpc volume +2 bind = CTRL, XF86AudioLowerVolume, exec, mpc volume -2 # Notifications bind = $mainMod, Grave, exec, dunstctl close bind = $mainMod SHIFT, Grave, exec, dunstctl close-all bind = $mainMod CTRL, Grave, exec, dunstctl history-pop # Screenshot bind = CTRL, Print, exec, grimblast --freeze copysave area ~/Screenshots/$(date +%Y-%m-%dT%H-%M-%S).png bind =, Print, exec, grimblast --freeze copysave output ~/Screenshots/$(date +%Y-%m-%dT%H-%M-%S).png bind = $mainMod, Print, exec, grimblast --freeze copysave active ~/Screenshots/$(date +%Y-%m-%dT%H-%M-%S).png # Zoom bind = $mainMod, Equal, exec, hyprctl keyword cursor:zoom_factor 2 bind = $mainMod, Minus, exec, hyprctl keyword cursor:zoom_factor 1 # Overview #bind = $mainMod, Tab, overview:toggle ############### ### SUBMAPS ### ############### bind = $mainMod, R, submap, resize # will start a submap called "resize" submap = resize # sets repeatable binds for resizing the active window binde =, right, resizeactive, 10 0 binde =, left, resizeactive, -10 0 binde =, up, resizeactive, 0 -10 binde =, down, resizeactive, 0 10 # sets repeatable binds for resizing the active window binde =, L, resizeactive, 10 0 binde =, H, resizeactive, -10 0 binde =, K, resizeactive, 0 -10 binde =, J, resizeactive, 0 10 # use reset to go back to the global submap bind =, escape, submap, reset # will reset the submap, which will return to the global submap submap = reset ############################## ### WINDOWS AND WORKSPACES ### ############################## # See https://wiki.hyprland.org/Configuring/Window-Rules/ for more # See https://wiki.hyprland.org/Configuring/Workspace-Rules/ for workspace rules # Example windowrule v1 # windowrule = float, ^(kitty)$ # Example windowrule v2 # windowrulev2 = float,class:^(kitty)$,title:^(kitty)$ windowrulev2 = suppressevent maximize, class:.* # You'll probably like this. exec-once = waybar ======Config-End======== ```

Description

When I lock Hyprland using either swaylock or hyprlock, and then turn my monitor off, when I turn my monitor back on, the red screen of death shows meaning that the locking program has died.

I have a DisplayPort LCD monitor from Acer.

How to reproduce

  1. Lock the screen using e.g. swaylock or hyprlock
  2. Turn off your DisplayPort monitor (I have not tested HDMI yet)
  3. Turn on your DisplayPort monitor
  4. Witness the red screen of death

Crash reports, logs, images, videos

No response

ikalco commented 2 months ago

you can use hyprlock --immediate & sleep 1; hyprctl dispatch dpms off to mitigate but thats not a fix

shilkazx commented 2 months ago

I have a HDMI monitor, and I met this bug several times(random occurred, not always) on hyprland 0.41.2.

AhJi26 commented 2 months ago

same issue on lenovo laptop with built-in monitor

squeaktoy commented 2 months ago

For me on 0.41.x I never encountered this bug but when I upgraded to 0.42.0 with Aquamarine 0.3.1 I got this bug and it's 100% reproducible on my end. And it's not just the lock screen that crashes. Waybar crashes too after a monitor power cycle.

MarkusTieger commented 2 months ago

Does the hyprlock process still exist, after turning the monitor on and off? -> I had a red screen of death in the past when swaylock crashed, while still locked.

squeaktoy commented 2 months ago

When I examined the situation via SSH it seemed that the lock program had crashed, yes.

MarkusTieger commented 2 months ago

The error message from swaylock, after turning the monitor on and off, which leads to a crash:

ext_session_lock_surface_v1@23: error 1: Null buffer attached

(using DisplayPort)

cjk commented 2 months ago

I could be mistaken, but perhaps a fix has already landed: https://github.com/hyprwm/aquamarine/commit/4f6642808b18827a574b5225f0436c597cbcdcc5

ctilley83 commented 2 months ago

I have this issue on hdmi. It was broken in 0.41.1, fixed(for me at least) in 0.41.2 and broken again in 0.42

squeaktoy commented 2 months ago

I could be mistaken, but perhaps a fix has already landed: hyprwm/aquamarine@4f66428

I tried the latest git checkout of aquamarine with Hyprland 0.42.0 but it's still not fixed.

ethanh20009 commented 2 months ago

Getting this about 50% of the time when locking from hypridle. I've set hyprlock to run before suspend, and after waking some time later I get the rsod. Logging into another tty I can see hyprlock is still running apparently, but no matter what I do I can't recover that hyprland session (Killing / Restarting / using loginctl doesn't get me back to hyprland instance). End up rebooting.

I have this issue on hdmi. It was broken in 0.41.1, fixed(for me at least) in 0.41.2 and broken again in 0.42

Same experience I've had version wise but I'm on DP

EDIT: Tried on hyprland-git and aquamarine-git and get no display output instead of a red screen. Still unrecoverable

shilkazx commented 2 months ago

I have a HDMI monitor, and I met this bug several times(random occurred, not always) on hyprland 0.41.2.

I meet this bug on 0.42 again, using hyprlock and swayidle(I use hypridle before, and it also meets this bug). According to the situations in this post, it seems that the bug randomly happened no matter what kind of display(DP/HDMI), lock app(swaylock/hyprlock) and idle app(swayidle/hypridle) is used.

tonakihan commented 2 months ago

I am found this bug in commit 7486576 which aquamarine adds. Also it maybe reproduction if installed hyprland (previous version) with hyprlock. I think the bug is definitely in aquamarine or hyprlock.

Agent00Ming commented 2 months ago

Reliably occurs after https://github.com/hyprwm/aquamarine/commit/2bff4a45215514e89e045e07878537105fde021d was merged. So long as at least one monitor has received dpms off, running a screen locker will cause it to either coredump or hang.

IvanTurgenev commented 1 month ago

on nixos unstable both swaylock and hyprlock, sending the locking command then powerinf off and on the display result in unrecoverable red screen. amd gpu.

lock_cmd = "pidof swaylock || swaylock -c 000000 --daemonize --show-failed-attempts & sleep 3 && hyprctl dispatch dpms off";

IvanTurgenev commented 1 month ago

Not present in 0.41.2 nixpkgs-old-hyprland.url = "github:nixos/nixpkgs/0e5c272e42d223ff7a82ace92a11b17fd92aace9";

pkgs-old-hyprland = import nixpkgs-old-hyprland {
  inherit system;
  config.allowUnfree = true;
};
programs.hyprland = {
  enable = true;
  package = pkgs-old-hyprland.hyprland;
};

hardware.graphics = {
  package = pkgs-old-hyprland.mesa.drivers;
  package32 = pkgs-old-hyprland.pkgsi686Linux.mesa.drivers;
};

hardware.graphics.enable32Bit = true;
wayland.windowManager.hyprland = {
  package = pkgs-old-hyprland.hyprland;
redjohnsh commented 1 month ago

I've been encountering the Red Screen of Death (RSOD) intermittently and seemingly at random. For context, I'm running an all-AMD system connected via DisplayPort. I've also switched to the Git versions of all Hypr-family components, but the issue persists with the same random RSOD occurrences.

image

chmanie commented 1 month ago

Seems to be a duplicate of #7276

vaxerski commented 1 month ago

ya