libs: fix fallback in KDisplayManager::newSession()

SwitchToGreeter is method on the org.freedesktop.DisplayManager.Seat
interface not org.freedesktop.DisplayManager.Session

Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
This commit is contained in:
Ivailo Monev 2023-09-19 01:26:38 +03:00
parent 57aee76feb
commit c1ae5b77e7

View file

@ -204,45 +204,51 @@ void KDisplayManager::newSession()
return;
}
QDBusInterface dmiface(
QString::fromLatin1("org.freedesktop.DisplayManager"),
QString::fromLatin1("/org/freedesktop/DisplayManager"),
QString::fromLatin1("org.freedesktop.DisplayManager"),
QDBusConnection::systemBus()
);
if (dmiface.isValid()) {
const QString username = KUser().loginName();
const QList<QDBusObjectPath> dmsessions = qvariant_cast<QList<QDBusObjectPath>>(dmiface.property("Sessions"));
// qDebug() << Q_FUNC_INFO << dmiface.property("Sessions");
foreach (const QDBusObjectPath &dmsessionobj, dmsessions) {
QDBusInterface dmsessioniface(
QString::fromLatin1("org.freedesktop.DisplayManager"),
dmsessionobj.path(),
QString::fromLatin1("org.freedesktop.DisplayManager.Session"),
QDBusConnection::systemBus()
);
if (!dmsessioniface.isValid()) {
kWarning() << "Display manager session interface is not valid";
continue;
}
const QString dmusername = dmsessioniface.property("UserName").toString();
// qDebug() << Q_FUNC_INFO << dmusername << username;
if (dmusername == username) {
dmsessioniface.asyncCall("SwitchToGreeter");
return;
const QByteArray dmseatbytes = qgetenv("XDG_SEAT_PATH");
QString dmseat = QString::fromLocal8Bit(dmseatbytes.constData(), dmseatbytes.size());
if (dmseat.isEmpty()) {
QDBusInterface dmiface(
QString::fromLatin1("org.freedesktop.DisplayManager"),
QString::fromLatin1("/org/freedesktop/DisplayManager"),
QString::fromLatin1("org.freedesktop.DisplayManager"),
QDBusConnection::systemBus()
);
if (dmiface.isValid()) {
const QString username = KUser().loginName();
const QList<QDBusObjectPath> dmsessions = qvariant_cast<QList<QDBusObjectPath>>(dmiface.property("Sessions"));
// qDebug() << Q_FUNC_INFO << dmiface.property("Sessions");
foreach (const QDBusObjectPath &dmsessionobj, dmsessions) {
QDBusInterface dmsessioniface(
QString::fromLatin1("org.freedesktop.DisplayManager"),
dmsessionobj.path(),
QString::fromLatin1("org.freedesktop.DisplayManager.Session"),
QDBusConnection::systemBus()
);
if (!dmsessioniface.isValid()) {
kWarning() << "Display manager session interface is not valid";
continue;
}
const QString dmusername = dmsessioniface.property("UserName").toString();
// qDebug() << Q_FUNC_INFO << dmusername << username;
if (dmusername == username) {
const QDBusObjectPath dmsessionseat = qvariant_cast<QDBusObjectPath>(dmsessioniface.property("Seat"));
dmseat = dmsessionseat.path();
break;
}
}
}
}
QDBusInterface lightdmiface(
"org.freedesktop.DisplayManager",
qgetenv("XDG_SEAT_PATH"),
"org.freedesktop.DisplayManager.Seat",
QDBusConnection::systemBus()
);
if (lightdmiface.isValid()) {
lightdmiface.asyncCall("SwitchToGreeter");
return;
if (!dmseat.isEmpty()) {
QDBusInterface lightdmiface(
"org.freedesktop.DisplayManager",
dmseat,
"org.freedesktop.DisplayManager.Seat",
QDBusConnection::systemBus()
);
if (lightdmiface.isValid()) {
lightdmiface.asyncCall("SwitchToGreeter");
return;
}
}
kWarning() << "No way to start new session";