hyprlock icon indicating copy to clipboard operation
hyprlock copied to clipboard

Not exit after unlock

Open lfdominguez opened this issue 6 months ago • 18 comments

Regression?

No

Hyprlock Info and Version

Hyprlock version v0.8.2

Hyprlock config
background {
  blur_passes=3
  blur_size=8
  brightness=0.817200
  contrast=0.891600
  path=screenshot
  vibrancy=0.169600
  vibrancy_darkness=0.000000
}

general {
  grace=0
  hide_cursor=false
}

input-field {
  size=250, 60
  dots_center=true
  dots_size=0.200000
  dots_spacing=0.200000
  fade_on_empty=false
  font_color=rgb(200, 200, 200)
  font_family=SF Pro Display Bold
  halign=center
  hide_input=false
  inner_color=rgba(100, 114, 125, 0.5)
  outer_color=rgba(0, 0, 0, 0)
  outline_thickness=2
  placeholder_text=<i><span foreground="##ffffff99">Whatsaaaaaaa!!!!, $USER</span></i>
  position=0, -290
  valign=center
}

label {
  color=rgba(255, 185, 0, .6)
  font_family=AlfaSlabOne
  font_size=180
  halign=center
  position=0, 300
  text=cmd[update:1000] echo -e "$(date +"%H")"
  valign=center
}

label {
  color=rgba(255, 255, 255, .6)
  font_family=AlfaSlabOne
  font_size=180
  halign=center
  position=0, 75
  text=cmd[update:1000] echo -e "$(date +"%M")"
  valign=center
}

label {
  font_family=SF Pro Display Bold
  font_size=30
  halign=center
  position=0, -80
  text=cmd[update:1000] echo "<span color='##ffffff99'>$(date '+%A, ')</span><span color='##ffb90099'>$(date '+%d %B')</span>"
  valign=center
}

label {
  color=rgba(255, 255, 255, 0.7)
  font_family=JetBrains Mono Nerd, SF Pro Display Bold
  font_size=18
  halign=center
  position=0, 60
  text=cmd[update:1000] echo "$(/nix/store/k43a6v6kdmhxp0xdx0csi8sn96ajzcds-spotify-script/bin/spotify-script)"
  valign=bottom
}

Compositor Info and Version

System/Version info
Hyprland 0.49.0 built from branch  at commit 81cd526f923f4a9074bbfef59b4c7e9f3350c349  ().
Date: 2025-05-23
Tag: v0.49.0, commits: 6132
built against:
 aquamarine 0.8.0
 hyprlang 0.6.3
 hyprutils 0.7.1
 hyprcursor 0.1.12
 hyprgraphics 0.1.3


no flags were set


System Information:
System name: Linux
Node name: lenovo
Release: 6.14.8-cachyos
Version: #1-NixOS SMP PREEMPT_DYNAMIC Thu May 22 12:31:58 UTC 2025


GPU information: 
01:00.0 VGA compatible controller [0300]: NVIDIA Corporation GA106M [GeForce RTX 3060 Mobile / Max-Q] [10de:2520] (rev a1) (prog-if 00 [VGA controller])
06:00.0 VGA compatible controller [0300]: Advanced Micro Devices, Inc. [AMD/ATI] Cezanne [Radeon Vega Series / Radeon Vega Mobile Series] [1002:1638] (rev c6) (prog-if 00 [VGA controller])
NVRM version: NVIDIA UNIX Open Kernel Module for x86_64  575.51.02  Release Build  (nixbld@)  


os-release: ANSI_COLOR="0;38;2;126;186;228"
BUG_REPORT_URL="https://github.com/NixOS/nixpkgs/issues"
BUILD_ID="25.05.20250522.55d1f92"
CPE_NAME="cpe:/o:nixos:nixos:25.05"
DEFAULT_HOSTNAME=nixos
DOCUMENTATION_URL="https://nixos.org/learn.html"
HOME_URL="https://nixos.org/"
ID=nixos
ID_LIKE=""
IMAGE_ID=""
IMAGE_VERSION=""
LOGO="nix-snowflake"
NAME=NixOS
PRETTY_NAME="NixOS 25.05 (Warbler)"
SUPPORT_END="2025-12-31"
SUPPORT_URL="https://nixos.org/community.html"
VARIANT=""
VARIANT_ID=""
VENDOR_NAME=NixOS
VENDOR_URL="https://nixos.org/"
VERSION="25.05 (Warbler)"
VERSION_CODENAME=warbler
VERSION_ID="25.05"


plugins:

Description

I'm using this command to lock my screen pidof hyprlock || hyprlock to avoid a duplicated hyprlock running on the system if already locked the session, but sometimes when hyprlock is executed, after successfully unlocked the session, the hyprlock process gets stuck and not exit, so, pidof return the current PID and hyprlock is not executed again.

How to reproduce

1 - Execute hyprlock on terminal (to show logs) 2 - Unlock (put password) 3 - Sometimes on logs you see that after "Exit" log messages get stuck and not exit from hyprlock (the window close correctly)

Crash reports, logs, images, videos

I tried to check with GDB where is stucked the process and sems that in some place get waiting and polling an event.

Image

lfdominguez avatar Jun 02 '25 13:06 lfdominguez

Yep I was able to reproduce.

