From 4c497ed538f91196ad1c7454f02a32a393c58dd6 Mon Sep 17 00:00:00 2001 From: Jeena Date: Sat, 29 Aug 2026 09:34:30 +0900 Subject: [PATCH] fix(hyprlock): make input field always visible MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit With fade_on_empty=true, a 0.3-alpha inner_color and placeholder_text=$LAYOUT (which resolves empty under fcitx5), the empty input field faded to nothing — only the clock rendered and there was no visible way to type the password. - fade_on_empty = false - inner_color alpha 0.3 -> 0.6 - static placeholder 'Enter password' instead of $LAYOUT Also document the graceful emergency unlock (pkill -USR1 hyprlock) in lock.sh: SIGTERM/SIGKILL on a running lock latches Hyprland's crashed- lockscreen state, requiring hl.clear_crashed_lockscreen() to recover. Clarify in hyprlock.conf that the fingerprint auth block is for Chester and is a no-op on machines without fprintd (e.g. Rutherford). --- hypr/hyprlock.conf | 14 +++++++++++--- hypr/scripts/lock.sh | 7 +++++++ 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/hypr/hyprlock.conf b/hypr/hyprlock.conf index acce3e6..1d414b5 100644 --- a/hypr/hyprlock.conf +++ b/hypr/hyprlock.conf @@ -1,4 +1,7 @@ auth { + # Parallel fingerprint auth — used on Chester (fingerprint reader + fprintd). + # On machines without fprintd/reader (e.g. Rutherford) hyprlock simply never + # claims a device, so this stays inactive and only password auth applies. fingerprint { enabled = true ready_message = Scan fingerprint to unlock @@ -29,13 +32,16 @@ label { input-field { size = 8%, 3% outline_thickness = 0 - inner_color = rgba(255, 182, 193, 0.3) # transparent background + inner_color = rgba(255, 182, 193, 0.6) # translucent but clearly visible outer_color = rgba(255, 255, 255, 0.5) rgba(255, 255, 255, 1.0) 90deg check_color = rgba(255, 50, 80, 0.9) rgba(255, 0, 100, 0.9) 30deg fail_color = rgba(255, 50, 80, 0.9) rgba(255, 0, 100, 0.9) 30deg font_color = rgba(255, 255, 255, 0.9) - fade_on_empty = true + # fade_on_empty made the empty field nearly invisible (combined with the + # transparent inner_color and an empty $LAYOUT placeholder under fcitx5), + # leaving only the clock on screen with no way to tell where to type. + fade_on_empty = false rounding = 20 position = 0, 60 @@ -43,6 +49,8 @@ input-field { valign = bottom font_family = Roboto - placeholder_text = $LAYOUT + # $LAYOUT can resolve to an empty string when fcitx5 owns the keyboard, + # which left a blank placeholder; show useful static text instead. + placeholder_text = Enter password } diff --git a/hypr/scripts/lock.sh b/hypr/scripts/lock.sh index 9e6c744..a6bc862 100755 --- a/hypr/scripts/lock.sh +++ b/hypr/scripts/lock.sh @@ -3,6 +3,13 @@ # Prevent multiple hyprlock instances (second instance breaks the lock screen) pidof hyprlock && exit 0 +# --- Emergency unlock (from TTY or SSH) --- +# If the lock screen ever misbehaves, unlock GRACEFULLY with: +# pkill -USR1 hyprlock +# Do NOT kill it with SIGTERM/SIGKILL: Hyprland detects the lock screen dying +# while locked and latches a "crashed lockscreen" state that then requires: +# hyprctl --instance 0 eval "hl.clear_crashed_lockscreen()" + hyprctl switchxkblayout all 0 fcitx5-remote -s keyboard-us-dvorak wpctl set-mute @DEFAULT_AUDIO_SINK@ 1