Skip to content

First unlock attempt after resume from suspend fails with pam_u2f (FIDO2 PIN) since 927e09f (#1003) #1057

Description

@CrossFeed

Regression?

Yes

Hyprlock Info and Version

Hyprlock version v0.9.6

Hyprlock config
$font = Monospace

general {
    hide_cursor = false
}

animations {
    enabled = true
    bezier = linear, 0, 0, 1, 1
    animation = fadeIn, 1, 5, default, popin 20%
    animation = fadeOut, 1, 5, default, popin 20%
    animation = inputFieldDots, 1, 2, linear
}

background {
    monitor =
    color = rgb(132334) 
}

input-field {
    monitor =
    size = 20%, 5%
    outline_thickness = 2
    inner_color = rgba(13, 23, 34, 0.0) # transparent inner, matching background hue

    # Pavlova outline for normal state
    outer_color = rgb(d9c894)
    # Jade green for checking state
    check_color = rgb(5a7c59)
    # Desaturated red for fail state
    fail_color = rgb(8a2e37)

    font_color = rgb(d9c894) # white text
    fade_on_empty = false
    rounding = 0 # sharp corners, no rounding

    font_family = $font
    placeholder_text = <span foreground="##5d5445">Input password...</span>
    fail_text = <span foreground="##8a2e37">$PAMFAIL</span>

    # uncomment to use a letter instead of a dot to indicate the typed password
    # dots_text_format = *
    # dots_size = 0.4
    dots_spacing = 0.3

    # uncomment to use an input indicator that does not show the password length (similar to swaylock's input indicator)
    # hide_input = true

    position = 0, -20
    halign = center
    valign = center
}

# TIME
label {
    monitor =
    text = $TIME # ref. https://wiki.hyprland.org/Hypr-Ecosystem/hyprlock/#variable-substitution
    font_size = 90
    font_family = $font
    color = rgb(d9c894) # Pavlova for prominent time display

    position = -30, 0
    halign = right
    valign = top
}

# DATE
label {
    monitor =
    text = cmd[update:60000] date +"%A, %d %B %Y" # update every 60 seconds
    font_size = 25
    font_family = $font
    color = rgb(ffffff) # white for body text

    position = -30, -150
    halign = right
    valign = top
}

# YUBIKEY TOUCH STATUS
label {
    monitor =
    text = cmd[update:1000] ~/.config/hypr/scripts/yubikey-count.sh # update every 1000ms
    font_size = 30
    font_family = $font
    color = rgb(d9c894) # Pavlova for attention

    position = 0, -120
    halign = center
    valign = center
}
PAM config
# PAM configuration file for hyprlock
# the 'login' configuration file (see /etc/pam.d/login)

auth	sufficient	pam_u2f.so	pinverification=1 authfile=/etc/yubico/u2f_keys cue nouserok
auth        include     login

Compositor Info and Version

System/Version info
Hyprland 0.56.0 built from branch v0.56.0 at commit 36b2e0cfe0c6094dbc47bd42a437431315bb3087 clean (version: bump to 0.56.0).
Date: Mon Jul 20 07:50:48 2026
Tag: v0.56.0, commits: 7625

Libraries:
Hyprgraphics: built against 0.5.1, system has 0.5.1
Hyprutils: built against 0.14.0, system has 0.14.0
Hyprcursor: built against 0.1.13, system has 0.1.13
Hyprlang: built against 0.6.8, system has 0.6.8
Aquamarine: built against 0.13.0, system has 0.13.0

Version ABI string: 36b2e0cfe0c6094dbc47bd42a437431315bb3087_aq_0.13_hu_0.14_hg_0.5_hc_0.1_hlg_0.6
no flags were set


System Information:
System name: Linux
Node name: hypha
Release: 7.1.4-arch1-1
Version: #1 SMP PREEMPT_DYNAMIC Sat, 18 Jul 2026 17:30:57 +0000

Libraries:
Hyprgraphics: built against 0.5.1, system has 0.5.1
Hyprutils: built against 0.14.0, system has 0.14.0
Hyprcursor: built against 0.1.13, system has 0.1.13
Hyprlang: built against 0.6.8, system has 0.6.8
Aquamarine: built against 0.13.0, system has 0.13.0



GPU information:
03:00.0 VGA compatible controller [0300]: Advanced Micro Devices, Inc. [AMD/ATI] Navi 31 [Radeon RX 7900 XT/7900 XTX/7900 GRE/7900M] [1002:744c] (rev c8) (prog-if 00 [VGA controller])


os-release: NAME="Arch Linux"
PRETTY_NAME="Arch Linux"
ID=arch
BUILD_ID=rolling
ANSI_COLOR="38;2;23;147;209"
HOME_URL="https://archlinux.org/"
DOCUMENTATION_URL="https://wiki.archlinux.org/"
SUPPORT_URL="https://bbs.archlinux.org/"
BUG_REPORT_URL="https://gitlab.archlinux.org/groups/archlinux/-/issues"
PRIVACY_POLICY_URL="https://terms.archlinux.org/docs/privacy-policy/"
LOGO=archlinux-logo


plugins:

Explicit sync: supported
GL ver: 3.2
Backend: drm

Monitor info:
	Panel DP-1: 3840x2160, DP-1 LG Electronics LG ULTRAGEAR+ 512NTTQG8001 -> backend drm
		explicit ✔️
		edid:
			hdr ✔️
			chroma ✔️
			bt2020 ✔️
		vrr capable ✔️
		non-desktop ❌
		

State:

configProvider: hyprlang
backend: drm

Description

I have a login setup where I have a YubiKey + PIN with a fallback password if the YubiKey is not present. This is done through pam_u2f.so PAM module, configured in /etc/pam.d/hyprlock.

When the computer resumes from suspend and hyprlock is active, the first unlock attempt will always fail. The second attempt always succeeds. This issue seems to be introduced with 927e09f, and can't be replicated on d332164. This only happens through the FIDO2 PIN (pam_u2f.so) path, changing the pam config to Unix password authentication obviously works fine.

How to reproduce

  1. Configure hyprlock to use pam_u2f.so
  2. Plug in YubiKey
  3. Lock the screen with hyprlock
  4. Suspend
  5. Try to unlock

Crash reports, logs, images, videos

bisect-bad.log
bisect-good.log

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions