Skip to content

Commit 49a42fd

Browse files
committed
chore: add dde quick login
as title Log: as title Pms:TASK-377223
1 parent 4092b98 commit 49a42fd

12 files changed

Lines changed: 249 additions & 0 deletions

File tree

dbus/adaptor/org.deepin.dde.SessionManager1.xml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,9 @@
5555
</method>
5656
<method name="Shutdown"></method>
5757
<method name="ToggleDebug"></method>
58+
<signal name="LockedChanged">
59+
<arg type="b" name="locked"></arg>
60+
</signal>
5861
<signal name="Unlock"></signal>
5962
<signal name="InhibitorAdded">
6063
<arg name="path" type="o"></arg>

src/dde-session/impl/sessionmanager.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -872,6 +872,8 @@ void SessionManager::emitLockChanged(bool locked)
872872
arguments.push_back(QStringList());
873873
msg.setArguments(arguments);
874874
QDBusConnection::sessionBus().send(msg);
875+
876+
Q_EMIT LockedChanged(locked);
875877
}
876878

877879
void SessionManager::emitStageChanged(int state)

src/dde-session/impl/sessionmanager.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -123,6 +123,7 @@ private Q_SLOTS:
123123

124124
signals:
125125
// signals on dbus
126+
void LockedChanged(bool locked);
126127
void Unlock();
127128
void InhibitorAdded(const QDBusObjectPath &);
128129
void InhibitorRemoved(const QDBusObjectPath &);

src/dde-session/main.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,8 @@ int main(int argc, char *argv[])
8181
parser.addOption(systemd);
8282
parser.process(app);
8383

