[Solved]: Switchuser Issue

Rainer Dorsch ml at bokomoko.de
Wed May 23 15:45:14 UTC 2018


Hi,

just for completeness, fvogt helped on #plasma to resolve the issue:

this seems to cause the issue

https://bugs.gentoo.org/644718#c0

This fixes the problem
https://github.com/sddm/sddm/pull/1010/files

Rainer

Am Dienstag, 15. Mai 2018, 17:26:03 CEST schrieb Rainer Dorsch:
> Hi,
> 
> small addition:
> 
> There is at least one user on #debian-kde who claims that sddm and
> switchuser works for him.
> 
> For sddm this line should apply in kdisplaymanager.cpp:
> 
> return exec("caps\n", re) && re.indexOf("\tlocal") >= 0;
> 
> What does that do? I do not find a file caps which can be executed :-/
> 
> Thanks
> Rainer
> 
> On Dienstag, 15. Mai 2018 17:12:25 CEST you wrote:
> > Hi,
> > 
> > I digged a little further:
> > 
> > On Dienstag, 15. Mai 2018 09:02:52 CEST Rainer Dorsch wrote:
> > > Hi,
> > > 
> > > I have an issue with switch user in ksmserver on my newly installed
> > > Debian
> > > buster system (plama-workspaces 5.12.5):
> > > 
> > > When I try to swich user, I get the switchuser dialog displayed, but
> > > when
> > > I
> > > click on switch, I get to my own session's lockscreen. This doesn't seem
> > > to
> > > be a general issue, there is at least one person on #debian-kde who
> > > reports
> > > that switching users works for him.
> > > 
> > > I traced the code and ended up in
> > > 
> > > /usr/share/plasma/look-and-feel/org.kde.breeze.desktop/contents/userswit
> > > ch
> > > er / UserSwitcher.qml
> > 
> > That gets executed, modifying the text of a button took effect, nice that
> > it is a scripting language... :-)
> > 
> > > Since I am not an qml writer (or reader ;-) I was so far not able to
> > > find
> > > out what
> > > 
> > > sessionsModel.switchUser(block.userListCurrentModelData.vtNumber,
> > > sessionsModel.shouldLock)
> > > 
> > > does. As a first test, can I add a log statement to test, if that line
> > > in
> > > the code is really reached (maybe just log to /tmp/switchuserdebug.log)?
> > > 
> > > Any idea is welcome.
> > 
> > ...and I am back in sessionsmodel.cpp
> > 
> > it seems there are a few return statements which effectively (as I
> > understand it) simply skip the switch user. That is what I actually see.
> > 
> > void SessionsModel::switchUser(int vt, bool shouldLock)
> > {
> > 
> >     if (vt < 0) {
> >     
> >         startNewSession(shouldLock);
> >         return;
> >     
> >     }
> >     
> >     if (!canSwitchUser()) {
> >     
> >         return;
> >     
> >     }
> >     
> >     if (!shouldLock) {
> >     
> >         m_displayManager.switchVT(vt);
> >         emit switchedUser(vt);
> >         return;
> >     
> >     }
> >     
> >     checkScreenLocked([this, vt](bool locked) {
> >     
> >         if (locked) {
> >         
> >             // already locked, switch right away
> >             m_displayManager.switchVT(vt);
> >             emit switchedUser(vt);
> >         
> >         } else {
> >         
> >             m_pendingReserve = false;
> >             m_pendingVt = vt;
> >             
> >             emit aboutToLockScreen();
> >             m_screensaverInterface->Lock();
> >         
> >         }
> >     
> >     });
> > 
> > }
> > 
> > In particular I suspect that the
> > 
> >     if (!canSwitchUser()) {
> >     
> >         return;
> >     
> >     }
> > 
> > is executed:
> > 
> > bool SessionsModel::canSwitchUser() const
> > {
> > 
> >     return const_cast<SessionsModel
> > 
> > *>(this)->m_displayManager.isSwitchable() &&
> > KAuthorized::authorizeAction(QLatin1String("switch_user"));
> > }
> > 
> > Unfortunately, for me it is not clear, what could
> > KAuthorized::authorizeAction(QLatin1String("switch_user") make false or
> > how
> > I can validate if SessionsModel *>(this)->m_displayManager.isSwitchable()
> > is true.
> > 
> > Looking at isSwitchable:
> > 
> > bool
> > KDisplayManager::isSwitchable()
> > {
> > 
> >     if (DMType == NewGDM || DMType == LightDM) {
> >     
> >         QDBusObjectPath currentSeat;
> >         if (getCurrentSeat(0, &currentSeat)) {
> >         
> >             SystemdSeat SDseat(currentSeat);
> >             if (SDseat.isValid()) {
> >             
> >                 QVariant prop = SDseat.property("CanMultiSession");
> >                 if (prop.isValid())
> >                 
> >                     return prop.toBool();
> >             
> >             }
> >             CKSeat CKseat(currentSeat);
> >             if (CKseat.isValid()) {
> >             
> >                 QDBusReply<bool> r =
> > 
> > CKseat.call(QStringLiteral("CanActivateSessions"));
> > 
> >                 if (r.isValid())
> >                 
> >                     return r.value();
> >             
> >             }
> >         
> >         }
> >         return false;
> >     
> >     }
> >     
> >     if (DMType == OldKDM)
> >     
> >         return dpy[0] == ':';
> >     
> >     if (DMType == OldGDM)
> >     
> >         return exec("QUERY_VT\n");
> >     
> >     QByteArray re;
> >     
> >     return exec("caps\n", re) && re.indexOf("\tlocal") >= 0;
> > 
> > }
> > 
> > Is sddm covered here?
> > 
> > Trying with lightDM as default display manager....and the problem goes
> > away
> > 
> > :-)
> > 
> > Is it true that sddm is not supported? I am surprised since switchuser
> > worked with sddm for me in Debian Stretch (plasma-5.8.6)?
> > 
> > Also it would helped me tremendously, if a log entry (or even a pop-up
> > message...) would have been produced instead of a silent failure.... It
> > seems that would not add a lot of code...
> > 
> > Thanks
> > Rainer


-- 
Rainer Dorsch
Beatus-Widmann-Str. 5
72138 Kirchentellinsfurt
07157-734133
email: fdbaut at bokomoko.de




More information about the Plasma-devel mailing list