Dear Maintainer,
Upgrading lightdm from 1.32.0-7+b1 to 1.33.0-1 broke seat session switching.
As a consequence light-locker can no longer lock the screen at all, and
leaves
an unrecoverable black screen behind. Downgrading to 1.32.0 fixes it.
Hardware
and configuration are otherwise unchanged; this setup worked for about three
years.
WHAT HAPPENS
Any request to switch to the greeter is refused.
/var/log/lightdm/lightdm.log:
Seat seat0: Unable to switch to greeter because the seat already has a
session and does not support session switching
This is logged on every attempt, whether triggered by light-locker, by
"light-locker-command -l", or by calling the D-Bus method directly:
busctl --system call org.freedesktop.DisplayManager \
/org/freedesktop/DisplayManager/Seat0 \
org.freedesktop.DisplayManager.Seat SwitchToGreeter
which returns:
Call failed: Failed to switch to greeter
No greeter process is started, the VT never changes, and only the original
Xorg remains.
WHY IT IS WORSE THAN A FAILED LOCK
light-locker blanks by mapping a full-screen black window per monitor before
handing off to the greeter. With the handoff refused, those windows stay.
They
are created with close-down mode RetainPermanent, so they survive the
client's
death:
$ pgrep -x light-locker
(nothing)
$ xwininfo -root -children | grep 1920x1080
0x2e0000c "light-locker": 1920x1080+0+0
0x2e00010 "light-locker": 1920x1080+1920+0
The result is a black screen over a fully working desktop, on a dual-head
setup covering the whole 3840x1080 area. Killing light-locker does not clear
it. Underneath, everything is healthy - DRM reports both CRTCs enable=1
active=1 with framebuffers bound, connectors dpms=On, backlight on. Only
"xkill -id <window>" or restarting X recovers it. This is very hard to
diagnose, because every layer reports the display as working.
STEPS TO REPRODUCE
1. Debian with lightdm + lightdm-gtk-greeter + XFCE + light-locker,
default configuration (no xserver-share set, i.e. the default true).
2. Log in to an X session.
3. Run: light-locker-command -l
4. Screen goes black and never returns to a greeter.
/var/log/lightdm/lightdm.log shows the message above.
Expected: the greeter appears, and authenticating returns to the same
session.
WORKAROUND / BISECT
Downgrading to lightdm 1.32.0-6+b1 restores correct behaviour: locking
works,
the greeter appears, and logging back in returns to the same session.
Nothing
else was changed. lightdm 1.33.0-1 was the only lightdm version change in
this
machine's dpkg history.
Setting "xserver-share=false" in [Seat:*] does make SwitchToGreeter succeed
on
1.33.0-1, but on this system it then destroys the user session on any VT
switch
(Ctrl+Alt+F2 terminates the X session and lightdm spawns greeters
repeatedly),
so it is not a usable workaround. Mentioned only as a diagnostic data point.
POSSIBLY RELEVANT
The 1.33.0-1 changelog contains a change in exactly the area where seat
capabilities are determined:
* d/control: use default-logind instead of libpam-systemd (Closes:
#931837)
For what it is worth, logind itself still advertises the capability:
$ busctl --system get-property org.freedesktop.login1 \
/org/freedesktop/login1/seat/seat0 \
org.freedesktop.login1.Seat CanMultiSession
b true
and allow-user-switching is unset, i.e. at its default of true.