poma
2015-Jul-08 11:29 UTC
[LightDM] [systemd-devel] sd 221 regression: login - nonexistent sessions via lightdm
On 07.07.2015 22:49, David Herrmann wrote:> Hi > > On Tue, Jul 7, 2015 at 10:08 PM, poma <pomidorabelisima at gmail.com> wrote: >> 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. > > Much appreciated, thanks! > > I'd still prefer a comment from Robert about the intended behavior. > But that's not release critical. > > Thanks > David >Here is another case where this is still broken - LiveCD/DVD constellation. Initial log-in should work, but subsequent ones sind kaputt aber glücklich. So how to reproduce: just log-out & log-in, again. Here is a visual record: http://goo.gl/Gm4ffO Screencast/catch-a-tiger-by-the-toe.webm and here is a test compilation, so you can test it yourself: http://goo.gl/Gm4ffO ISO/Rawhide-Live-Xfce-708.iso
David Herrmann
2015-Jul-08 11:54 UTC
[LightDM] [systemd-devel] sd 221 regression: login - nonexistent sessions via lightdm
Hi On Wed, Jul 8, 2015 at 1:29 PM, poma <pomidorabelisima at gmail.com> wrote:> Here is another case where this is still broken - LiveCD/DVD constellation. > Initial log-in should work, but subsequent ones sind kaputt aber glücklich. > So how to reproduce: > just log-out & log-in, again. > > Here is a visual record: > http://goo.gl/Gm4ffO > Screencast/catch-a-tiger-by-the-toe.webm > > and here is a test compilation, so you can test it yourself: > http://goo.gl/Gm4ffO > ISO/Rawhide-Live-Xfce-708.isoI see. I assume the greeter is again started on the same VT as the leaving session. If the previous session now leaves stuff behind, we end up with the same issue. Does the attached patch fix this? (This is getting a bit convoluted.. we should really fix this properly) Thanks David diff --git a/src/login/logind-dbus.c b/src/login/logind-dbus.c index 82654ee..91cc67d 100644 --- a/src/login/logind-dbus.c +++ b/src/login/logind-dbus.c @@ -699,9 +699,12 @@ static int method_create_session( * after the user-session and want the user-session to take * over the VT. We need to support this for * backwards-compatibility, so make sure we allow new sessions - * on a VT that a greeter is running on. + * on a VT that a greeter is running on. Furthermore, to allow + * re-logins, we have to allow a greeter to take over a used VT for + * the exact same reasons. */ - if (vtnr > 0 && + if (class != SESSION_GREETER && + vtnr > 0 && vtnr < m->seat0->position_count && m->seat0->positions[vtnr] && m->seat0->positions[vtnr]->class != SESSION_GREETER)