This happens when Hyprland is already locked and another hyprlock process starts (But only with misc:allow_session_lock_restore?). I think Hyprland should send the finished event to one of them. What happens is that neither locked nor finished is sent and hyprlock never exits.

So I think it's a Hyprland bug.

PointerDilemma avatar Jun 04 '25 16:06 PointerDilemma

In my case I dont execute another hyprlock (pidof hyprlock || hyprlock) so sems that hyprlock not receive a signal to stop or something like that after unlock

lfdominguez avatar Jun 08 '25 16:06 lfdominguez

Able to reproduce directly from the console, without hypridle, executed many times and unlock, until blocked:

Image

Get stuck there.

lfdominguez avatar Jun 08 '25 16:06 lfdominguez

In difference with the normal output, missing the:

[LOG] Reached the end, exiting

Last log

lfdominguez avatar Jun 08 '25 16:06 lfdominguez

New founds, only happens to me if: 1 - Change the input of my monitor (I have a multi-input display) 2 - Hyprlock triggered 3 - Come back to the input of my machine 4 - Unblock hyprlock 5 - Unbock OK but hyprlock process get stuck

Sems that the display handler or some message from hyprland or hyprlock itself referred to display is never received.

lfdominguez avatar Jun 09 '25 22:06 lfdominguez

I am currently a bit busy, but i will have more time after next week to look into fixing it. Or possibly now we will see.

Sems that the display handler or some message from hyprland or hyprlock itself referred to display is never received.

Sort of. The issue seems to be directly related to the protocol. Whenever you lock the compositor with a lock request, the compositor must either send locked or finished. When that doesn't happen, it's a protocol error.

PointerDilemma avatar Jun 13 '25 10:06 PointerDilemma

@lfdominguez do you have the Hyprland option misc:allow_session_lock_restore enabled? If so, please disable it. That should fix this behaviour for now. This option is out of protocol and only used to recover from a lockscreen that crashed.

PointerDilemma avatar Jun 13 '25 10:06 PointerDilemma

@lfdominguez do you have the Hyprland option misc:allow_session_lock_restore enabled? If so, please disable it. That should fix this behaviour for now. This option is out of protocol and only used to recover from a lockscreen that crashed.

Image

ohhh yeah, let me disable it and check if happens agai

lfdominguez avatar Jun 15 '25 00:06 lfdominguez

Well disabling that config option, tried the same method of changing my display input many times and trying to lock, unlock, etc.... not get stuck.... I will wait for some days and check if no happening again

lfdominguez avatar Jun 15 '25 01:06 lfdominguez

Noup, stuck on the same place, waiting for pull

lfdominguez avatar Jun 18 '25 03:06 lfdominguez

Noup, stuck on the same place, waiting for pull

I doubt that, sorry. This is an issue with allow_session_lock_restore which causes Hyprland to violate the session lock protocol a bit. There is no way the behavior you described happens without that option.

Maybe you used hyprctl --instance 0 keyword misc:allow_session_lock_restore 1 ??

PointerDilemma avatar Jun 18 '25 07:06 PointerDilemma

humm let me check if hyprland took my changes

lfdominguez avatar Jun 18 '25 13:06 lfdominguez

@PaideiaDilemma like you see here, the option is disabled

Image

lfdominguez avatar Jun 18 '25 13:06 lfdominguez

Another debugger to check where is stopped the hyprlock threads

Image

lfdominguez avatar Jun 18 '25 13:06 lfdominguez

Maybe i need to full restart hyprland, only reloaded for config load

lfdominguez avatar Jun 18 '25 17:06 lfdominguez

Thanks for checking again!

I think I now understand.

1 - Change the input of my monitor (I have a multi-input display) 2 - Hyprlock triggered 3 - Come back to the input of my machine 4 - Unblock hyprlock 5 - Unbock OK but hyprlock process get stuck

That probably means that hyprlock runs without a display for a while correct?? What I would need to know is when you switch your monitor input, is hyprland left without a monitor? Does hyprland log "Entering unsafe state" when you do that?

PointerDilemma avatar Jun 19 '25 13:06 PointerDilemma

Hi, yes, i think my LG display when change the input take down the previus one, but need to test, i will test and check

lfdominguez avatar Jun 19 '25 13:06 lfdominguez

Hi, just confirming that some LG displays can be an issue, probably already known. Native display on my t420 was freezing hyprlock like that during unlocking for me. Disabling that output made it work again.

[LOG] Exposed seat name: Hyprland
[LOG] [core] dmabufFeedbackMainDevice
[LOG] output LVDS-1 name LVDS-1
[LOG] output 58 description LG Display 0x40A0  (LVDS-1)
[LOG] output 58 make LG Display model 0x40A0
[LOG] output 58 done
[LOG] output VGA-1 name VGA-1
[LOG] output 59 description Ancor Communications Inc VX229 H1LMRS015054 (VGA-1)
[LOG] output 59 make Ancor Communications Inc model VX229
[LOG] output 59 done
[LOG] output DP-1 name DP-1
[LOG] output 60 description LG Electronics LG ULTRAWIDE 0x00026F9B (DP-1)
[LOG] output 60 make LG Electronics model LG ULTRAWIDE
[LOG] output 60 done
[LOG] Running on Hyprland
[LOG] Locking session
[WARN] output 58 refu

mighty-spirit avatar Jul 08 '25 22:07 mighty-spirit