]> git.ipfire.org Git - thirdparty/systemd.git/blame - src/systemd/sd-login.h
sd-login: add a public accessor for the VT number
[thirdparty/systemd.git] / src / systemd / sd-login.h
CommitLineData
74b91131
LP
1/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
2
3#ifndef foosdloginhfoo
4#define foosdloginhfoo
5
6/***
7 This file is part of systemd.
8
9 Copyright 2011 Lennart Poettering
10
11 systemd is free software; you can redistribute it and/or modify it
5430f7f2
LP
12 under the terms of the GNU Lesser General Public License as published by
13 the Free Software Foundation; either version 2.1 of the License, or
74b91131
LP
14 (at your option) any later version.
15
16 systemd is distributed in the hope that it will be useful, but
17 WITHOUT ANY WARRANTY; without even the implied warranty of
18 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
5430f7f2 19 Lesser General Public License for more details.
74b91131 20
5430f7f2 21 You should have received a copy of the GNU Lesser General Public License
74b91131
LP
22 along with systemd; If not, see <http://www.gnu.org/licenses/>.
23***/
24
25#include <sys/types.h>
667c24a6 26#include <inttypes.h>
74b91131 27
f9873976
LP
28#ifdef __cplusplus
29extern "C" {
30#endif
31
034a2a52
LP
32/*
33 * A few points:
34 *
35 * Instead of returning an empty string array or empty uid array, we
36 * may return NULL.
37 *
ee1f44bd
LP
38 * Free the data the library returns with libc free(). String arrays
39 * are NULL terminated and you need to free the array itself in
40 * addition to the strings contained.
034a2a52 41 *
d60ef526
LP
42 * We return error codes as negative errno, kernel-style. 0 or
43 * positive on success.
034a2a52
LP
44 *
45 * These functions access data in /proc, /sys/fs/cgroup and /run. All
46 * of these are virtual file systems, hence the accesses are
47 * relatively cheap.
cb07866b
LP
48 *
49 * See sd-login(3) for more information.
034a2a52
LP
50 */
51
52/* Get session from PID. Note that 'shared' processes of a user are
53 * not attached to a session, but only attached to a user. This will
54 * return an error for system processes and 'shared' processes of a
55 * user. */
74b91131
LP
56int sd_pid_get_session(pid_t pid, char **session);
57
034a2a52
LP
58/* Get UID of the owner of the session of the PID (or in case the
59 * process is a 'shared' user process the UID of that user is
60 * returned). This will not return the UID of the process, but rather
61 * the UID of the owner of the cgroup the process is in. This will
62 * return an error for system processes. */
63int sd_pid_get_owner_uid(pid_t pid, uid_t *uid);
64
97e13058
LP
65/* Get systemd unit (i.e. service) name from PID, for system
66 * services. This will return an error for non-service processes. */
7027ff61 67int sd_pid_get_unit(pid_t pid, char **unit);
9847946e 68
97e13058
LP
69/* Get systemd unit (i.e. service) name from PID, for user
70 * services. This will return an error for non-user-service
71 * processes. */
7027ff61
LP
72int sd_pid_get_user_unit(pid_t pid, char **unit);
73
74/* Get machine name from PID, for processes assigned to VM or
1021b21b 75 * container. This will return an error for non-machine processes. */
7027ff61 76int sd_pid_get_machine_name(pid_t pid, char **name);
97e13058 77
1021b21b
LP
78/* Get slice name from PID. */
79int sd_pid_get_slice(pid_t pid, char **name);
80
0604381b 81/* Get state from uid. Possible states: offline, lingering, online, active, closing */
74b91131
LP
82int sd_uid_get_state(uid_t uid, char**state);
83
034a2a52
LP
84/* Return 1 if uid has session on seat. If require_active is true will
85 * look for active sessions only. */
86int sd_uid_is_on_seat(uid_t uid, int require_active, const char *seat);
87
d60ef526
LP
88/* Return sessions of user. If require_active is true will look for
89 * active sessions only. Returns number of sessions as return
90 * value. If sessions is NULL will just return number of sessions. */
034a2a52 91int sd_uid_get_sessions(uid_t uid, int require_active, char ***sessions);
74b91131 92
034a2a52 93/* Return seats of user is on. If require_active is true will look for
d60ef526
LP
94 * active seats only. Returns number of seats. If seats is NULL will
95 * just return number of seats.*/
034a2a52 96int sd_uid_get_seats(uid_t uid, int require_active, char ***seats);
74b91131 97
0604381b 98/* Return 1 if the session is a active. */
74b91131
LP
99int sd_session_is_active(const char *session);
100
0604381b
LP
101/* Get state from session. Possible states: online, active, closing
102 * (This function is a more generic version of
103 * sd_session_is_active().) */
104int sd_session_get_state(const char *sessio, char **state);
105
74b91131
LP
106/* Determine user id of session */
107int sd_session_get_uid(const char *session, uid_t *uid);
108
109/* Determine seat of session */
110int sd_session_get_seat(const char *session, char **seat);
111
eff40633
LP
112/* Determine the (PAM) service name this session was registered by. */
113int sd_session_get_service(const char *session, char **service);
114
51f58f08
LP
115/* Determine the type of this session, i.e. one of "tty", "x11" or "unspecified". */
116int sd_session_get_type(const char *session, char **type);
117
118/* Determine the class of this session, i.e. one of "user", "greeter" or "lock-screen". */
e09a9a35 119int sd_session_get_class(const char *session, char **clazz);
51f58f08 120
fc8af9ff
LP
121/* Determine the X11 display of this session. */
122int sd_session_get_display(const char *session, char **display);
123
c84f5e4a
LP
124/* Determine the TTY of this session. */
125int sd_session_get_tty(const char *session, char **display);
126
44ded3ab
GC
127/* Determine the VT number of this session. */
128int sd_session_get_vt(const char *session, unsigned *vtnr);
129
74b91131
LP
130/* Return active session and user of seat */
131int sd_seat_get_active(const char *seat, char **session, uid_t *uid);
132
d60ef526 133/* Return sessions and users on seat. Returns number of sessions as
e8fbe35d 134 * return value. If sessions is NULL returns only the number of
d60ef526 135 * sessions. */
034a2a52
LP
136int sd_seat_get_sessions(const char *seat, char ***sessions, uid_t **uid, unsigned *n_uids);
137
add30678
LP
138/* Return whether the seat is multi-session capable */
139int sd_seat_can_multi_session(const char *seat);
140
20747498
LP
141/* Return whether the seat is TTY capable, i.e. suitable for showing console UIs */
142int sd_seat_can_tty(const char *seat);
143
144/* Return whether the seat is graphics capable, i.e. suitable for showing graphical UIs */
145int sd_seat_can_graphical(const char *seat);
146
d60ef526
LP
147/* Get all seats, store in *seats. Returns the number of seats. If
148 * seats is NULL only returns number of seats. */
034a2a52
LP
149int sd_get_seats(char ***seats);
150
e8fbe35d 151/* Get all sessions, store in *sessions. Returns the number of
d60ef526 152 * sessions. If sessions is NULL only returns number of sessions. */
034a2a52
LP
153int sd_get_sessions(char ***sessions);
154
d60ef526
LP
155/* Get all logged in users, store in *users. Returns the number of
156 * users. If users is NULL only returns the number of users. */
034a2a52
LP
157int sd_get_uids(uid_t **users);
158
a20affe2
LP
159/* Get all running virtual machines/containers */
160int sd_get_machine_names(char ***machines);
161
034a2a52
LP
162/* Monitor object */
163typedef struct sd_login_monitor sd_login_monitor;
164
165/* Create a new monitor. Category must be NULL, "seat", "session",
e10375f2
LP
166 * "uid", "machine" to get monitor events for the specific category
167 * (or all). */
034a2a52
LP
168int sd_login_monitor_new(const char *category, sd_login_monitor** ret);
169
170/* Destroys the passed monitor. Returns NULL. */
171sd_login_monitor* sd_login_monitor_unref(sd_login_monitor *m);
172
173/* Flushes the monitor */
174int sd_login_monitor_flush(sd_login_monitor *m);
175
176/* Get FD from monitor */
177int sd_login_monitor_get_fd(sd_login_monitor *m);
178
dace83cb
LP
179/* Get poll() mask to monitor */
180int sd_login_monitor_get_events(sd_login_monitor *m);
181
667c24a6
LP
182/* Get timeout for poll(), as usec value relative to CLOCK_MONOTONIC's epoch */
183int sd_login_monitor_get_timeout(sd_login_monitor *m, uint64_t *timeout_usec);
184
f9873976
LP
185#ifdef __cplusplus
186}
187#endif
188
74b91131 189#endif