Martin Pitt
2015-Jul-07 16:55 UTC
[LightDM] [systemd-devel] sd 221 regression: login - nonexistent sessions via lightdm
Hey David, David Herrmann [2015-07-07 18:31 +0200]:> > Revert "login: re-use VT-sessions if they already exist" - commit 0204c4b > > http://cgit.freedesktop.org/systemd/systemd/commit/?id=0204c4b > > Can someone elaborate what exactly lightdm does here? We really want > to prevent multiple sessions on the same VT. This is just nasty and > never made any sense. So I'm really interested why lightdm doesn't > kill it's manager-session before it starts the new session. Any > particular reason here?I'll let Robert answer with the details, but something I noticed: It's not that simple to reproduce, but sometimes it seems the lightdm "greeter" session (running as user lightdm, where you select user/type password and so on) doesn't completely terminate, but some processes stay around in it. Thus the greeter session stays around in state "Closing", and then the "real" session starts on the same VT. I asked the reporter of https://launchpad.net/bugs/1472259 to attach systemd-cgls, so that we can see what's running in the session. Thanks, Martin -- Martin Pitt | http://www.piware.de Ubuntu Developer (www.ubuntu.com) | Debian Developer (www.debian.org)
David Herrmann
2015-Jul-07 17:10 UTC
[LightDM] [systemd-devel] sd 221 regression: login - nonexistent sessions via lightdm
Hi On Tue, Jul 7, 2015 at 6:55 PM, Martin Pitt <martin.pitt at ubuntu.com> wrote:> Hey David, > > David Herrmann [2015-07-07 18:31 +0200]: >> > Revert "login: re-use VT-sessions if they already exist" - commit 0204c4b >> > http://cgit.freedesktop.org/systemd/systemd/commit/?id=0204c4b >> >> Can someone elaborate what exactly lightdm does here? We really want >> to prevent multiple sessions on the same VT. This is just nasty and >> never made any sense. So I'm really interested why lightdm doesn't >> kill it's manager-session before it starts the new session. Any >> particular reason here? > > I'll let Robert answer with the details, but something I noticed: > > It's not that simple to reproduce, but sometimes it seems the lightdm > "greeter" session (running as user lightdm, where you select user/type > password and so on) doesn't completely terminate, but some processes > stay around in it. Thus the greeter session stays around in state > "Closing", and then the "real" session starts on the same VT. > > I asked the reporter of https://launchpad.net/bugs/1472259 to attach > systemd-cgls, so that we can see what's running in the session.So it might indeed just be a race in lightdm. Hmm.. Anyway, this patch here should also fix the issue (if it does, I'll commit something proper). Thanks David diff --git a/src/login/logind-dbus.c b/src/login/logind-dbus.c index 0cc2cdf..bced693 100644 --- a/src/login/logind-dbus.c +++ b/src/login/logind-dbus.c @@ -690,8 +690,11 @@ static int method_create_session } manager_get_session_by_pid(m, leader, &session); - if (!session && vtnr > 0 && vtnr < m->seat0->position_count) + if (!session && vtnr > 0 && vtnr < m->seat0->position_count) { session = m->seat0->positions[vtnr]; + if (session && session->class == SESSION_GREETER) + session = NULL; + } if (session) { _cleanup_free_ char *path = NULL; _cleanup_close_ int fifo_fd = -1;