]> git.ipfire.org Git - thirdparty/systemd.git/blame - src/login/logind-user.h
man: add sd_bus_message_new_signal(3)
[thirdparty/systemd.git] / src / login / logind-user.h
CommitLineData
53e1b683 1/* SPDX-License-Identifier: LGPL-2.1+ */
c2f1db8f 2#pragma once
90821c93 3
90821c93
LP
4typedef struct User User;
5
a2106925 6#include "conf-parser.h"
90821c93 7#include "list.h"
90821c93 8#include "logind.h"
90821c93
LP
9
10typedef enum UserState {
0604381b 11 USER_OFFLINE, /* Not logged in at all */
fb6becb4 12 USER_OPENING, /* Is logging in */
0604381b
LP
13 USER_LINGERING, /* Lingering has been enabled by the admin for this user */
14 USER_ONLINE, /* User logged in */
15 USER_ACTIVE, /* User logged in and has a session in the fg */
16 USER_CLOSING, /* User logged out, but processes still remain and lingering is not enabled */
90821c93
LP
17 _USER_STATE_MAX,
18 _USER_STATE_INVALID = -1
19} UserState;
20
21struct User {
22 Manager *manager;
90821c93
LP
23 uid_t uid;
24 gid_t gid;
25 char *name;
90821c93
LP
26 char *state_file;
27 char *runtime_path;
9444b1f2 28 char *slice;
090d92bd 29 char *service;
90821c93 30
fb6becb4
LP
31 char *service_job;
32 char *slice_job;
33
90821c93
LP
34 Session *display;
35
36 dual_timestamp timestamp;
37
14c3baca 38 bool in_gc_queue:1;
9418f147 39 bool started:1;
5f41d1f1 40 bool stopping:1;
14c3baca 41
90821c93 42 LIST_HEAD(Session, sessions);
14c3baca 43 LIST_FIELDS(User, gc_queue);
90821c93
LP
44};
45
157f5057
DH
46int user_new(User **out, Manager *m, uid_t uid, gid_t gid, const char *name);
47User *user_free(User *u);
48
49DEFINE_TRIVIAL_CLEANUP_FUNC(User *, user_free);
50
5c093a23 51bool user_may_gc(User *u, bool drop_not_started);
14c3baca 52void user_add_to_gc_queue(User *u);
90821c93 53int user_start(User *u);
9bb69af4 54int user_stop(User *u, bool force);
405e0255 55int user_finalize(User *u);
90821c93 56UserState user_get_state(User *u);
a185c5aa 57int user_get_idle_hint(User *u, dual_timestamp *t);
90821c93
LP
58int user_save(User *u);
59int user_load(User *u);
de07ab16 60int user_kill(User *u, int signo);
3a9f7a30 61int user_check_linger_file(User *u);
952d3260 62void user_elect_display(User *u);
90821c93 63
cc377381 64extern const sd_bus_vtable user_vtable[];
f00c3121
LP
65int user_node_enumerator(sd_bus *bus, const char *path, void *userdata, char ***nodes, sd_bus_error *error);
66int user_object_find(sd_bus *bus, const char *path, const char *interface, void *userdata, void **found, sd_bus_error *error);
3f49d45a
LP
67char *user_bus_path(User *s);
68
da119395 69int user_send_signal(User *u, bool new_user);
cc377381 70int user_send_changed(User *u, const char *properties, ...) _sentinel_;
da119395 71
44a6b1b6
ZJS
72const char* user_state_to_string(UserState s) _const_;
73UserState user_state_from_string(const char *s) _pure_;
c529695e 74
19070062
LP
75int bus_user_method_terminate(sd_bus_message *message, void *userdata, sd_bus_error *error);
76int bus_user_method_kill(sd_bus_message *message, void *userdata, sd_bus_error *error);
28414939 77
a2106925 78CONFIG_PARSER_PROTOTYPE(config_parse_compat_user_tasks_max);