Password input problem when resuming from suspend/hibernate
tstsrt opened this issue · 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
Any ideas on how this might be solved without systemd, like when launching physlock manually, then closing laptop lid?
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.
Couldn't it just be made to ignore the EOF character?
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.