]> git.ipfire.org Git - thirdparty/systemd.git/blame - src/login/logind-session.h
core: don't wait for non-control/non-main processes when killing processes on the...
[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"
28#include "util.h"
29#include "logind.h"
30#include "logind-seat.h"
118ecf32 31#include "logind-session-device.h"
90821c93 32#include "logind-user.h"
4b549144 33#include "login-shared.h"
90821c93 34
0604381b 35typedef enum SessionState {
fb6becb4 36 SESSION_OPENING, /* Session scope is being created */
0604381b
LP
37 SESSION_ONLINE, /* Logged in */
38 SESSION_ACTIVE, /* Logged in and in the fg */
fb6becb4 39 SESSION_CLOSING, /* Logged out, but scope is still there */
0604381b
LP
40 _SESSION_STATE_MAX,
41 _SESSION_STATE_INVALID = -1
42} SessionState;
43
55efac6c
LP
44typedef enum SessionClass {
45 SESSION_USER,
46 SESSION_GREETER,
47 SESSION_LOCK_SCREEN,
e2acb67b 48 SESSION_BACKGROUND,
55efac6c
LP
49 _SESSION_CLASS_MAX,
50 _SESSION_CLASS_INVALID = -1
51} SessionClass;
52
e2acb67b
LP
53typedef enum SessionType {
54 SESSION_UNSPECIFIED,
55 SESSION_TTY,
56 SESSION_X11,
57 _SESSION_TYPE_MAX,
58 _SESSION_TYPE_INVALID = -1
59} SessionType;
60
9444b1f2 61enum KillWho {
de07ab16
LP
62 KILL_LEADER,
63 KILL_ALL,
64 _KILL_WHO_MAX,
65 _KILL_WHO_INVALID = -1
9444b1f2 66};
de07ab16 67
90821c93
LP
68struct Session {
69 Manager *manager;
70
71 char *id;
49e6fdbf 72 unsigned int pos;
90821c93 73 SessionType type;
55efac6c 74 SessionClass class;
90821c93
LP
75
76 char *state_file;
77
78 User *user;
79
80 dual_timestamp timestamp;
81
82 char *tty;
83 char *display;
84
85 bool remote;
3f49d45a 86 char *remote_user;
90821c93 87 char *remote_host;
98a28fef 88 char *service;
fb6becb4
LP
89
90 char *scope;
91 char *scope_job;
98a28fef 92
90821c93 93 Seat *seat;
92bd5ff3 94 unsigned int vtnr;
90a18413
DH
95 int vtfd;
96 sd_event_source *vt_source;
90821c93
LP
97
98 pid_t leader;
3f49d45a 99 uint32_t audit_id;
90821c93 100
932e3ee7
LP
101 int fifo_fd;
102 char *fifo_path;
90821c93 103
cc377381
LP
104 sd_event_source *fifo_event_source;
105
a185c5aa
LP
106 bool idle_hint;
107 dual_timestamp idle_hint_timestamp;
108
14c3baca 109 bool in_gc_queue:1;
9418f147 110 bool started:1;
90821c93 111
cc377381 112 sd_bus_message *create_message;
fb6becb4 113
ae5e06bd 114 char *controller;
118ecf32 115 Hashmap *devices;
ae5e06bd 116
90821c93
LP
117 LIST_FIELDS(Session, sessions_by_user);
118 LIST_FIELDS(Session, sessions_by_seat);
14c3baca
LP
119
120 LIST_FIELDS(Session, gc_queue);
90821c93
LP
121};
122
9444b1f2 123Session *session_new(Manager *m, const char *id);
90821c93 124void session_free(Session *s);
9444b1f2 125void session_set_user(Session *s, User *u);
cc377381 126bool session_check_gc(Session *s, bool drop_not_started);
14c3baca 127void session_add_to_gc_queue(Session *s);
90821c93
LP
128int session_activate(Session *s);
129bool session_is_active(Session *s);
a185c5aa 130int session_get_idle_hint(Session *s, dual_timestamp *t);
bef422ae 131void session_set_idle_hint(Session *s, bool b);
932e3ee7
LP
132int session_create_fifo(Session *s);
133void session_remove_fifo(Session *s);
90821c93
LP
134int session_start(Session *s);
135int session_stop(Session *s);
405e0255 136int session_finalize(Session *s);
90821c93
LP
137int session_save(Session *s);
138int session_load(Session *s);
de07ab16 139int session_kill(Session *s, KillWho who, int signo);
90821c93 140
0604381b
LP
141SessionState session_get_state(Session *u);
142
cc377381 143extern const sd_bus_vtable session_vtable[];
f00c3121
LP
144int session_node_enumerator(sd_bus *bus, const char *path,void *userdata, char ***nodes, sd_bus_error *error);
145int session_object_find(sd_bus *bus, const char *path, const char *interface, void *userdata, void **found, sd_bus_error *error);
cc377381 146char *session_bus_path(Session *s);
3f49d45a 147
da119395 148int session_send_signal(Session *s, bool new_session);
cc377381 149int session_send_changed(Session *s, const char *properties, ...) _sentinel_;
88e3dc90 150int session_send_lock(Session *s, bool lock);
7ba64386 151int session_send_lock_all(Manager *m, bool lock);
da119395 152
cc377381 153int session_send_create_reply(Session *s, sd_bus_error *error);
fb6becb4 154
44a6b1b6
ZJS
155const char* session_state_to_string(SessionState t) _const_;
156SessionState session_state_from_string(const char *s) _pure_;
0604381b 157
44a6b1b6
ZJS
158const char* session_type_to_string(SessionType t) _const_;
159SessionType session_type_from_string(const char *s) _pure_;
90821c93 160
44a6b1b6
ZJS
161const char* session_class_to_string(SessionClass t) _const_;
162SessionClass session_class_from_string(const char *s) _pure_;
55efac6c 163
44a6b1b6
ZJS
164const char *kill_who_to_string(KillWho k) _const_;
165KillWho kill_who_from_string(const char *s) _pure_;
ae5e06bd 166
90a18413
DH
167void session_mute_vt(Session *s);
168void session_restore_vt(Session *s);
169
ae5e06bd
DH
170bool session_is_controller(Session *s, const char *sender);
171int session_set_controller(Session *s, const char *sender, bool force);
172void session_drop_controller(Session *s);