diff --git a/debian/changelog b/debian/changelog index b00bc1e..692bc22 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,9 @@ +ddm (0.1.7) unstable; urgency=medium + + * fix black screen when user activate session + + -- Dingyuan Zhang Fri, 06 Dec 2024 13:52:00 +0800 + ddm (0.1.6) unstable; urgency=medium * allow user take tty control diff --git a/src/daemon/Display.cpp b/src/daemon/Display.cpp index 3386490..d21cf25 100644 --- a/src/daemon/Display.cpp +++ b/src/daemon/Display.cpp @@ -206,11 +206,41 @@ namespace DDM { } void Display::switchToUser(const QString &user) { + if (user == "dde") { + m_greeter->setUserActivated(false); + } + + Auth *auth = nullptr; + + for (auto *a : m_auths) { + if (a->user() == user) { + auth = a; + break; + } + } + + if (!auth) { + return; + } + auto* server = reinterpret_cast(m_displayServer); server->activateUser(user); - if (user == "dde") { - m_greeter->setUserActivated(false); + if (Logind::isAvailable()) { + OrgFreedesktopLogin1ManagerInterface manager(Logind::serviceName(), Logind::managerPath(), QDBusConnection::systemBus()); + auto reply = manager.ListSessions(); + reply.waitForFinished(); + + const auto info = reply.value(); + for(const SessionInfo &s : reply.value()) { + if (s.userName == user) { + OrgFreedesktopLogin1SessionInterface session(Logind::serviceName(), s.sessionPath.path(), QDBusConnection::systemBus()); + if (session.state() == "online" && session.vTNr() == static_cast(auth->tty())) { + session.Activate(); + break; + } + } + } } } @@ -592,7 +622,7 @@ namespace DDM { } } - VirtualTerminal::jumpToVt(auth->tty(), false); + switchToUser(auth->user()); } m_socket = nullptr; } @@ -669,8 +699,7 @@ namespace DDM { qDebug() << "Session started" << success; Auth* auth = qobject_cast(sender()); if (m_displayServerType == SingleCompositerServerType) { - auto* server = reinterpret_cast(m_displayServer); - server->activateUser(auth->user()); + switchToUser(auth->user()); } if (success && m_displayServerType != SingleCompositerServerType) { diff --git a/src/helper/HelperApp.cpp b/src/helper/HelperApp.cpp index 697ae09..91de023 100644 --- a/src/helper/HelperApp.cpp +++ b/src/helper/HelperApp.cpp @@ -134,6 +134,7 @@ namespace DDM { } connect(new SignalHandler(this), &SignalHandler::sigtermReceived, this, [this] { + qDebug() << "sigterm received."; if (m_backend->isGreeter()) { qApp->quit(); } diff --git a/src/helper/UserSession.cpp b/src/helper/UserSession.cpp index db850d4..e38f1f2 100644 --- a/src/helper/UserSession.cpp +++ b/src/helper/UserSession.cpp @@ -235,7 +235,7 @@ namespace DDM { } // take control of the tty - if (takeControl) { + if (takeControl && m_helperApp->isGreeter()) { if (ioctl(STDIN_FILENO, TIOCSCTTY, 0) < 0) { const auto error = strerror(errno); qCritical().nospace() << "Failed to take control of " << ttyString << " (" << QFileInfo(ttyString).owner() << "): " << error; @@ -243,7 +243,9 @@ namespace DDM { } } - VirtualTerminal::jumpToVt(vtNumber, m_helperApp->isGreeter()); + if (m_helperApp->isGreeter()) { + VirtualTerminal::jumpToVt(vtNumber, true); + } // skip Ctrl-C SIGINT struct termios oldt, newt;