INC-2026-05-23-002: Resolution

Resolution

Failed Workarounds

Attempt 1: Replace DPMS with monitor disable/enable

on-timeout = hyprctl keyword monitor "eDP-1, disable"
on-resume = hyprctl keyword monitor "eDP-1, preferred, auto, 2"

Result: eDP-1 stays black. Same i915 DRM path triggers PSR hang.

Attempt 2: Replace DRM interaction with backlight-only

on-timeout = brightnessctl -s set 0
on-resume = brightnessctl -r

Result: eDP-1 still goes black after ~30 minutes. PSR hangs the display pipe independently of any userspace display mechanism. The issue is in the kernel’s idle power management, not in hypridle.

Fix: Disable i915 PSR via kernel parameter

PSR is the root cause. Disabling it prevents the display pipe from entering the hung state.

Verify before
sudo awk 'NR==5' /boot/loader/entries/arch.conf
Apply
sudo sed -i '5s/$/ i915.enable_psr=0/' /boot/loader/entries/arch.conf
Verify after
sudo awk 'NR==5' /boot/loader/entries/arch.conf
# Should show: ... security=apparmor i915.enable_psr=0
Reboot to apply
sudo reboot
Confirm PSR is disabled after reboot
cat /sys/kernel/debug/dri/1/i915_edp_psr_status 2>/dev/null
# Or check kernel command line:
grep -o 'i915.enable_psr=[0-9]' /proc/cmdline

Revert hypridle to DPMS (after reboot confirms fix)

Once PSR is disabled and eDP-1 wakes reliably, restore proper DPMS in hypridle:

hypridle.conf — 15-minute listener
listener {
    timeout = 900
    on-timeout = hyprctl dispatch dpms off
    on-resume = hyprctl dispatch dpms on
}
systemctl --user restart hypridle

Tradeoff

i915.enable_psr=0 disables a panel power optimization. Impact:

  • On AC power: Negligible — GPU refreshes display continuously instead of letting the panel self-refresh

  • On battery: ~5-10 minutes reduced battery life (panel draws slightly more power)

  • Display reliability: Full recovery — no more PSR hangs, DPMS works normally

Future

Monitor kernel updates for i915 PSR fixes on Arrow Lake-S. When a future kernel resolves the regression, test by removing i915.enable_psr=0 and running a DPMS cycle:

hyprctl dispatch dpms off && sleep 5 && hyprctl dispatch dpms on

If the display wakes, PSR is fixed upstream and the parameter can be permanently removed.