84+
DLogManager::registerJournalAppender();
85+
8486
if (!parser.isSet(systemd)) {
8587
DLogManager::registerConsoleAppender();
8688
DLogManager::registerFileAppender();

systemd/CMakeLists.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ install(FILES ${SERVICES} DESTINATION lib/systemd/user/)
2323
install(DIRECTORY DESTINATION lib/systemd/user/dde-session-pre.target.wants/)
2424
set(DDE_SESSION_PRE_WANTS
2525
dde-session-pre.target.wants/dde-session@x11.service
26+
dde-session-pre.target.wants/dde-quick-login@x11.service
2627
)
2728

2829
# dde-session-initialized.target.wants - TODO: 暂时先放这里,后续应该转移到对应服务
@@ -37,6 +38,7 @@ set(DDE_SESSION_INITIALIZED_WANTS
3738
install(FILES ${DDE_SESSION_PRE_WANTS} DESTINATION lib/systemd/user/)
3839
install(FILES ${DDE_SESSION_INITIALIZED_WANTS} DESTINATION lib/systemd/user/)
3940
install_symlink(dde-session@x11.service dde-session-pre.target.wants)
41+
install_symlink(dde-quick-login@x11.service dde-session-pre.target.wants)
4042
install_symlink(dde-shell-plugin@org.deepin.ds.desktop.service dde-session-initialized.target.wants)
4143
install_symlink(dde-shell@DDE.service dde-session-initialized.target.wants)
4244
install_symlink(dde-lock.service dde-session-initialized.target.wants)

systemd/dde-session-manager.service.in

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,4 +20,5 @@ ExecStart=@CMAKE_INSTALL_FULL_BINDIR@/dde-session --systemd-service
2020
ExecStopPost=@CMAKE_INSTALL_FULL_LIBEXECDIR@/dde-session-ctl --shutdown
2121
ExecStopPost=-/bin/sh -c 'test "$SERVICE_RESULT" != "exec-condition" && systemctl --user unset-environment XDG_CURRENT_DESKTOP'
2222
ExecStopPost=-/bin/sh -c 'test "$SERVICE_RESULT" != "exec-condition" && systemctl --user unset-environment DISPLAY'
23+
ExecStopPost=-/bin/sh -c 'test "$SERVICE_RESULT" != "exec-condition" && systemctl --user unset-environment DDE_QUICKLOGIN'
2324
Slice=session.slice
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
[Unit]
2+
Description=DDE Quick Login Monitor
3+
CollectMode=inactive-or-failed
4+
5+
Requires=dde-session@x11.service
6+
After=dde-session@x11.service
7+
8+
Requisite=dde-session-pre.target
9+
PartOf=dde-session-pre.target
10+
Before=dde-session-pre.target
11+
12+
Wants=org.dde.session.Daemon1.service
13+
After=org.dde.session.Daemon1.service
14+
15+
[Service]
16+
Slice=session.slice
17+
Type=notify
18+
# only in quick login mode and x11
19+
ExecCondition=/bin/sh -c '[ "$DDE_QUICKLOGIN" = "true" ] || exit 2'
20+
ExecCondition=/bin/sh -c '[ "$XDG_SESSION_TYPE" = "%I" ] || exit 3'
21+
ExecStart=/usr/bin/dde-quick-login
22+
Restart=on-failure
23+
RestartSec=300ms
24+
StartLimitBurst=3

tools/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,3 +2,4 @@ add_subdirectory("dde-login-reminder")
22
add_subdirectory("dde-keyring-checker")
33
add_subdirectory("dde-version-checker")
44
add_subdirectory("dde-xsettings-checker")
5+
add_subdirectory("dde-quick-login")
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
# SPDX-FileCopyrightText: 2021 - 2025 UnionTech Software Technology Co., Ltd.
2+
#
3+
# SPDX-License-Identifier: GPL-3.0-or-later
4+
5+
set(BIN_NAME dde-quick-login)
6+
7+
set(CMAKE_CXX_STANDARD 17)
8+
9+
find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Core DBus)
10+
find_package(Dtk${DTK_VERSION_MAJOR} REQUIRED COMPONENTS Core)
11+
find_package(PkgConfig REQUIRED)
12+
pkg_check_modules(Systemd REQUIRED IMPORTED_TARGET libsystemd)
13+
14+
set(CMAKE_INCLUDE_CURRENT_DIR ON)
15+
set(CMAKE_AUTOMOC ON)
16+
set(CMAKE_AUTORCC ON)
17+
set(CMAKE_AUTOUIC ON)
18+
19+
set(SOURCES
20+
main.cpp
21+
lockprocessmanager.cpp
22+
)
23+
24+
set(HEADERS
25+
lockprocessmanager.h
26+
)
27+
28+
add_executable(${BIN_NAME} ${SOURCES} ${HEADERS})
29+
30+
target_link_libraries(${BIN_NAME}
31+
Qt${QT_VERSION_MAJOR}::Core
32+
Qt${QT_VERSION_MAJOR}::DBus
33+
Dtk${DTK_VERSION_MAJOR}::Core
34+
PkgConfig::Systemd
35+
)
36+
37+
install(TARGETS ${BIN_NAME}
38+
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
39+
)
Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
// SPDX-FileCopyrightText: 2021 - 2023 UnionTech Software Technology Co., Ltd.
2+
//
3+
// SPDX-License-Identifier: GPL-3.0-or-later
4+
5+
#include "lockprocessmanager.h"
6+
7+
#include <QDebug>
8+
#include <QTimer>
9+
#include <QProcess>
10+
#include <QDBusInterface>
11+
#include <QDBusServiceWatcher>
12+
13+
LockProcessManager::LockProcessManager(int timeout, QObject *parent)
14+
: QObject(parent)
15+
, m_timeout(timeout)
16+
, m_timeoutTimer(new QTimer(this))
17+
{
18+
m_timeoutTimer->setSingleShot(true);
19+
connect(m_timeoutTimer, &QTimer::timeout,
20+
this, &LockProcessManager::onTimeout);
21+
22+
QDBusConnection::sessionBus().connect(
23+
"org.deepin.dde.SessionManager1",
24+
"/org/deepin/dde/SessionManager1",
25+
"org.deepin.dde.SessionManager1",
26+
"LockedChanged",
27+
this,
28+
SLOT(onLockStatusChanged(bool)));
29+
}
30+
31+
LockProcessManager::~LockProcessManager()
32+
{
33+
34+
}
35+
36+
void LockProcessManager::start()
37+
{
38+
m_timeoutTimer->start(m_timeout * 1000);
39+
QProcess::startDetached("/usr/bin/dde-lock", QStringList() << "-lq");
40+
41+
auto *watcher = new QDBusServiceWatcher("org.deepin.dde.LockFront1",
42+
QDBusConnection::sessionBus(),
43+
QDBusServiceWatcher::WatchForUnregistration, this);
44+
watcher->connect(watcher, &QDBusServiceWatcher::serviceUnregistered, [&] {
45+
qWarning() << "lock front service exit, need logout";
46+
triggerLogout();
47+
});
48+
}
49+
50+
void LockProcessManager::onTimeout()
51+
{
52+
qWarning() << "lock session timeout, need logout";
53+
triggerLogout();
54+
}
55+
56+
void LockProcessManager::onLockStatusChanged(bool locked)
57+
{
58+
qInfo() << "session lock status changed:" << locked;
59+
if (locked) {
60+
m_wasLocked = true;
61+
m_timeoutTimer->stop();
62+
Q_EMIT sessionLocked(true);
63+
} else {
64+
if (m_wasLocked) {
65+
m_wasLocked = false;
66+
Q_EMIT sessionLocked(false);
67+
}
68+
}
69+
}
70+
71+
void LockProcessManager::triggerLogout()
72+
{
73+
qInfo() << "trigger logout";
74+
QDBusInterface sessionManager("org.deepin.dde.SessionManager1",
75+
"/org/deepin/dde/SessionManager1",
76+
"org.deepin.dde.SessionManager1",
77+
QDBusConnection::sessionBus());
78+
sessionManager.call("RequestLogout");
79+
}

0 commit comments

Comments
 (0)