Lock, idle and login
Gaps in the lock screen, idle handling, polkit authentication and the SDDM login theme.
- The SDDM login screen theme is written for a Qt greeter on a login manager you already run; Kanade is not a greeter. Themes other than Kanade’s own are best effort (see SDDM), and a picture set by hand in the overlay is not size-checked, which a Qt 5 greeter can choke on.
- Locking before sleep waits until niri says it holds the lock, which it says once every monitor on shows a lock screen. If it does not by logind’s
InhibitDelayMaxSec, sleep comes anyway, and the lock is asked again as the machine wakes: at once, then with a backoff, until it holds or you lock some other way. A lock niri is still confirming as the machine wakes is not asked for twice, so a password typed on the lock screen meanwhile is not dropped. The session was unlocked for the sleep itself, so anything it drew or played shows in that time. - With no PAM service file (the
lock.pam_serviceone,loginby default, in/etc/pam.d,/usr/lib/pam.dor/usr/etc/pam.d), the lock is never asked, before sleep or after it: nothing could unlock it, and a lock that cannot be unlocked is worse than none. The machine then sleeps and wakes unlocked, andkanade lockrefuses too.kanade doctornames the missing file. See ADR 0025. - An unlock sent just before sleep is asked over: the session unlocks for a moment, then locks again before sleep is let go, unless that outlasts logind’s
InhibitDelayMaxSec. Kanade sends the unlock under the same lock as sleep’s gate, so only an unlock already sent races it. See ADR 0025. - The lock screen does not type the key that wakes monitors the
idleModule powered off. It cannot know of monitors powered off any other way (niri msg action power-off-monitors, niri’s own idle, the lid, a resume), so there the waking key is typed. When the monitors wake with no key here, the next key is dropped once. If niri does not deliver the waking key to the lock screen, a password typed within 250 ms of waking loses its first character. - A PAM service that asks for anything but one hidden prompt (an echoed name, a second secret) fails every check: the password answers only the first hidden prompt. PAM’s text and error messages show under the field, cut to 64 characters.
- With
lock.graceabove 0, any key, click, scroll or 4 px of pointer movement on the lock screen unlocks it without a password for that many seconds, only after a lock by theidleModule (neverkanade lock, a lock before sleep or one asked again after a failure). Anyone at the keyboard in that window gets in. - The session countdown’s warning lists only what Kanade knows (a recording, a timer, live Activities) and logind’s blocking
shutdowninhibitors. It cannot know unsaved work in an app, and it is a warning only: nothing stops the restart, power off or log out. See ADR 0077. - Caffeine’s duration does not count time the machine is suspended. An idle daemon sees it only if it honors logind idle inhibitors; hypridle does, but one started while caffeine is already on misses it until it changes. The
idleModule reads it directly. - The
idleModule honors logind idle inhibitors only while it can reach logind on the system bus. Without it, only caffeine and apps’ Wayland idle inhibitors hold the stages, and caffeine turned off while the user stays idle counts again only from the next input or idle. See ADR 0047. - The lock screen’s layout label shows only with two or more keyboard layouts, and follows what niri says; it can be stale for a moment after niri restarts. It shows no other state: no notification, media or battery.
- Polkit’s prompt uses the selected compositor’s focused output under niri and Umbriel. Focus must be confirmed on a present output; navigation’s remembered fallback cannot place Auth. A never-shown request waits without taking the keyboard or accepting a password while focus is missing or overview is active, and retries on an Island change. Only one agent can own this session. While another agent holds it, registration is refused and stderr says why. Kanade retries with a growing wait from 250 ms up to 30 s between attempts; stop the competing agent and wait for registration, without restarting Kanade. If the
polkitModule was disabled, enable it and restart Kanade through the existing startup method. Cancellation shuts down the active helper and clears the password; lock onset synchronously cancels all requests before marking the lock pending or asking the compositor, sharing Auth’s guard with input mutations and helper password writes. A pending or held lock prevents a late prompt. All 27 subprocess scenarios passed, covering real compositor events reaching Auth, deferral, cancellation, input serialization and password writes to a fake helper. On implementationcc0ea5c, live Umbriel registration, visible focused-output placement, exclusive keyboard ownership, Cancel/Escape and overview deferral/retry passed. A separatepkcheckexit 0 without an observed prompt or password entry establishes authorization only; password delivery and PAM success remain unverified. Live lock cancellation/password clearing, missing or stale focus, and niri acceptance remain NOT RUN. ADR 0147 records the exact binary and evidence. See Installation, ADR 0146 and ADR 0147.
