[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, ¤tSeat)) {
> >
> > 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