1 /* SPDX-License-Identifier: LGPL-2.1+ */
5 This file is part of systemd.
7 Copyright 2011 Lennart Poettering
10 typedef struct Session Session
;
11 typedef enum KillWho KillWho
;
14 #include "login-util.h"
15 #include "logind-user.h"
17 typedef enum SessionState
{
18 SESSION_OPENING
, /* Session scope is being created */
19 SESSION_ONLINE
, /* Logged in */
20 SESSION_ACTIVE
, /* Logged in and in the fg */
21 SESSION_CLOSING
, /* Logged out, but scope is still there */
23 _SESSION_STATE_INVALID
= -1
26 typedef enum SessionClass
{
32 _SESSION_CLASS_INVALID
= -1
35 typedef enum SessionType
{
43 _SESSION_TYPE_INVALID
= -1
46 #define SESSION_TYPE_IS_GRAPHICAL(type) IN_SET(type, SESSION_X11, SESSION_WAYLAND, SESSION_MIR)
52 _KILL_WHO_INVALID
= -1
59 unsigned int position
;
67 dual_timestamp timestamp
;
91 sd_event_source
*fifo_event_source
;
94 dual_timestamp idle_hint_timestamp
;
104 sd_bus_message
*create_message
;
106 sd_event_source
*timer_event_source
;
112 LIST_FIELDS(Session
, sessions_by_user
);
113 LIST_FIELDS(Session
, sessions_by_seat
);
115 LIST_FIELDS(Session
, gc_queue
);
118 Session
*session_new(Manager
*m
, const char *id
);
119 void session_free(Session
*s
);
120 void session_set_user(Session
*s
, User
*u
);
121 bool session_may_gc(Session
*s
, bool drop_not_started
);
122 void session_add_to_gc_queue(Session
*s
);
123 int session_activate(Session
*s
);
124 bool session_is_active(Session
*s
);
125 int session_get_idle_hint(Session
*s
, dual_timestamp
*t
);
126 void session_set_idle_hint(Session
*s
, bool b
);
127 int session_get_locked_hint(Session
*s
);
128 void session_set_locked_hint(Session
*s
, bool b
);
129 int session_create_fifo(Session
*s
);
130 int session_start(Session
*s
, sd_bus_message
*properties
);
131 int session_stop(Session
*s
, bool force
);
132 int session_finalize(Session
*s
);
133 int session_release(Session
*s
);
134 int session_save(Session
*s
);
135 int session_load(Session
*s
);
136 int session_kill(Session
*s
, KillWho who
, int signo
);
138 SessionState
session_get_state(Session
*u
);
140 extern const sd_bus_vtable session_vtable
[];
141 int session_node_enumerator(sd_bus
*bus
, const char *path
,void *userdata
, char ***nodes
, sd_bus_error
*error
);
142 int session_object_find(sd_bus
*bus
, const char *path
, const char *interface
, void *userdata
, void **found
, sd_bus_error
*error
);
143 char *session_bus_path(Session
*s
);
145 int session_send_signal(Session
*s
, bool new_session
);
146 int session_send_changed(Session
*s
, const char *properties
, ...) _sentinel_
;
147 int session_send_lock(Session
*s
, bool lock
);
148 int session_send_lock_all(Manager
*m
, bool lock
);
150 int session_send_create_reply(Session
*s
, sd_bus_error
*error
);
152 const char* session_state_to_string(SessionState t
) _const_
;
153 SessionState
session_state_from_string(const char *s
) _pure_
;
155 const char* session_type_to_string(SessionType t
) _const_
;
156 SessionType
session_type_from_string(const char *s
) _pure_
;
158 const char* session_class_to_string(SessionClass t
) _const_
;
159 SessionClass
session_class_from_string(const char *s
) _pure_
;
161 const char *kill_who_to_string(KillWho k
) _const_
;
162 KillWho
kill_who_from_string(const char *s
) _pure_
;
164 int session_prepare_vt(Session
*s
);
165 void session_restore_vt(Session
*s
);
166 void session_leave_vt(Session
*s
);
168 bool session_is_controller(Session
*s
, const char *sender
);
169 int session_set_controller(Session
*s
, const char *sender
, bool force
, bool prepare
);
170 void session_drop_controller(Session
*s
);
172 int bus_session_method_activate(sd_bus_message
*message
, void *userdata
, sd_bus_error
*error
);
173 int bus_session_method_lock(sd_bus_message
*message
, void *userdata
, sd_bus_error
*error
);
174 int bus_session_method_terminate(sd_bus_message
*message
, void *userdata
, sd_bus_error
*error
);
175 int bus_session_method_kill(sd_bus_message
*message
, void *userdata
, sd_bus_error
*error
);