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