Skip to content

Hyprlock/Hyprland crash investigation: multiple causes and fixes (DPMS, suspend, PAM) #953

@brenoperucchi

Description

@brenoperucchi

System Info

  • Hyprlock: 0.9.2
  • Hyprland: 0.53.1
  • OS: Arch Linux (kernel 6.18.3)
  • GPU: AMD Radeon RX 470/480/570/580 (amdgpu driver)

Summary

After weeks of investigating repeated Hyprland crashes during idle/lock states, I found multiple independent issues that can cause crashes. Documenting all of them here to help others.


Issue 1: DPMS off crashes Hyprland (AMD GPU)

Symptom: Hyprland crashes when DPMS turns off monitors.

Cause: Known AMD GPU issue with DPMS in Hyprland.

Fix: Remove DPMS off from hypridle config.

Related: hyprwm/Hyprland#2578


Issue 2: Monitor disable crashes Hyprlock

Symptom: Hyprlock crashes when monitors are disabled via hyprctl dispatch dpms off or monitor power management.

Cause: Hyprlock cannot handle displays becoming unavailable.

Fix: Do not disable monitors while hyprlock is running. Keep system in screensaver + lock only.

Related: #434, #480


Issue 3: AMD GPU suspend issues

Symptom: System freezes or crashes on suspend/resume.

Cause: AMD GPU runtime power management issues.

Fix: Add kernel parameters:

amdgpu.runpm=0 mem_sleep_default=deep

Issue 4: Fingerprint auth crash ("User unknown")

Symptom: Hyprlock crashes with "User unknown" PAM error.

Cause: fingerprint:enabled = true in hyprlock.conf but fprintd is not installed.

Fix: Disable fingerprint in hyprlock.conf:

# auth {
#     fingerprint:enabled = true
# }

Issue 5: Missing PAM header

Symptom: PAM authentication fails silently.

Cause: /etc/pam.d/hyprlock missing #%PAM-1.0 header.

Fix: Ensure file starts with #%PAM-1.0.


Issue 6: Incomplete PAM configuration (pam_end crash) - NEW

Symptom: Hyprlock crashes with SIGABRT in pam_end(), then Hyprland crashes.

Stack trace:

#0  pam_end (libpam.so.0 + 0x4b4b)
#1  /usr/bin/hyprlock + 0x416a1
#2  /usr/bin/hyprlock + 0x41964
#3  execute_native_thread_routine (libstdc++.so.6)

Cause: The default /etc/pam.d/hyprlock from Arch package only has:

#%PAM-1.0
auth        include     login

Missing account and session sections. When pam_end() is called, it tries to clean up session handles that were never initialized, causing a crash.

Fix: Complete PAM configuration:

#%PAM-1.0

auth        include     system-login
account     include     system-login
session     optional    pam_keyinit.so    force revoke
session     include     system-login

Final working hypridle.conf

general {
    lock_cmd = hyprlock
    before_sleep_cmd = loginctl lock-session
    after_sleep_cmd = hyprctl dispatch dpms on
}

listener {
    timeout = 600   # 10min - screensaver
    on-timeout = pidof hyprlock || hyprlock
}

listener {
    timeout = 900   # 15min - lock
    on-timeout = loginctl lock-session
}

# NO DPMS off - causes crash on AMD
# NO monitor disable - causes hyprlock crash

Suggestion

The hyprlock package should ship with a complete PAM configuration (like SDDM does) to prevent the pam_end crash.

Related Issues

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions