]> git.ipfire.org Git - thirdparty/systemd.git/blame - src/login/logind-session.h
logind: when setting a new controller, don't prepare the VT if logind is restarted
[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
cc377381 114 sd_bus_message *create_message;
fb6becb4 115
5f41d1f1
LP
116 sd_event_source *timer_event_source;
117
ae5e06bd 118 char *controller;
118ecf32 119 Hashmap *devices;
3cde9e8f 120 sd_bus_track *track;
ae5e06bd 121
90821c93
LP
122 LIST_FIELDS(Session, sessions_by_user);
123 LIST_FIELDS(Session, sessions_by_seat);
14c3baca
LP
124
125 LIST_FIELDS(Session, gc_queue);
90821c93
LP
126};
127
9444b1f2 128Session *session_new(Manager *m, const char *id);
90821c93 129void session_free(Session *s);
9444b1f2 130void session_set_user(Session *s, User *u);
cc377381 131bool session_check_gc(Session *s, bool drop_not_started);
14c3baca 132void session_add_to_gc_queue(Session *s);
90821c93
LP
133int session_activate(Session *s);
134bool session_is_active(Session *s);
a185c5aa 135int session_get_idle_hint(Session *s, dual_timestamp *t);
bef422ae 136void session_set_idle_hint(Session *s, bool b);
42d35e13
VT
137int session_get_locked_hint(Session *s);
138void session_set_locked_hint(Session *s, bool b);
932e3ee7 139int session_create_fifo(Session *s);
90821c93 140int session_start(Session *s);
9bb69af4 141int session_stop(Session *s, bool force);
405e0255 142int session_finalize(Session *s);
ad8780c9 143int session_release(Session *s);
90821c93
LP
144int session_save(Session *s);
145int session_load(Session *s);
de07ab16 146int session_kill(Session *s, KillWho who, int signo);
90821c93 147
0604381b
LP
148SessionState session_get_state(Session *u);
149
cc377381 150extern const sd_bus_vtable session_vtable[];
f00c3121
LP
151int session_node_enumerator(sd_bus *bus, const char *path,void *userdata, char ***nodes, sd_bus_error *error);
152int session_object_find(sd_bus *bus, const char *path, const char *interface, void *userdata, void **found, sd_bus_error *error);
cc377381 153char *session_bus_path(Session *s);
3f49d45a 154
da119395 155int session_send_signal(Session *s, bool new_session);
cc377381 156int session_send_changed(Session *s, const char *properties, ...) _sentinel_;
88e3dc90 157int session_send_lock(Session *s, bool lock);
7ba64386 158int session_send_lock_all(Manager *m, bool lock);
da119395 159
cc377381 160int session_send_create_reply(Session *s, sd_bus_error *error);
fb6becb4 161
44a6b1b6
ZJS
162const char* session_state_to_string(SessionState t) _const_;
163SessionState session_state_from_string(const char *s) _pure_;
0604381b 164
44a6b1b6
ZJS
165const char* session_type_to_string(SessionType t) _const_;
166SessionType session_type_from_string(const char *s) _pure_;
90821c93 167
44a6b1b6
ZJS
168const char* session_class_to_string(SessionClass t) _const_;
169SessionClass session_class_from_string(const char *s) _pure_;
55efac6c 170
44a6b1b6
ZJS
171const char *kill_who_to_string(KillWho k) _const_;
172KillWho kill_who_from_string(const char *s) _pure_;
ae5e06bd 173
baccf3e4 174int session_prepare_vt(Session *s);
90a18413 175void session_restore_vt(Session *s);
2ec3ff66 176void session_leave_vt(Session *s);
90a18413 177
ae5e06bd 178bool session_is_controller(Session *s, const char *sender);
dc6284e9 179int session_set_controller(Session *s, const char *sender, bool force, bool prepare);
ae5e06bd 180void session_drop_controller(Session *s);
c529695e 181
19070062
LP
182int bus_session_method_activate(sd_bus_message *message, void *userdata, sd_bus_error *error);
183int bus_session_method_lock(sd_bus_message *message, void *userdata, sd_bus_error *error);
184int bus_session_method_terminate(sd_bus_message *message, void *userdata, sd_bus_error *error);
185int bus_session_method_kill(sd_bus_message *message, void *userdata, sd_bus_error *error);