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;
Laércio de Sousa
2015-Jul-07 17:15 UTC
[LightDM] [systemd-devel] sd 221 regression: login - nonexistent sessions via lightdm
I can confirm lightdm greeter leaves some proccesses behind when it's closed (like dbus-launch, dbus-daemon, at-spi-bus-launcher...) They are only definitely terminated when user logs out from that seat. 2015-07-07 14:10 GMT-03:00 David Herrmann <dh.herrmann at gmail.com>:> 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; > _______________________________________________ > systemd-devel mailing list > systemd-devel at lists.freedesktop.org > http://lists.freedesktop.org/mailman/listinfo/systemd-devel >-- *Laércio de Sousa* *Orientador de Informática* *Escola Municipal "Professor Eulálio Gruppi"* *Rua Ismael da Silva Mello, 559, Mogi Moderno* *Mogi das Cruzes - SPCEP 08717-390* Telefone: (11) 4726-8313 -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.freedesktop.org/archives/lightdm/attachments/20150707/588ec7a7/attachment.html>
David Herrmann
2015-Jul-07 17:48 UTC
[LightDM] [systemd-devel] sd 221 regression: login - nonexistent sessions via lightdm
Hi On Tue, Jul 7, 2015 at 7:10 PM, David Herrmann <dh.herrmann at gmail.com> wrote:> 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).Ok, I pushed this to -git now. Should be fixed. Can you guys verify? Thanks David
Martin Pitt
2015-Jul-07 18:56 UTC
[LightDM] [systemd-devel] sd 221 regression: login - nonexistent sessions via lightdm
Hello David, David Herrmann [2015-07-07 19:10 +0200]:> On Tue, Jul 7, 2015 at 6:55 PM, Martin Pitt <martin.pitt at ubuntu.com> wrote: > > 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.Got that now: └─user-110.slice ├─user at 110.service │ ├─996 /lib/systemd/systemd --user │ └─997 (sd-pam) └─session-c1.scope ├─1149 /usr/bin/pulseaudio --start --log-target=syslog └─1168 /usr/lib/pulseaudio/pulse/gconf-helper So indeed some leaked processes which don't terminate along with gnome-session. As it happens I get that on my system as well, but the "leaked" session just lasts for a few seconds after logging in and then goes away.> So it might indeed just be a race in lightdm.Right, it's IMHO a lightdm greeter bug that the session doesn't properly terminate.> Anyway, this patch here should also fix the issue (if it does, I'll > commit something proper).Thanks, looks good! It's surely a workaround, but indeed this might not be the only case that's affected, so thanks for this safety net. I'll build a package with that and ask the reporter for testing. Martin -- Martin Pitt | http://www.piware.de Ubuntu Developer (www.ubuntu.com) | Debian Developer (www.debian.org)
poma
2015-Jul-07 20:08 UTC
[LightDM] [systemd-devel] sd 221 regression: login - nonexistent sessions via lightdm
On 07.07.2015 19:48, David Herrmann wrote:> Hi > > On Tue, Jul 7, 2015 at 7:10 PM, David Herrmann <dh.herrmann at gmail.com> wrote: >> 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). > > Ok, I pushed this to -git now. Should be fixed. Can you guys verify? > > Thanks > David >$ loginctl list-sessions SESSION UID USER SEAT 1 1001 test seat0 c1 989 lightdm seat0 2 sessions listed. $ loginctl show-session c1 Id=c1 Name=lightdm Timestamp=Tue 2015-07-07 21:44:41 CEST TimestampMonotonic=51125373 VTNr=1 Display=:0 Remote=no Service=lightdm-greeter Scope=session-c1.scope Leader=1346 Audit=0 Type=x11 Class=greeter Active=no State=closing IdleHint=no IdleSinceHint=0 IdleSinceHintMonotonic=0 $ loginctl show-session 1 Id=1 Name=test Timestamp=Tue 2015-07-07 21:56:10 CEST TimestampMonotonic=739928248 VTNr=1 Display=:0 Remote=no Service=lightdm Desktop=xfce Scope=session-1.scope Leader=1983 Audit=1 Type=x11 Class=user Active=yes State=active IdleHint=no IdleSinceHint=0 IdleSinceHintMonotonic=0 $ rpm -q systemd lightdm lightdm-gtk systemd-222-2.fc23.x86_64 lightdm-1.15.0-2.fc23.x86_64 lightdm-gtk-2.0.1-2.fc23.x86_64 It's OK.