]> git.ipfire.org Git - thirdparty/systemd.git/blame - src/login/logind-action.h
Merge pull request #29853 from YHNdnzj/sleep-automated
[thirdparty/systemd.git] / src / login / logind-action.h
CommitLineData
db9ecf05 1/* SPDX-License-Identifier: LGPL-2.1-or-later */
05d3a176 2#pragma once
23406ce5 3
a2106925
LP
4#include "conf-parser.h"
5
23406ce5
LP
6typedef enum HandleAction {
7 HANDLE_IGNORE,
cd4dd90b 8
23406ce5 9 HANDLE_POWEROFF,
cb88da82 10 _HANDLE_ACTION_SHUTDOWN_FIRST = HANDLE_POWEROFF,
23406ce5
LP
11 HANDLE_REBOOT,
12 HANDLE_HALT,
13 HANDLE_KEXEC,
9edf5af5 14 HANDLE_SOFT_REBOOT,
cb88da82 15 _HANDLE_ACTION_SHUTDOWN_LAST = HANDLE_SOFT_REBOOT,
cd4dd90b 16
23406ce5 17 HANDLE_SUSPEND,
cb88da82 18 _HANDLE_ACTION_SLEEP_FIRST = HANDLE_SUSPEND,
23406ce5
LP
19 HANDLE_HIBERNATE,
20 HANDLE_HYBRID_SLEEP,
e68c79db 21 HANDLE_SUSPEND_THEN_HIBERNATE,
cd4dd90b
MY
22 HANDLE_SLEEP, /* A "high-level" action that automatically choose an appropriate low-level sleep action */
23 _HANDLE_ACTION_SLEEP_LAST = HANDLE_SLEEP,
24
23406ce5 25 HANDLE_LOCK,
836fb00f 26 HANDLE_FACTORY_RESET,
cd4dd90b 27
23406ce5 28 _HANDLE_ACTION_MAX,
2d93c20e 29 _HANDLE_ACTION_INVALID = -EINVAL,
23406ce5
LP
30} HandleAction;
31
b0a3a5e5 32typedef struct HandleActionData HandleActionData;
5ed73478 33
cd4dd90b
MY
34typedef enum HandleActionSleepMask {
35 HANDLE_SLEEP_SUSPEND_MASK = 1U << HANDLE_SUSPEND,
36 HANDLE_SLEEP_HIBERNATE_MASK = 1U << HANDLE_HIBERNATE,
37 HANDLE_SLEEP_HYBRID_SLEEP_MASK = 1U << HANDLE_HYBRID_SLEEP,
38 HANDLE_SLEEP_SUSPEND_THEN_HIBERNATE_MASK = 1U << HANDLE_SUSPEND_THEN_HIBERNATE,
39} HandleActionSleepMask;
40
41#define HANDLE_ACTION_SLEEP_MASK_DEFAULT (HANDLE_SLEEP_SUSPEND_THEN_HIBERNATE_MASK|HANDLE_SLEEP_SUSPEND_MASK|HANDLE_SLEEP_HIBERNATE_MASK)
42
07630cea 43#include "logind-inhibit.h"
71d35b6b 44#include "logind.h"
54d7fcc6 45#include "sleep-config.h"
5ed73478 46
68008766
LP
47static inline bool handle_action_valid(HandleAction a) {
48 return a >= 0 && a < _HANDLE_ACTION_MAX;
49}
50
cb88da82
LP
51static inline bool HANDLE_ACTION_IS_SHUTDOWN(HandleAction a) {
52 return a >= _HANDLE_ACTION_SHUTDOWN_FIRST && a <= _HANDLE_ACTION_SHUTDOWN_LAST;
53}
54
55static inline bool HANDLE_ACTION_IS_SLEEP(HandleAction a) {
56 return a >= _HANDLE_ACTION_SLEEP_FIRST && a <= _HANDLE_ACTION_SLEEP_LAST;
57}
58
b0a3a5e5 59struct HandleActionData {
138224fc 60 HandleAction handle;
5ed73478
LN
61 const char *target;
62 InhibitWhat inhibit_what;
63 const char *polkit_action;
64 const char *polkit_action_multiple_sessions;
65 const char *polkit_action_ignore_inhibit;
66 SleepOperation sleep_operation;
67 const char* message_id;
68 const char* message;
153d1579 69 const char* log_verb;
5ed73478 70};
23406ce5 71
cd4dd90b
MY
72int handle_action_get_enabled_sleep_actions(HandleActionSleepMask mask, char ***ret);
73HandleAction handle_action_sleep_select(HandleActionSleepMask mask);
74
23406ce5
LP
75int manager_handle_action(
76 Manager *m,
77 InhibitWhat inhibit_key,
78 HandleAction handle,
79 bool ignore_inhibited,
80 bool is_edge);
81
3dbb9bc5
ZJS
82const char* handle_action_verb_to_string(HandleAction h) _const_;
83
44a6b1b6
ZJS
84const char* handle_action_to_string(HandleAction h) _const_;
85HandleAction handle_action_from_string(const char *s) _pure_;
23406ce5 86
48bccaa9 87const HandleActionData* handle_action_lookup(HandleAction handle);
a2106925
LP
88
89CONFIG_PARSER_PROTOTYPE(config_parse_handle_action);
cd4dd90b
MY
90
91CONFIG_PARSER_PROTOTYPE(config_parse_handle_action_sleep);