logind.h revision 23406ce58aa7142e8df3c5c9e5ac34a01e90e3e0
8ea48dfcd33e8db0c01bf8c57c3bbcfdc3c86d4bLennart Poettering/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
8ea48dfcd33e8db0c01bf8c57c3bbcfdc3c86d4bLennart Poettering
8ea48dfcd33e8db0c01bf8c57c3bbcfdc3c86d4bLennart Poettering#pragma once
8ea48dfcd33e8db0c01bf8c57c3bbcfdc3c86d4bLennart Poettering
8ea48dfcd33e8db0c01bf8c57c3bbcfdc3c86d4bLennart Poettering/***
8ea48dfcd33e8db0c01bf8c57c3bbcfdc3c86d4bLennart Poettering This file is part of systemd.
8ea48dfcd33e8db0c01bf8c57c3bbcfdc3c86d4bLennart Poettering
8ea48dfcd33e8db0c01bf8c57c3bbcfdc3c86d4bLennart Poettering Copyright 2011 Lennart Poettering
8ea48dfcd33e8db0c01bf8c57c3bbcfdc3c86d4bLennart Poettering
8ea48dfcd33e8db0c01bf8c57c3bbcfdc3c86d4bLennart Poettering systemd is free software; you can redistribute it and/or modify it
8ea48dfcd33e8db0c01bf8c57c3bbcfdc3c86d4bLennart Poettering under the terms of the GNU Lesser General Public License as published by
8ea48dfcd33e8db0c01bf8c57c3bbcfdc3c86d4bLennart Poettering the Free Software Foundation; either version 2.1 of the License, or
8ea48dfcd33e8db0c01bf8c57c3bbcfdc3c86d4bLennart Poettering (at your option) any later version.
8ea48dfcd33e8db0c01bf8c57c3bbcfdc3c86d4bLennart Poettering
8ea48dfcd33e8db0c01bf8c57c3bbcfdc3c86d4bLennart Poettering systemd is distributed in the hope that it will be useful, but
8ea48dfcd33e8db0c01bf8c57c3bbcfdc3c86d4bLennart Poettering WITHOUT ANY WARRANTY; without even the implied warranty of
8ea48dfcd33e8db0c01bf8c57c3bbcfdc3c86d4bLennart Poettering MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
8ea48dfcd33e8db0c01bf8c57c3bbcfdc3c86d4bLennart Poettering Lesser General Public License for more details.
8ea48dfcd33e8db0c01bf8c57c3bbcfdc3c86d4bLennart Poettering
8ea48dfcd33e8db0c01bf8c57c3bbcfdc3c86d4bLennart Poettering You should have received a copy of the GNU Lesser General Public License
8ea48dfcd33e8db0c01bf8c57c3bbcfdc3c86d4bLennart Poettering along with systemd; If not, see <http://www.gnu.org/licenses/>.
8ea48dfcd33e8db0c01bf8c57c3bbcfdc3c86d4bLennart Poettering***/
7dbb1d08f66cd44b1296be3ee8e3629b989e19a8Zbigniew Jędrzejewski-Szmek
8ea48dfcd33e8db0c01bf8c57c3bbcfdc3c86d4bLennart Poettering#include <stdbool.h>
4aa4d2ae9717d0f8656528a3197bbc0c256380b1Zbigniew Jędrzejewski-Szmek#include <inttypes.h>
4aa4d2ae9717d0f8656528a3197bbc0c256380b1Zbigniew Jędrzejewski-Szmek#include <dbus/dbus.h>
4aa4d2ae9717d0f8656528a3197bbc0c256380b1Zbigniew Jędrzejewski-Szmek#include <libudev.h>
4aa4d2ae9717d0f8656528a3197bbc0c256380b1Zbigniew Jędrzejewski-Szmek
4aa4d2ae9717d0f8656528a3197bbc0c256380b1Zbigniew Jędrzejewski-Szmek#include "util.h"
8ea48dfcd33e8db0c01bf8c57c3bbcfdc3c86d4bLennart Poettering#include "audit.h"
8ea48dfcd33e8db0c01bf8c57c3bbcfdc3c86d4bLennart Poettering#include "list.h"
8ea48dfcd33e8db0c01bf8c57c3bbcfdc3c86d4bLennart Poettering#include "hashmap.h"
8ea48dfcd33e8db0c01bf8c57c3bbcfdc3c86d4bLennart Poettering#include "cgroup-util.h"
8ea48dfcd33e8db0c01bf8c57c3bbcfdc3c86d4bLennart Poettering
8ea48dfcd33e8db0c01bf8c57c3bbcfdc3c86d4bLennart Poetteringtypedef struct Manager Manager;
8ea48dfcd33e8db0c01bf8c57c3bbcfdc3c86d4bLennart Poettering
8ea48dfcd33e8db0c01bf8c57c3bbcfdc3c86d4bLennart Poettering#include "logind-device.h"
8ea48dfcd33e8db0c01bf8c57c3bbcfdc3c86d4bLennart Poettering#include "logind-seat.h"
8ea48dfcd33e8db0c01bf8c57c3bbcfdc3c86d4bLennart Poettering#include "logind-session.h"
8ea48dfcd33e8db0c01bf8c57c3bbcfdc3c86d4bLennart Poettering#include "logind-user.h"
8ea48dfcd33e8db0c01bf8c57c3bbcfdc3c86d4bLennart Poettering#include "logind-inhibit.h"
8ea48dfcd33e8db0c01bf8c57c3bbcfdc3c86d4bLennart Poettering#include "logind-button.h"
8ea48dfcd33e8db0c01bf8c57c3bbcfdc3c86d4bLennart Poettering#include "logind-action.h"
8ea48dfcd33e8db0c01bf8c57c3bbcfdc3c86d4bLennart Poettering
8ea48dfcd33e8db0c01bf8c57c3bbcfdc3c86d4bLennart Poetteringstruct Manager {
8ea48dfcd33e8db0c01bf8c57c3bbcfdc3c86d4bLennart Poettering DBusConnection *bus;
8ea48dfcd33e8db0c01bf8c57c3bbcfdc3c86d4bLennart Poettering
8ea48dfcd33e8db0c01bf8c57c3bbcfdc3c86d4bLennart Poettering Hashmap *devices;
755bde375f4db393ad06e73340bfcf4d0cf91bb2Lennart Poettering Hashmap *seats;
755bde375f4db393ad06e73340bfcf4d0cf91bb2Lennart Poettering Hashmap *sessions;
8ea48dfcd33e8db0c01bf8c57c3bbcfdc3c86d4bLennart Poettering Hashmap *users;
755bde375f4db393ad06e73340bfcf4d0cf91bb2Lennart Poettering Hashmap *inhibitors;
8ea48dfcd33e8db0c01bf8c57c3bbcfdc3c86d4bLennart Poettering Hashmap *buttons;
8ea48dfcd33e8db0c01bf8c57c3bbcfdc3c86d4bLennart Poettering
8ea48dfcd33e8db0c01bf8c57c3bbcfdc3c86d4bLennart Poettering LIST_HEAD(Seat, seat_gc_queue);
8ea48dfcd33e8db0c01bf8c57c3bbcfdc3c86d4bLennart Poettering LIST_HEAD(Session, session_gc_queue);
7dbb1d08f66cd44b1296be3ee8e3629b989e19a8Zbigniew Jędrzejewski-Szmek LIST_HEAD(User, user_gc_queue);
8ea48dfcd33e8db0c01bf8c57c3bbcfdc3c86d4bLennart Poettering
8ea48dfcd33e8db0c01bf8c57c3bbcfdc3c86d4bLennart Poettering struct udev *udev;
8ea48dfcd33e8db0c01bf8c57c3bbcfdc3c86d4bLennart Poettering struct udev_monitor *udev_seat_monitor, *udev_vcsa_monitor, *udev_button_monitor;
ecabcf8b6edcc856ec2fd5bd43fc675a8fe04731Lennart Poettering
755bde375f4db393ad06e73340bfcf4d0cf91bb2Lennart Poettering int udev_seat_fd;
755bde375f4db393ad06e73340bfcf4d0cf91bb2Lennart Poettering int udev_vcsa_fd;
7dbb1d08f66cd44b1296be3ee8e3629b989e19a8Zbigniew Jędrzejewski-Szmek int udev_button_fd;
8ea48dfcd33e8db0c01bf8c57c3bbcfdc3c86d4bLennart Poettering
ecabcf8b6edcc856ec2fd5bd43fc675a8fe04731Lennart Poettering int console_active_fd;
7dbb1d08f66cd44b1296be3ee8e3629b989e19a8Zbigniew Jędrzejewski-Szmek int bus_fd;
8ea48dfcd33e8db0c01bf8c57c3bbcfdc3c86d4bLennart Poettering int epoll_fd;
755bde375f4db393ad06e73340bfcf4d0cf91bb2Lennart Poettering
755bde375f4db393ad06e73340bfcf4d0cf91bb2Lennart Poettering unsigned n_autovts;
8ea48dfcd33e8db0c01bf8c57c3bbcfdc3c86d4bLennart Poettering
755bde375f4db393ad06e73340bfcf4d0cf91bb2Lennart Poettering unsigned reserve_vt;
8ea48dfcd33e8db0c01bf8c57c3bbcfdc3c86d4bLennart Poettering int reserve_vt_fd;
8ea48dfcd33e8db0c01bf8c57c3bbcfdc3c86d4bLennart Poettering
4aa4d2ae9717d0f8656528a3197bbc0c256380b1Zbigniew Jędrzejewski-Szmek Seat *vtconsole;
4aa4d2ae9717d0f8656528a3197bbc0c256380b1Zbigniew Jędrzejewski-Szmek
8ea48dfcd33e8db0c01bf8c57c3bbcfdc3c86d4bLennart Poettering char *cgroup_path;
8ea48dfcd33e8db0c01bf8c57c3bbcfdc3c86d4bLennart Poettering char **controllers, **reset_controllers;
8ea48dfcd33e8db0c01bf8c57c3bbcfdc3c86d4bLennart Poettering
755bde375f4db393ad06e73340bfcf4d0cf91bb2Lennart Poettering char **kill_only_users, **kill_exclude_users;
755bde375f4db393ad06e73340bfcf4d0cf91bb2Lennart Poettering
755bde375f4db393ad06e73340bfcf4d0cf91bb2Lennart Poettering bool kill_user_processes;
755bde375f4db393ad06e73340bfcf4d0cf91bb2Lennart Poettering
8ea48dfcd33e8db0c01bf8c57c3bbcfdc3c86d4bLennart Poettering unsigned long session_counter;
8ea48dfcd33e8db0c01bf8c57c3bbcfdc3c86d4bLennart Poettering unsigned long inhibit_counter;
8ea48dfcd33e8db0c01bf8c57c3bbcfdc3c86d4bLennart Poettering
8ea48dfcd33e8db0c01bf8c57c3bbcfdc3c86d4bLennart Poettering Hashmap *session_cgroups;
8ea48dfcd33e8db0c01bf8c57c3bbcfdc3c86d4bLennart Poettering Hashmap *user_cgroups;
8ea48dfcd33e8db0c01bf8c57c3bbcfdc3c86d4bLennart Poettering
7dbb1d08f66cd44b1296be3ee8e3629b989e19a8Zbigniew Jędrzejewski-Szmek Hashmap *session_fds;
8ea48dfcd33e8db0c01bf8c57c3bbcfdc3c86d4bLennart Poettering Hashmap *inhibitor_fds;
8ea48dfcd33e8db0c01bf8c57c3bbcfdc3c86d4bLennart Poettering Hashmap *button_fds;
8ea48dfcd33e8db0c01bf8c57c3bbcfdc3c86d4bLennart Poettering
8ea48dfcd33e8db0c01bf8c57c3bbcfdc3c86d4bLennart Poettering /* If a shutdown was delayed due to a inhibitor this contains
8ea48dfcd33e8db0c01bf8c57c3bbcfdc3c86d4bLennart Poettering the unit name we are supposed to start after the delay is
8ea48dfcd33e8db0c01bf8c57c3bbcfdc3c86d4bLennart Poettering over */
755bde375f4db393ad06e73340bfcf4d0cf91bb2Lennart Poettering const char *delayed_unit;
8ea48dfcd33e8db0c01bf8c57c3bbcfdc3c86d4bLennart Poettering InhibitWhat delayed_what;
8ea48dfcd33e8db0c01bf8c57c3bbcfdc3c86d4bLennart Poettering usec_t delayed_timestamp;
8ea48dfcd33e8db0c01bf8c57c3bbcfdc3c86d4bLennart Poettering
cc56fafeebf814ef035e549115cf1850e6473fa5WaLyong Cho usec_t inhibit_delay_max;
7dbb1d08f66cd44b1296be3ee8e3629b989e19a8Zbigniew Jędrzejewski-Szmek
da927ba997d68401563b927f92e6e40e021a8e5cMichal Schmidt int idle_action_fd;
7dbb1d08f66cd44b1296be3ee8e3629b989e19a8Zbigniew Jędrzejewski-Szmek usec_t idle_action_usec;
7dbb1d08f66cd44b1296be3ee8e3629b989e19a8Zbigniew Jędrzejewski-Szmek usec_t idle_action_not_before_usec;
8ea48dfcd33e8db0c01bf8c57c3bbcfdc3c86d4bLennart Poettering HandleAction idle_action;
7dbb1d08f66cd44b1296be3ee8e3629b989e19a8Zbigniew Jędrzejewski-Szmek
8ea48dfcd33e8db0c01bf8c57c3bbcfdc3c86d4bLennart Poettering HandleAction handle_power_key;
8ea48dfcd33e8db0c01bf8c57c3bbcfdc3c86d4bLennart Poettering HandleAction handle_suspend_key;
7dbb1d08f66cd44b1296be3ee8e3629b989e19a8Zbigniew Jędrzejewski-Szmek HandleAction handle_hibernate_key;
7dbb1d08f66cd44b1296be3ee8e3629b989e19a8Zbigniew Jędrzejewski-Szmek HandleAction handle_lid_switch;
8ea48dfcd33e8db0c01bf8c57c3bbcfdc3c86d4bLennart Poettering
bool power_key_ignore_inhibited;
bool suspend_key_ignore_inhibited;
bool hibernate_key_ignore_inhibited;
bool lid_switch_ignore_inhibited;
};
enum {
FD_SEAT_UDEV,
FD_VCSA_UDEV,
FD_BUTTON_UDEV,
FD_CONSOLE,
FD_BUS,
FD_IDLE_ACTION,
FD_OTHER_BASE
};
Manager *manager_new(void);
void manager_free(Manager *m);
int manager_add_device(Manager *m, const char *sysfs, Device **_device);
int manager_add_button(Manager *m, const char *name, Button **_button);
int manager_add_seat(Manager *m, const char *id, Seat **_seat);
int manager_add_session(Manager *m, User *u, const char *id, Session **_session);
int manager_add_user(Manager *m, uid_t uid, gid_t gid, const char *name, User **_user);
int manager_add_user_by_name(Manager *m, const char *name, User **_user);
int manager_add_user_by_uid(Manager *m, uid_t uid, User **_user);
int manager_add_inhibitor(Manager *m, const char* id, Inhibitor **_inhibitor);
int manager_process_seat_device(Manager *m, struct udev_device *d);
int manager_process_button_device(Manager *m, struct udev_device *d);
int manager_dispatch_seat_udev(Manager *m);
int manager_dispatch_vcsa_udev(Manager *m);
int manager_dispatch_button_udev(Manager *m);
int manager_dispatch_console(Manager *m);
int manager_dispatch_idle_action(Manager *m);
int manager_enumerate_devices(Manager *m);
int manager_enumerate_buttons(Manager *m);
int manager_enumerate_seats(Manager *m);
int manager_enumerate_sessions(Manager *m);
int manager_enumerate_users(Manager *m);
int manager_enumerate_inhibitors(Manager *m);
int manager_startup(Manager *m);
int manager_run(Manager *m);
int manager_spawn_autovt(Manager *m, int vtnr);
void manager_cgroup_notify_empty(Manager *m, const char *cgroup);
void manager_gc(Manager *m, bool drop_not_started);
int manager_get_idle_hint(Manager *m, dual_timestamp *t);
int manager_get_user_by_cgroup(Manager *m, const char *cgroup, User **user);
int manager_get_session_by_cgroup(Manager *m, const char *cgroup, Session **session);
int manager_get_session_by_pid(Manager *m, pid_t pid, Session **session);
extern const DBusObjectPathVTable bus_manager_vtable;
DBusHandlerResult bus_message_filter(DBusConnection *c, DBusMessage *message, void *userdata);
int bus_manager_shutdown_or_sleep_now_or_later(Manager *m, const char *unit_name, InhibitWhat w, DBusError *error);
int manager_send_changed(Manager *manager, const char *properties);
int manager_dispatch_delayed(Manager *manager);
/* gperf lookup function */
const struct ConfigPerfItem* logind_gperf_lookup(const char *key, unsigned length);