1 /*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
4 This file is part of systemd.
6 Copyright (C) 2014 David Herrmann <dh.herrmann@gmail.com>
8 systemd is free software; you can redistribute it and/or modify it
9 under the terms of the GNU Lesser General Public License as published by
10 the Free Software Foundation; either version 2.1 of the License, or
11 (at your option) any later version.
13 systemd is distributed in the hope that it will be useful, but
14 WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16 Lesser General Public License for more details.
18 You should have received a copy of the GNU Lesser General Public License
19 along with systemd; If not, see <http://www.gnu.org/licenses/>.
24 * The sysview interface scans and monitors the system for seats, sessions and
25 * devices. It basically mirrors the state of logind on the application side.
26 * It's meant as base for session services that require managed device access.
27 * The logind controller API is employed to allow unprivileged access to all
29 * Furthermore, the sysview interface can be used for system services that run
30 * in situations where logind is not available, but session-like services are
31 * needed. For instance, the initrd does not run logind but might require
32 * graphics access. It cannot run session services, though. The sysview
33 * interface pretends that a session is available and provides the same
34 * interface as to normal session services.
40 #include <systemd/sd-bus.h>
41 #include <systemd/sd-event.h>
43 typedef struct sysview_event sysview_event;
44 typedef struct sysview_device sysview_device;
45 typedef struct sysview_session sysview_session;
46 typedef struct sysview_seat sysview_seat;
47 typedef struct sysview_context sysview_context;
54 SYSVIEW_EVENT_SEAT_ADD,
55 SYSVIEW_EVENT_SEAT_REMOVE,
57 SYSVIEW_EVENT_SESSION_FILTER,
58 SYSVIEW_EVENT_SESSION_ADD,
59 SYSVIEW_EVENT_SESSION_REMOVE,
60 SYSVIEW_EVENT_SESSION_ATTACH,
61 SYSVIEW_EVENT_SESSION_DETACH,
62 SYSVIEW_EVENT_SESSION_REFRESH,
63 SYSVIEW_EVENT_SESSION_CONTROL,
66 struct sysview_event {
72 } seat_add, seat_remove;
82 sysview_session *session;
83 } session_add, session_remove;
86 sysview_session *session;
87 sysview_device *device;
88 } session_attach, session_detach;
91 sysview_session *session;
92 sysview_device *device;
93 struct udev_device *ud;
97 sysview_session *session;
103 typedef int (*sysview_event_fn) (sysview_context *c, void *userdata, sysview_event *e);
110 SYSVIEW_DEVICE_EVDEV,
115 const char *sysview_device_get_name(sysview_device *device);
116 unsigned int sysview_device_get_type(sysview_device *device);
117 struct udev_device *sysview_device_get_ud(sysview_device *device);
123 void sysview_session_set_userdata(sysview_session *session, void *userdata);
124 void *sysview_session_get_userdata(sysview_session *session);
126 const char *sysview_session_get_name(sysview_session *session);
127 sysview_seat *sysview_session_get_seat(sysview_session *session);
129 int sysview_session_take_control(sysview_session *session);
130 void sysview_session_release_control(sysview_session *session);
136 const char *sysview_seat_get_name(sysview_seat *seat);
137 int sysview_seat_switch_to(sysview_seat *seat, uint32_t nr);
144 SYSVIEW_CONTEXT_SCAN_LOGIND = (1 << 0),
145 SYSVIEW_CONTEXT_SCAN_EVDEV = (1 << 1),
146 SYSVIEW_CONTEXT_SCAN_DRM = (1 << 2),
149 int sysview_context_new(sysview_context **out,
154 sysview_context *sysview_context_free(sysview_context *c);
156 DEFINE_TRIVIAL_CLEANUP_FUNC(sysview_context*, sysview_context_free);
158 bool sysview_context_is_running(sysview_context *c);
159 int sysview_context_start(sysview_context *c, sysview_event_fn event_fn, void *userdata);
160 void sysview_context_stop(sysview_context *c);