DtkSystemSettings  1.0.3
dtk library for systemsettings.
dloginmanager.h
浏览该文件的文档.
1// SPDX-FileCopyrightText: 2022 UnionTech Software Technology Co., Ltd.
2//
3// SPDX-License-Identifier: LGPL-3.0-or-later
4
5#pragma once
6
7#include <qobject.h>
8#include <qscopedpointer.h>
9#include <qsharedpointer.h>
10#include <dexpected.h>
11
12#include "dlogintypes.h"
13
14DLOGIN_BEGIN_NAMESPACE
15class DLoginSeat;
16class DLoginUser;
17class DLoginSession;
18DLOGIN_END_NAMESPACE
19
20using LoginExecStatus = DTK_LOGIN_NAMESPACE::ExecuteStatus;
21using LoginSeatPtr = QSharedPointer<DTK_LOGIN_NAMESPACE::DLoginSeat>;
22using LoginSessionPtr = QSharedPointer<DTK_LOGIN_NAMESPACE::DLoginSession>;
23using LoginUserPtr = QSharedPointer<DTK_LOGIN_NAMESPACE::DLoginUser>;
24using LoginInhibitorList = QList<DTK_LOGIN_NAMESPACE::Inhibitor>;
25using LoginShutdownType = DTK_LOGIN_NAMESPACE::ShutdownType;
26using LoginInhibitMode = DTK_LOGIN_NAMESPACE::InhibitMode;
27using LoginSessionRole = DTK_LOGIN_NAMESPACE::SessionRole;
28
29DLOGIN_BEGIN_NAMESPACE
30using DCORE_NAMESPACE::DExpected;
31
32class DLoginManagerPrivate;
33
34class DLoginManager : public QObject
35{
36 Q_OBJECT
37public:
38 explicit DLoginManager(QObject *parent = nullptr);
39 ~DLoginManager() override;
40
41 Q_PROPERTY(QStringList killExcludeUsers READ killExcludeUsers);
42 Q_PROPERTY(QStringList killOnlyUsers READ killOnlyUsers);
43 Q_PROPERTY(bool docked READ docked);
44 Q_PROPERTY(bool idleHint READ idleHint);
45 Q_PROPERTY(bool killUserProcesses READ killUserProcesses);
46 Q_PROPERTY(bool lidClosed READ lidClosed);
47 Q_PROPERTY(bool preparingForShutdown READ preparingForShutdown);
48 Q_PROPERTY(bool preparingForSleep READ preparingForSleep);
49 Q_PROPERTY(bool removeIPC READ removeIPC);
50 Q_PROPERTY(QString blockInhibited READ blockInhibited);
51 Q_PROPERTY(QString delayInhibited READ delayInhibited);
52 Q_PROPERTY(PowerAction handleHibernateKey READ handleHibernateKey);
53 Q_PROPERTY(PowerAction handleLidSwitch READ handleLidSwitch);
54 Q_PROPERTY(PowerAction handleLidSwitchDocked READ handleLidSwitchDocked);
55 Q_PROPERTY(PowerAction handleLidSwitchExternalPower READ handleLidSwitchExternalPower);
56 Q_PROPERTY(PowerAction handlePowerKey READ handlePowerKey);
57 Q_PROPERTY(PowerAction handleSuspendKey READ handleSuspendKey);
58 Q_PROPERTY(PowerAction idleAction READ idleAction);
59 Q_PROPERTY(ScheduledShutdownValue scheduledShutdown READ scheduledShutdown);
60 Q_PROPERTY(quint32 nAutoVTs READ nAutoVTs);
61 Q_PROPERTY(quint64 holdoffTimeoutUSec READ holdoffTimeoutUSec);
62 Q_PROPERTY(quint64 idleActionUSec READ idleActionUSec);
63 Q_PROPERTY(QDateTime idleSinceHint READ idleSinceHint);
64 Q_PROPERTY(quint64 idleSinceHintMonotonic READ idleSinceHintMonotonic);
65 Q_PROPERTY(quint64 inhibitDelayMaxUSec READ inhibitDelayMaxUSec);
66 Q_PROPERTY(quint64 inhibitorsMax READ inhibitorsMax);
67 Q_PROPERTY(quint64 nCurrentInhibitors READ nCurrentInhibitors);
68 Q_PROPERTY(quint64 nCurrentSessions READ nCurrentSessions);
69 Q_PROPERTY(quint64 runtimeDirectoryInodesMax READ runtimeDirectoryInodesMax);
70 Q_PROPERTY(quint64 runtimeDirectorySize READ runtimeDirectorySize);
71 Q_PROPERTY(quint64 sessionsMax READ sessionsMax);
72 Q_PROPERTY(quint64 userStopDelayUSec READ userStopDelayUSec);
73
74 QStringList killExcludeUsers() const;
75 QStringList killOnlyUsers() const;
76 bool docked() const;
77 bool idleHint() const;
78 bool killUserProcesses() const;
79 bool lidClosed() const;
81 bool preparingForSleep() const;
82 bool removeIPC() const;
83 QString blockInhibited() const;
84 QString delayInhibited() const;
93 quint32 nAutoVTs() const;
94 quint64 holdoffTimeoutUSec() const;
95 quint64 idleActionUSec() const;
96 QDateTime idleSinceHint() const;
97 quint64 idleSinceHintMonotonic() const;
98 quint64 inhibitDelayMaxUSec() const;
99 quint64 inhibitorsMax() const;
100 quint64 nCurrentInhibitors() const;
101 quint64 nCurrentSessions() const;
103 quint64 runtimeDirectorySize() const;
104 quint64 sessionsMax() const;
105 quint64 userStopDelayUSec() const;
106
107Q_SIGNALS:
108 void prepareForShutdown(bool value);
109 void prepareForSleep(bool value);
110 void seatNew(const QString &seatId);
111 void seatRemoved(const QString &seatId);
112 void sessionNew(const QString &sessionId);
113 void sessionRemoved(const QString &sessionId);
114 void userNew(quint32 UID);
115 void userRemoved(quint32 UID);
116
117public Q_SLOTS:
118 DExpected<void> activateSession(const QString &sessionId);
119 DExpected<void> activateSessionOnSeat(const QString &sessionId, const QString &seatId);
120 DExpected<LoginExecStatus> canHalt();
121 DExpected<LoginExecStatus> canHibernate();
122 DExpected<LoginExecStatus> canHybridSleep();
123 DExpected<LoginExecStatus> canPowerOff();
124 DExpected<LoginExecStatus> canReboot();
125 DExpected<LoginExecStatus> canSuspend();
126 DExpected<LoginExecStatus> canSuspendThenHibernate();
127 DExpected<bool> cancelScheduledShutdown();
128 DExpected<LoginSeatPtr> findSeatById(const QString &seatId);
129 DExpected<LoginSessionPtr> findSessionById(const QString &sessionId);
130 DExpected<LoginSessionPtr> findSessionByPID(quint32 PID);
131 DExpected<LoginUserPtr> findUserById(quint32 UID);
132 DExpected<LoginUserPtr> findUserByPID(quint32 PID);
133 DExpected<void> halt(bool interactive = false);
134 DExpected<void> hibernate(bool interactive = false);
135 DExpected<void> hybridSleep(bool interactive = false);
136 DExpected<int> inhibit(int what, const QString &who, const QString &why, LoginInhibitMode mode);
137 DExpected<void> killSession(const QString &sessionId, LoginSessionRole who, qint32 signalNumber);
138 DExpected<void> killUser(quint32 UID, qint32 signalNumber);
139 DExpected<LoginInhibitorList> listInhibitors();
140 DExpected<QStringList> listSeats();
141 DExpected<QStringList> listSessions();
142 DExpected<QList<quint32>> listUsers();
143 DExpected<void> lockSession(const QString &sessionId);
144 DExpected<void> powerOff(bool interactive = false);
145 DExpected<void> reboot(bool interactive = false);
146 DExpected<void> scheduleShutdown(LoginShutdownType type, const QDateTime &usec);
147 DExpected<void> setUserLinger(quint32 UID, bool enable, bool interactive);
148 DExpected<void> suspend(bool interactive = false);
149 DExpected<void> suspendThenHibernate(bool interactive = false);
150 DExpected<void> terminateSession(const QString &sessionId);
151 DExpected<void> terminateUser(quint32 uid);
152 DExpected<void> logout();
153 DExpected<LoginSeatPtr> currentSeat();
154 DExpected<LoginSessionPtr> currentSession();
155 DExpected<LoginUserPtr> currentUser();
156
157private:
158 QScopedPointer<DLoginManagerPrivate> d_ptr;
159 Q_DECLARE_PRIVATE(DLoginManager)
160};
161DLOGIN_END_NAMESPACE
登陆管理类
Definition: dloginmanager.h:35
DExpected< QStringList > listSessions()
列出所有的Session
DExpected< void > suspendThenHibernate(bool interactive=false)
计算机系统被暂停, 随后使用RTC定时器唤醒并休眠
quint64 holdoffTimeoutUSec() const
读取系统启动或恢复后, systemd暂不对lid事件做出反应的时间段
QStringList killOnlyUsers() const
读取killOnlyUsers属性 检查KillOnlyUsers的取值。如果指定了这个设置, 只有这些用户的会话作用域中的进程将被杀死。否则, 用户将受到KillUserProcesses=yes设置...
ScheduledShutdownValue scheduledShutdown() const
读取scheduledShutdown的值, 返回两个参数, 第一个电源管理状态名, 第二个是unix时间戳(精确到微秒), 可以使用scheduleShutdown方法进行写入。 具体含义见同名方法
bool docked() const
如果机器被连接到一个底座或者拓展坞(包含usbhub)上, Docked取值为true
quint64 sessionsMax() const
读取要管理的并发用户会话的最大数量
quint64 idleSinceHintMonotonic() const
空闲提示布尔值的最后一次更改的时间戳
DExpected< LoginExecStatus > canHybridSleep()
获取当前用户下计算机是否支持混合睡眠
void sessionRemoved(const QString &sessionId)
void prepareForSleep(bool value)
bool lidClosed() const
当(笔记本电脑)的盖子关闭时, LidClosed为true。
quint64 inhibitorsMax() const
读取允许的最大并发抑制器数量, 默认8192
bool killUserProcesses() const
查看killUserProcesses当前配置, 当用户注销时是否应该杀死该用户的进程。 如果返回为true, 则该会话对应的作用域单元和该作用域内的所有进程将被终止。如果返回为 "false",...
DExpected< LoginExecStatus > canHalt()
获取当前用户下计算机是否支持停止
DExpected< int > inhibit(int what, const QString &who, const QString &why, LoginInhibitMode mode)
创建一个抑制锁, 抑制锁:一个程序可以阻止或延迟系统休眠或关机
DExpected< void > setUserLinger(quint32 UID, bool enable, bool interactive)
启用或禁用用户滞留。如果启用, 将保留用户的运行时目录, 并且他们可以在注销时继续运行进程。如果禁用, 运行时目录会在他们注销后立即消失
PowerAction handleLidSwitchDocked() const
读取笔记本连上底座或者拓展坞后合上盖子的行为 (默认是忽略)
quint64 runtimeDirectoryInodesMax() const
设置每个登录用户的$XDG_RUNTIME_DIR运行时目录的大小限制。
DExpected< void > lockSession(const QString &sessionId)
要求具有指定 ID 的会话激活屏幕锁定
DExpected< void > activateSessionOnSeat(const QString &sessionId, const QString &seatId)
将指定ID, 指定seat的会话带到前台
quint64 nCurrentSessions() const
读取当前注册的会话数量
DExpected< LoginUserPtr > currentUser()
当前的user
DExpected< LoginSeatPtr > findSeatById(const QString &seatId)
获取seat对象
quint64 runtimeDirectorySize() const
读取每个登录用户的$XDG_RUNTIME_DIR运行时目录的大小限制。
DExpected< void > hybridSleep(bool interactive=false)
计算机执行混合睡眠, 混合睡眠模式, 即系统既休眠又挂起
DExpected< void > activateSession(const QString &sessionId)
将具有指定 ID 的会话带到前台
void prepareForShutdown(bool value)
PrepareForShutdown()和PrepareForSleep()信号在系统关闭之前(使用参数“ true” )或之后(使用参数“ false”)发送, 分别用于重新启动/关机和挂起/休眠。应...
DExpected< LoginUserPtr > findUserById(quint32 UID)
通过uid获取User对象
DExpected< void > terminateSession(const QString &sessionId)
可用于强制终止一个特定会话
void userRemoved(quint32 UID)
PowerAction handleLidSwitchExternalPower() const
读取笔记本连上底座或者拓展坞且链接电源后合上盖子的行为 (默认为空(完全忽略))
quint64 idleActionUSec() const
配置系统空闲时采取的行动的动作延迟
PowerAction handlePowerKey() const
读取电源按键的定义 (默认是关机)
bool idleHint() const
反映系统的空闲提示状态。如果系统空闲则为True
QString delayInhibited() const
读取各个模式的当前活动锁
DExpected< LoginExecStatus > canReboot()
获取当前用户下计算机是否支持重启
PowerAction idleAction() const
读取系统空闲时采取的行动 (默认是忽略)
PowerAction handleLidSwitch() const
读取笔记本合上盖子的行为 (默认是暂停)
void seatRemoved(const QString &seatId)
quint64 nCurrentInhibitors() const
读取当前注册抑制器数量
DExpected< LoginExecStatus > canSuspendThenHibernate()
获取当前用户下计算机是否支持挂起然后休眠
bool preparingForSleep() const
在两个PrepareForShutdown和PrepareForSleep信号的间隔期间分别为真
QDateTime idleSinceHint() const
空闲提示布尔值的最后一次更改的时间
DExpected< LoginExecStatus > canSuspend()
获取当前用户下计算机是否支持挂起
DExpected< LoginExecStatus > canHibernate()
获取当前用户下计算机是否支持休眠
DExpected< LoginExecStatus > canPowerOff()
获取当前用户下计算机是否支持关机
quint32 nAutoVTs() const
读取默认配置分配多少个虚拟终端(VT), 默认为6
DExpected< bool > cancelScheduledShutdown()
取消一个预定的关机
DExpected< QStringList > listSeats()
列出所有的seat
DExpected< void > reboot(bool interactive=false)
重启
DExpected< LoginInhibitorList > listInhibitors()
列出所有当前有效的抑制器。
void seatNew(const QString &seatId)
每次创建或删除会话、用户登录或注销或添加或删除seat时都会发送UserRemoved、SeatNew、SessionNew、 SeatRemoved、SessionRemoved、UserNew信号 ...
QStringList killExcludeUsers() const
读取 KillExcludeUsers 属性。 该属性将获取采用空格分割的用户列表, 在设置了 KillUserProcesses=yes 将会排除该用户会话范围内的进程。如果未设置 KillExclu...
void userNew(quint32 UID)
DExpected< LoginSeatPtr > currentSeat()
当前的seat
DExpected< void > killUser(quint32 UID, qint32 signalNumber)
可用于向用户的所有进程发送 Unix 信号。作为参数, 它需要用户 ID 和信号编号
quint64 userStopDelayUSec() const
读取在用户完全注销后为其保留用户记录和每个用户服务user.service的时间
DExpected< void > suspend(bool interactive=false)
计算机执行挂起操作(系统状态保存到 RAM 并关闭 CPU)
DExpected< void > logout()
登出
DExpected< LoginSessionPtr > findSessionByPID(quint32 PID)
通过进程号pid获取session对象
quint64 inhibitDelayMaxUSec() const
读取由于"delay"类型的抑制器锁处于活动状态而延迟系统关闭或睡眠请求的最大时间,默认为5s 5000000us
QString blockInhibited() const
读取各个模式的当前活动锁:
DLoginManager(QObject *parent=nullptr)
构造获取login manager
DExpected< void > hibernate(bool interactive=false)
计算机执行休眠操作, 休眠(将内存中数据保存到磁盘并将机器关闭)
bool removeIPC() const
返回一个属性设置, 当用户完全注销时, 属于用户的System V和POSIX IPC对象是否应被删除。 返回一个布尔参数。如果为true, 在用户的最后一个会话结束后,...
DExpected< void > halt(bool interactive=false)
计算机暂停操作, 暂停(不关闭电源关闭)
DExpected< QList< quint32 > > listUsers()
列出所有的User
DExpected< void > scheduleShutdown(LoginShutdownType type, const QDateTime &usec)
在一定时间后定时关机
PowerAction handleHibernateKey() const
读取休眠按键的定义(默认是休眠)
bool preparingForShutdown() const
在两个PrepareForShutdown和PrepareForSleep信号的间隔期间分别为真
DExpected< LoginUserPtr > findUserByPID(quint32 PID)
通过进程id获取User信息
DExpected< LoginSessionPtr > findSessionById(const QString &sessionId)
获取session对象
DExpected< void > powerOff(bool interactive=false)
关机
void sessionNew(const QString &sessionId)
DExpected< void > terminateUser(quint32 uid)
可用于强制终止用户的所有进程
PowerAction handleSuspendKey() const
读取暂停按键的定义 (默认是暂停)
DExpected< LoginSessionPtr > currentSession()
当前的session
DExpected< void > killSession(const QString &sessionId, LoginSessionRole who, qint32 signalNumber)
可用于向会话的一个或所有进程发送 Unix 信号, 作为参数, 它接受会话 id、字符串“ leader”或“ all”和一个信号编号。 如果“ leader”通过,...
PowerAction
定义关机键的动作
Definition: dlogintypes.h:31
定义定时关机所用数据结构
Definition: dlogintypes.h:16