kiran-session-guard/0009-fix-autologin-timeout-Fix-issues-caused-by-automatic.patch
2024-01-18 11:54:28 +08:00

136 lines
4.4 KiB
Diff
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

From 833ef45aa88677c2b91643d9893479b3b9dcb07c Mon Sep 17 00:00:00 2001
From: liuxinhao <liuxinhao@kylinsec.com.cn>
Date: Tue, 9 Jan 2024 11:13:53 +0800
Subject: [PATCH 09/10] fix(autologin-timeout): Fix issues caused by automatic
login timeout
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
- 修复自动登录超时时间导致的问题
Closes #25015
---
src/lightdm-greeter/frame.cpp | 70 +++++++++++++++++++++++++++++++++--
src/lightdm-greeter/frame.h | 1 +
2 files changed, 68 insertions(+), 3 deletions(-)
diff --git a/src/lightdm-greeter/frame.cpp b/src/lightdm-greeter/frame.cpp
index beb5ae5..3d8dada 100644
--- a/src/lightdm-greeter/frame.cpp
+++ b/src/lightdm-greeter/frame.cpp
@@ -155,7 +155,7 @@ void Frame::initMenus()
// clang-format off
connect(itemWidget, &GreeterMenuItem::sigChecked, [this](QString action){
m_specifiedSession = action;
- m_sessionMenu->hide();
+ m_sessionMenu->hide();
});
// clang-format on
}
@@ -316,6 +316,7 @@ void Frame::initAuth()
{
AuthLightdm* auth = new AuthLightdm(m_greeter);
LoginFrame::initAuth(auth);
+ connect(m_greeter.data(),&QLightDM::Greeter::autologinTimerExpired,this,&Frame::onAutoLoginTimeout);
}
void Frame::initConnection()
@@ -325,8 +326,8 @@ void Frame::initConnection()
connect(m_userList, &UserList::userCountChanged, this, &Frame::onUserListUserCountChanged);
connect(m_userList, &UserList::userRemoved,this,&Frame::onUserListUserRemoved);
connect(m_btnLoginOther, &QToolButton::clicked, this, &Frame::onLoginOtherClicked);
- connect(m_btnAutoLogin, &LoginButton::sigClicked, [this](){
- startAuthUser(m_userName);
+ connect(m_btnAutoLogin, &LoginButton::sigClicked, [this](){
+ startAuthUser(m_userName);
});
// clang-format on
}
@@ -497,6 +498,69 @@ void Frame::onLoginOtherClicked()
break;
}
}
+
+static bool getIsLoggedIn(const QString& userName)
+{
+ bool res = false;
+
+ QDBusInterface dmInterface("org.freedesktop.DisplayManager",
+ "/org/freedesktop/DisplayManager",
+ "org.freedesktop.DisplayManager",
+ QDBusConnection::systemBus());
+ QVariant sessionsVar = dmInterface.property("Sessions");
+ if (!sessionsVar.isValid())
+ {
+ KLOG_ERROR("can't get display manager property 'sessions'");
+ return res;
+ }
+
+ QList<QDBusObjectPath> sessions = sessionsVar.value<QList<QDBusObjectPath>>();
+ KLOG_DEBUG() << "sessions:" << sessions.count();
+ for (const auto& session : sessions)
+ {
+ KLOG_DEBUG() << "\t-" << session.path();
+ }
+ foreach (const auto& session, sessions)
+ {
+ QDBusInterface sessionInterface("org.freedesktop.DisplayManager",
+ session.path(),
+ "org.freedesktop.DisplayManager.Session",
+ QDBusConnection::systemBus());
+ QVariant userNameVar = sessionInterface.property("UserName");
+ if (!userNameVar.isValid())
+ {
+ KLOG_ERROR("can't get display manager session property 'UserName'");
+ continue;
+ }
+
+ QString sessionUser = userNameVar.toString();
+ if (sessionUser.compare(userName) == 0)
+ {
+ res = true;
+ break;
+ }
+ }
+
+ return res;
+}
+
+void Frame::onAutoLoginTimeout()
+{
+ if (m_greeter->autologinUserHint().isEmpty())
+ {
+ return;
+ }
+
+ // NOTE:修复#52982问题若自动登录用户已存在不自动触发延时自动登录
+ bool isLogged = getIsLoggedIn(m_greeter->autologinUserHint());
+ if (isLogged)
+ {
+ return;
+ }
+
+ startAuthUser(m_greeter->autologinUserHint());
+}
+
} // namespace Greeter
} // namespace SessionGuard
} // namespace Kiran
\ No newline at end of file
diff --git a/src/lightdm-greeter/frame.h b/src/lightdm-greeter/frame.h
index 73a3532..88e51ef 100644
--- a/src/lightdm-greeter/frame.h
+++ b/src/lightdm-greeter/frame.h
@@ -72,6 +72,7 @@ private slots:
void onUserListUserCountChanged(int oldCount, int newCount);
void onUserListUserRemoved(const QString& name);
void onLoginOtherClicked();
+ void onAutoLoginTimeout();
private:
Prefs* m_prefs;
--
2.27.0