]> git.ipfire.org Git - thirdparty/systemd.git/blame - src/login/logind-session.h
build-sys: use #if Y instead of #ifdef Y everywhere
[thirdparty/systemd.git] / src / login / logind-session.h
CommitLineData
c2f1db8f 1#pragma once
90821c93
LP
2
3/***
4 This file is part of systemd.
5
6 Copyright 2011 Lennart Poettering
7
8 systemd is free software; you can redistribute it and/or modify it
5430f7f2
LP
9 under the terms of the GNU Lesser General Public License as published by
10 the Free Software Foundation; either version 2.1 of the License, or
90821c93
LP
11 (at your option) any later version.
12
13 systemd is distributed in the hope that it will be useful, but
14 WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
5430f7f2 16 Lesser General Public License for more details.
90821c93 17
5430f7f2 18 You should have received a copy of the GNU Lesser General Public License
90821c93
LP
19 along with systemd; If not, see <http://www.gnu.org/licenses/>.
20***/
21
22typedef struct Session Session;
9444b1f2 23typedef enum KillWho KillWho;
90821c93
LP
24
25#include "list.h"
a095315b 26#include "login-util.h"
71d35b6b 27#include "logind-user.h"
90821c93 28
0604381b 29typedef enum SessionState {
fb6becb4 30 SESSION_OPENING, /* Session scope is being created */
0604381b
LP
31 SESSION_ONLINE, /* Logged in */
32 SESSION_ACTIVE, /* Logged in and in the fg */
fb6becb4 33 SESSION_CLOSING, /* Logged out, but scope is still there */
0604381b
LP
34 _SESSION_STATE_MAX,
35 _SESSION_STATE_INVALID = -1
36} SessionState;
37
55efac6c
LP
38typedef enum SessionClass {
39 SESSION_USER,
40 SESSION_GREETER,
41 SESSION_LOCK_SCREEN,
e2acb67b 42 SESSION_BACKGROUND,
55efac6c
LP
43 _SESSION_CLASS_MAX,
44 _SESSION_CLASS_INVALID = -1
45} SessionClass;
46
e2acb67b
LP
47typedef enum SessionType {
48 SESSION_UNSPECIFIED,
49 SESSION_TTY,
50 SESSION_X11,
d9eb81f9 51 SESSION_WAYLAND,
9541666b 52 SESSION_MIR,
e9e74f28 53 SESSION_WEB,
e2acb67b
LP
54 _SESSION_TYPE_MAX,
55 _SESSION_TYPE_INVALID = -1
56} SessionType;
57
952d3260
LP
58#define SESSION_TYPE_IS_GRAPHICAL(type) IN_SET(type, SESSION_X11, SESSION_WAYLAND, SESSION_MIR)
59
9444b1f2 60enum KillWho {
de07ab16
LP
61 KILL_LEADER,
62 KILL_ALL,
63 _KILL_WHO_MAX,
64 _KILL_WHO_INVALID = -1
9444b1f2 65};
de07ab16 66
90821c93
LP
67struct Session {
68 Manager *manager;
69
f7a5bb28 70 const char *id;
e6494a07 71 unsigned int position;
90821c93 72 SessionType type;
55efac6c 73 SessionClass class;
90821c93
LP
74
75 char *state_file;
76
77 User *user;
78
79 dual_timestamp timestamp;
80
81 char *tty;
82 char *display;
83
84 bool remote;
3f49d45a 85 char *remote_user;
90821c93 86 char *remote_host;
98a28fef 87 char *service;
a4cd87e9 88 char *desktop;
fb6becb4
LP
89
90 char *scope;
91 char *scope_job;
98a28fef 92
90821c93 93 Seat *seat;
92bd5ff3 94 unsigned int vtnr;
90a18413 95 int vtfd;
90821c93
LP
96
97 pid_t leader;
3f49d45a 98 uint32_t audit_id;
90821c93 99
932e3ee7
LP
100 int fifo_fd;
101 char *fifo_path;
90821c93 102
cc377381
LP
103 sd_event_source *fifo_event_source;
104
a185c5aa
LP
105 bool idle_hint;
106 dual_timestamp idle_hint_timestamp;
107
42d35e13
VT
108 bool locked_hint;
109
14c3baca 110 bool in_gc_queue:1;
9418f147 111 bool started:1;
5f41d1f1 112 bool stopping:1;
90821c93 113
aed24c4c
FB
114 bool was_active:1;
115
cc377381 116 sd_bus_message *create_message;
fb6becb4 117
5f41d1f1
LP
118 sd_event_source *timer_event_source;
119
ae5e06bd 120 char *controller;
118ecf32 121 Hashmap *devices;
3cde9e8f 122 sd_bus_track *track;
ae5e06bd 123
90821c93
LP
124 LIST_FIELDS(Session, sessions_by_user);
125 LIST_FIELDS(Session, sessions_by_seat);
14c3baca
LP
126
127 LIST_FIELDS(Session, gc_queue);
90821c93
LP
128};
129
9444b1f2 130Session *session_new(Manager *m, const char *id);
90821c93 131void session_free(Session *s);
9444b1f2 132void session_set_user(Session *s, User *u);
cc377381 133bool session_check_gc(Session *s, bool drop_not_started);
14c3baca 134void session_add_to_gc_queue(Session *s);
90821c93
LP
135int session_activate(Session *s);
136bool session_is_active(Session *s);
a185c5aa 137int session_get_idle_hint(Session *s, dual_timestamp *t);
bef422ae 138void session_set_idle_hint(Session *s, bool b);
42d35e13
VT
139int session_get_locked_hint(Session *s);
140void session_set_locked_hint(Session *s, bool b);
932e3ee7 141int session_create_fifo(Session *s);
90821c93 142int session_start(Session *s);
9bb69af4 143int session_stop(Session *s, bool force);
405e0255 144int session_finalize(Session *s);
ad8780c9 145int session_release(Session *s);
90821c93
LP
146int session_save(Session *s);
147int session_load(Session *s);
de07ab16 148int session_kill(Session *s, KillWho who, int signo);
90821c93 149
0604381b
LP
150SessionState session_get_state(Session *u);
151
cc377381 152extern const sd_bus_vtable session_vtable[];
f00c3121
LP
153int session_node_enumerator(sd_bus *bus, const char *path,void *userdata, char ***nodes, sd_bus_error *error);
154int session_object_find(sd_bus *bus, const char *path, const char *interface, void *userdata, void **found, sd_bus_error *error);
cc377381 155char *session_bus_path(Session *s);
3f49d45a 156
da119395 157int session_send_signal(Session *s, bool new_session);
cc377381 158int session_send_changed(Session *s, const char *properties, ...) _sentinel_;
88e3dc90 159int session_send_lock(Session *s, bool lock);
7ba64386 160int session_send_lock_all(Manager *m, bool lock);
da119395 161
cc377381 162int session_send_create_reply(Session *s, sd_bus_error *error);
fb6becb4 163
44a6b1b6
ZJS
164const char* session_state_to_string(SessionState t) _const_;
165SessionState session_state_from_string(const char *s) _pure_;
0604381b 166
44a6b1b6
ZJS
167const char* session_type_to_string(SessionType t) _const_;
168SessionType session_type_from_string(const char *s) _pure_;
90821c93 169
44a6b1b6
ZJS
170const char* session_class_to_string(SessionClass t) _const_;
171SessionClass session_class_from_string(const char *s) _pure_;
55efac6c 172
44a6b1b6
ZJS
173const char *kill_who_to_string(KillWho k) _const_;
174KillWho kill_who_from_string(const char *s) _pure_;
ae5e06bd 175
baccf3e4 176int session_prepare_vt(Session *s);
90a18413 177void session_restore_vt(Session *s);
2ec3ff66 178void session_leave_vt(Session *s);
90a18413 179
ae5e06bd 180bool session_is_controller(Session *s, const char *sender);
dc6284e9 181int session_set_controller(Session *s, const char *sender, bool force, bool prepare);
ae5e06bd 182void session_drop_controller(Session *s);
c529695e 183
19070062
LP
184int bus_session_method_activate(sd_bus_message *message, void *userdata, sd_bus_error *error);
185int bus_session_method_lock(sd_bus_message *message, void *userdata, sd_bus_error *error);
186int bus_session_method_terminate(sd_bus_message *message, void *userdata, sd_bus_error *error);
187int bus_session_method_kill(sd_bus_message *message, void *userdata, sd_bus_error *error);