136 lines
4.4 KiB
Diff
136 lines
4.4 KiB
Diff
|
|
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
|
|||
|
|
|