Black screen on launch with patches of colored noise after kernel DRM update #12490
-
Hyprland versionv0.52.1, but issue only appears after Linux kernel commit 6e223d5d (bisected). The commit is currently present in kernel versions 6.12.58 and 6.12.59.
RegressionYes, but unsure whether it's a regression in the Linux kernel or that the change in the kernel revealed a preexisting bug in Hyprland. Describe the bugLaunching Hyprland after the above kernel commit opens a black screen instead of the expected wallpaper, as well as two distinct rectangles of color noise/TV static. Keybinds and applications still seemingly work - I can open a terminal and type commands despite there being no visual feedback (only tested with After finding the problematic kernel commit, I tried launching every Hyprland release back to v0.49.0, but v0.50.0 and v0.49.0 seemed to crash on launch for unrelated reasons. The fact that other Wayland DEs seem to work makes me less suspicious of the Linux kernel, but please let me know if this isn't an issue with Hyprland, but instead with the Linux kernel (though I'm not sure what to do if that is indeed the case). Reproduction steps
System info and configLogs saved after booting, launching Hyprland, then pressing SUPER+M to exit Hyprland:
I run NixOS with 2 identical Asus monitors (the specifics are in I have included a minimal NixOS configuration that I can boot into to reproduce this issue for reference. The logs above were collected from my normal OS configuration, and not this minimal reproduction. Reproduction NixOS configuration{
inputs = {
nixpkgs.url = "github:nixos/nixpkgs/1a41aa8"; # <- Last good nixpkgs commit before kernel bump in 9ffa607f which introduced my issue.
hyprland.url = "github:hyprwm/Hyprland/v0.52.1"; # <- Not following above nixpkgs
};
outputs = {
nixpkgs,
hyprland,
...
}: {
# Saber is my system name
nixosConfigurations.saber = nixpkgs.lib.nixosSystem {
modules = [
({
pkgs,
modulesPath,
lib,
config,
...
}: {
# === KERNEL OVERRIDE === #
boot.kernelPackages =
pkgs.linuxPackagesFor
(pkgs.linux_6_12.override {
argsOverride = {
src = pkgs.fetchFromGitHub {
owner = "torvalds";
repo = "linux";
# 6e223d5dc81d2e7553c5303b4c642700618648c2 is the first bad commit
# commit 6e223d5dc81d2e7553c5303b4c642700618648c2 (HEAD)
# Author: Mario Limonciello <[email protected]>
# Date: Wed Aug 27 12:17:19 2025 -0500
#
# drm/amd/display: Add fallback path for YCBCR422
#
# [ Upstream commit db291ed1732e02e79dca431838713bbf602bda1c ]
#
# [Why]
# DP validation may fail with multiple displays and higher color depths.
# The sink may support others though.
#
# [How]
# When DP bandwidth validation fails, progressively fallback through:
# - YUV422 8bpc (bandwidth efficient)
# - YUV422 6bpc (reduced color depth)
# - YUV420 (last resort)
#
# This resolves cases where displays would show no image due to insufficient
# DP link bandwidth for the requested RGB mode.
#
# Suggested-by: Mauri Carvalho <[email protected]>
# Reviewed-by: Wayne Lin <[email protected]>
# Signed-off-by: Mario Limonciello <[email protected]>
# Signed-off-by: Ray Wu <[email protected]>
# Tested-by: Daniel Wheeler <[email protected]>
# Signed-off-by: Alex Deucher <[email protected]>
# Signed-off-by: Sasha Levin <[email protected]>
#
# drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 45 ++++++++++++++++++++++++++++++++++++---------
# drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.h | 1 +
# 2 files changed, 37 insertions(+), 9 deletions(-)
# rev = "c5f45678"; # Last good
# hash = "sha256-DbJAwDXvOhKh1129yjFGWOV9maiImgAjEuNHwrR3hgA=";
# rev = "d5dc97879a97b328a89ec092271faa3db9f2bff3"; # 6.12.59, BAD
# hash = "sha256-xyFNSaT+gebkCu/eUNTrH9uqpBLzm4uBB4NSgYpiczs=";
rev = "6e223d5dc81d2e7553c5303b4c642700618648c2";
hash = "sha256-igqteOacLPUZ70ftPp3G9ls4+3HlvCOiT6HiJA0J6ag=";
};
dontStrip = true;
version = "6.12.57";
modDirVersion = "6.12.57";
};
});
# === USE UPSTREAM HYPRLAND === #
nixpkgs.overlays = [
(_final: _prev: {
inherit (hyprland.packages.x86_64-linux) hyprland xdg-desktop-portal-hyprland;
})
];
programs.hyprland.enable = true; # Launch with `Hyprland`
# === OTHER SYSTEM STATE === #
system.stateVersion = "24.05"; # This is my current stateVersion
i18n = {
defaultLocale = "en_DK.UTF-8";
extraLocaleSettings = {
LC_ADDRESS = "da_DK.UTF-8";
LC_IDENTIFICATION = "da_DK.UTF-8";
LC_MEASUREMENT = "da_DK.UTF-8";
LC_MONETARY = "da_DK.UTF-8";
LC_NAME = "da_DK.UTF-8";
LC_NUMERIC = "en_US.UTF-8";
LC_PAPER = "da_DK.UTF-8";
LC_TELEPHONE = "da_DK.UTF-8";
LC_TIME = "da_DK.UTF-8";
};
};
users.users."color" = {
isNormalUser = true;
password = "password";
description = "color";
extraGroups = ["wheel"];
};
time.timeZone = "Europe/Copenhagen";
boot.loader = {
grub = {
enable = true;
device = "nodev";
configurationLimit = 40;
efiSupport = true;
};
efi.canTouchEfiVariables = true;
};
# === HARDWARE-CONFIGURATION.NIX - DEPENDS ON HARDWARE! === #
imports = [
(modulesPath + "/installer/scan/not-detected.nix")
];
boot.initrd.availableKernelModules = ["nvme" "xhci_pci" "ahci" "usbhid"];
boot.initrd.kernelModules = [];
boot.kernelModules = ["kvm-amd"];
boot.extraModulePackages = [];
fileSystems."/" = {
device = "/dev/disk/by-uuid/deb9b618-c83e-4600-9802-94be15bb8417";
fsType = "ext4";
};
fileSystems."/bin" = {
device = "/usr/bin";
fsType = "none";
options = ["bind"];
};
fileSystems."/boot" = {
device = "/dev/disk/by-uuid/30E7-B53D";
fsType = "vfat";
options = ["fmask=0077" "dmask=0077"];
};
swapDevices = [];
# Enables DHCP on each ethernet and wireless interface. In case of scripted networking
# (the default) this is the recommended approach. When using systemd-networkd it's
# still possible to use this option, but it's recommended to use it in conjunction
# with explicit per-interface declarations with `networking.interfaces.<interface>.useDHCP`.
networking.useDHCP = lib.mkDefault true;
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
hardware.cpu.amd.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
})
];
};
};
} |
Beta Was this translation helpful? Give feedback.
Replies: 1 comment 4 replies
-
blame kernel then. Kernel has a strict no-breaking-userspace policy, I'm pretty sure they will not let this slide into a full release |
Beta Was this translation helpful? Give feedback.
blame kernel then. Kernel has a strict no-breaking-userspace policy, I'm pretty sure they will not let this slide into a full release