physlock icon indicating copy to clipboard operation
physlock copied to clipboard

Password input problem when resuming from suspend/hibernate

Open tstsrt opened this issue 5 years ago • 4 comments

After resuming from suspend/hibernate, the first authentication attempt fails unless backspace is pressed atleast once. Later attempts work normally. This is because stdin isn't flushed before the password is read, and systemd automatically uses /dev/null as stdin, which puts an EOF in the password field. A workaround is to set StandardInput=tty in the service file. I'm using the following systemd unit to start physlock before suspend. OS is Arch, physlock version is physlock 13, and systemd version is 245.5-2-arch.

[Unit]
Description=Lock the session before suspending
Before=sleep.target

[Service]
User=%I
Type=forking
StandardInput=tty
TTYPath=/dev/tty7
ExecStart=/usr/bin/physlock -d

[Install]
WantedBy=sleep.target

tstsrt avatar May 19 '20 11:05 tstsrt

Any ideas on how this might be solved without systemd, like when launching physlock manually, then closing laptop lid?

Noahmatada avatar Jun 07 '20 03:06 Noahmatada

The bug seems to happen only if both a) the password prompt is running, and b) the system resumes from suspend/hibernate. One possible fix is to have two separate modes of operation - one to lock and another to unlock an already running physlock instance. This way, we can lock the system before suspend and then prompt only after resuming. I'm not sure how difficult this would be to implement, though.

tstsrt avatar Jun 08 '20 14:06 tstsrt

Couldn't it just be made to ignore the EOF character?

Noahmatada avatar Jun 08 '20 23:06 Noahmatada

I believe that would involve either changing the upstream misc_conv function (the password prompt) or writing a custom PAM conversation function that ignores EOF.

tstsrt avatar Jun 09 '20 05:06 tstsrt