Lines 38-43
Link Here
|
38 |
#ifdef WITH_SYSTEMD |
38 |
#ifdef WITH_SYSTEMD |
39 |
#include <systemd/sd-login.h> |
39 |
#include <systemd/sd-login.h> |
40 |
#endif |
40 |
#endif |
|
|
41 |
#ifdef WITH_ELOGIND |
42 |
#include <elogind/sd-login.h> |
43 |
#endif |
41 |
|
44 |
|
42 |
#include "gs-listener-dbus.h" |
45 |
#include "gs-listener-dbus.h" |
43 |
#include "gs-marshal.h" |
46 |
#include "gs-marshal.h" |
Lines 61-72
static DBusHandlerResult gs_listener_message_handler (DBusConnection *connec
Link Here
|
61 |
#define HAL_DEVICE_INTERFACE "org.freedesktop.Hal.Device" |
64 |
#define HAL_DEVICE_INTERFACE "org.freedesktop.Hal.Device" |
62 |
|
65 |
|
63 |
/* systemd logind */ |
66 |
/* systemd logind */ |
64 |
#define SYSTEMD_LOGIND_SERVICE "org.freedesktop.login1" |
67 |
#define LOGIND_SERVICE "org.freedesktop.login1" |
65 |
#define SYSTEMD_LOGIND_PATH "/org/freedesktop/login1" |
68 |
#define LOGIND_PATH "/org/freedesktop/login1" |
66 |
#define SYSTEMD_LOGIND_INTERFACE "org.freedesktop.login1.Manager" |
69 |
#define LOGIND_INTERFACE "org.freedesktop.login1.Manager" |
67 |
|
70 |
|
68 |
#define SYSTEMD_LOGIND_SESSION_INTERFACE "org.freedesktop.login1.Session" |
71 |
#define LOGIND_SESSION_INTERFACE "org.freedesktop.login1.Session" |
69 |
#define SYSTEMD_LOGIND_SESSION_PATH "/org/freedesktop/login1/session" |
72 |
#define LOGIND_SESSION_PATH "/org/freedesktop/login1/session" |
70 |
|
73 |
|
71 |
/* consolekit */ |
74 |
/* consolekit */ |
72 |
#define CK_NAME "org.freedesktop.ConsoleKit" |
75 |
#define CK_NAME "org.freedesktop.ConsoleKit" |
Lines 95-102
struct GSListenerPrivate {
Link Here
|
95 |
time_t session_idle_start; |
98 |
time_t session_idle_start; |
96 |
char *session_id; |
99 |
char *session_id; |
97 |
|
100 |
|
98 |
#ifdef WITH_SYSTEMD |
101 |
#if defined(WITH_SYSTEMD) || defined(WITH_ELOGIND) |
99 |
gboolean have_systemd; |
102 |
gboolean have_logind; |
100 |
#endif |
103 |
#endif |
101 |
|
104 |
|
102 |
guint32 ck_throttle_cookie; |
105 |
guint32 ck_throttle_cookie; |
Lines 1393-1399
_listener_message_path_is_our_session (GSListener *listener,
Link Here
|
1393 |
return FALSE; |
1396 |
return FALSE; |
1394 |
} |
1397 |
} |
1395 |
|
1398 |
|
1396 |
#ifdef WITH_SYSTEMD |
1399 |
#if defined(WITH_SYSTEMD) || defined(WITH_ELOGIND) |
1397 |
static gboolean |
1400 |
static gboolean |
1398 |
properties_changed_match (DBusMessage *message, |
1401 |
properties_changed_match (DBusMessage *message, |
1399 |
const char *property) { |
1402 |
const char *property) { |
Lines 1480-1502
listener_dbus_handle_system_message (DBusConnection *connection,
Link Here
|
1480 |
dbus_message_get_destination (message)); |
1483 |
dbus_message_get_destination (message)); |
1481 |
#endif |
1484 |
#endif |
1482 |
|
1485 |
|
1483 |
#ifdef WITH_SYSTEMD |
1486 |
#if defined(WITH_SYSTEMD) || defined(WITH_ELOGIND) |
1484 |
if (listener->priv->have_systemd) { |
1487 |
if (listener->priv->have_logind) { |
1485 |
if (dbus_message_is_signal (message, SYSTEMD_LOGIND_SESSION_INTERFACE, "Unlock")) { |
1488 |
if (dbus_message_is_signal (message, LOGIND_SESSION_INTERFACE, "Unlock")) { |
1486 |
if (_listener_message_path_is_our_session (listener, message)) { |
1489 |
if (_listener_message_path_is_our_session (listener, message)) { |
1487 |
gs_debug ("Systemd requested session unlock"); |
1490 |
gs_debug ("Systemd requested session unlock"); |
1488 |
gs_listener_set_active (listener, FALSE); |
1491 |
gs_listener_set_active (listener, FALSE); |
1489 |
} |
1492 |
} |
1490 |
|
1493 |
|
1491 |
return DBUS_HANDLER_RESULT_HANDLED; |
1494 |
return DBUS_HANDLER_RESULT_HANDLED; |
1492 |
} else if (dbus_message_is_signal (message, SYSTEMD_LOGIND_SESSION_INTERFACE, "Lock")) { |
1495 |
} else if (dbus_message_is_signal (message, LOGIND_SESSION_INTERFACE, "Lock")) { |
1493 |
if (_listener_message_path_is_our_session (listener, message)) { |
1496 |
if (_listener_message_path_is_our_session (listener, message)) { |
1494 |
gs_debug ("Systemd requested session lock"); |
1497 |
gs_debug ("Systemd requested session lock"); |
1495 |
g_signal_emit (listener, signals[LOCK], 0); |
1498 |
g_signal_emit (listener, signals[LOCK], 0); |
1496 |
} |
1499 |
} |
1497 |
|
1500 |
|
1498 |
return DBUS_HANDLER_RESULT_HANDLED; |
1501 |
return DBUS_HANDLER_RESULT_HANDLED; |
1499 |
} else if (dbus_message_is_signal (message, SYSTEMD_LOGIND_INTERFACE, "PrepareForSleep")) { |
1502 |
} else if (dbus_message_is_signal (message, LOGIND_INTERFACE, "PrepareForSleep")) { |
1500 |
gboolean active = 0; |
1503 |
gboolean active = 0; |
1501 |
DBusError error; |
1504 |
DBusError error; |
1502 |
|
1505 |
|
Lines 2059-2087
gs_listener_acquire (GSListener *listener,
Link Here
|
2059 |
listener_dbus_system_filter_function, |
2062 |
listener_dbus_system_filter_function, |
2060 |
listener, |
2063 |
listener, |
2061 |
NULL); |
2064 |
NULL); |
2062 |
#ifdef WITH_SYSTEMD |
2065 |
#if defined(WITH_SYSTEMD) || defined(WITH_ELOGIND) |
2063 |
if (listener->priv->have_systemd) { |
2066 |
if (listener->priv->have_logind) { |
2064 |
dbus_bus_add_match (listener->priv->system_connection, |
2067 |
dbus_bus_add_match (listener->priv->system_connection, |
2065 |
"type='signal'" |
2068 |
"type='signal'" |
2066 |
",sender='"SYSTEMD_LOGIND_SERVICE"'" |
2069 |
",sender='"LOGIND_SERVICE"'" |
2067 |
",interface='"SYSTEMD_LOGIND_SESSION_INTERFACE"'" |
2070 |
",interface='"LOGIND_SESSION_INTERFACE"'" |
2068 |
",member='Unlock'", |
2071 |
",member='Unlock'", |
2069 |
NULL); |
2072 |
NULL); |
2070 |
dbus_bus_add_match (listener->priv->system_connection, |
2073 |
dbus_bus_add_match (listener->priv->system_connection, |
2071 |
"type='signal'" |
2074 |
"type='signal'" |
2072 |
",sender='"SYSTEMD_LOGIND_SERVICE"'" |
2075 |
",sender='"LOGIND_SERVICE"'" |
2073 |
",interface='"SYSTEMD_LOGIND_SESSION_INTERFACE"'" |
2076 |
",interface='"LOGIND_SESSION_INTERFACE"'" |
2074 |
",member='Lock'", |
2077 |
",member='Lock'", |
2075 |
NULL); |
2078 |
NULL); |
2076 |
dbus_bus_add_match (listener->priv->system_connection, |
2079 |
dbus_bus_add_match (listener->priv->system_connection, |
2077 |
"type='signal'" |
2080 |
"type='signal'" |
2078 |
",sender='"SYSTEMD_LOGIND_SERVICE"'" |
2081 |
",sender='"LOGIND_SERVICE"'" |
2079 |
",interface='"SYSTEMD_LOGIND_INTERFACE"'" |
2082 |
",interface='"LOGIND_INTERFACE"'" |
2080 |
",member='PrepareForSleep'", |
2083 |
",member='PrepareForSleep'", |
2081 |
NULL); |
2084 |
NULL); |
2082 |
dbus_bus_add_match (listener->priv->system_connection, |
2085 |
dbus_bus_add_match (listener->priv->system_connection, |
2083 |
"type='signal'" |
2086 |
"type='signal'" |
2084 |
",sender='"SYSTEMD_LOGIND_SERVICE"'" |
2087 |
",sender='"LOGIND_SERVICE"'" |
2085 |
",interface='"DBUS_INTERFACE_PROPERTIES"'" |
2088 |
",interface='"DBUS_INTERFACE_PROPERTIES"'" |
2086 |
",member='PropertiesChanged'", |
2089 |
",member='PropertiesChanged'", |
2087 |
NULL); |
2090 |
NULL); |
Lines 2134-2147
query_session_id (GSListener *listener) {
Link Here
|
2134 |
|
2137 |
|
2135 |
dbus_error_init (&error); |
2138 |
dbus_error_init (&error); |
2136 |
|
2139 |
|
2137 |
#ifdef WITH_SYSTEMD |
2140 |
#if defined(WITH_SYSTEMD) || defined(WITH_ELOGIND) |
2138 |
if (listener->priv->have_systemd) { |
2141 |
if (listener->priv->have_logind) { |
2139 |
dbus_uint32_t pid = getpid(); |
2142 |
dbus_uint32_t pid = getpid(); |
2140 |
|
2143 |
|
2141 |
message = dbus_message_new_method_call (SYSTEMD_LOGIND_SERVICE, |
2144 |
message = dbus_message_new_method_call (LOGIND_SERVICE, |
2142 |
SYSTEMD_LOGIND_PATH, |
2145 |
LOGIND_PATH, |
2143 |
SYSTEMD_LOGIND_INTERFACE, |
2146 |
LOGIND_INTERFACE, |
2144 |
"GetSessionByPID"); |
2147 |
"GetSessionByPID"); |
2145 |
if (message == NULL) { |
2148 |
if (message == NULL) { |
2146 |
gs_debug ("Couldn't allocate the dbus message"); |
2149 |
gs_debug ("Couldn't allocate the dbus message"); |
2147 |
return NULL; |
2150 |
return NULL; |
Lines 2216-2224
static void
Link Here
|
2216 |
gs_listener_init (GSListener *listener) { |
2219 |
gs_listener_init (GSListener *listener) { |
2217 |
listener->priv = gs_listener_get_instance_private (listener); |
2220 |
listener->priv = gs_listener_get_instance_private (listener); |
2218 |
|
2221 |
|
2219 |
#ifdef WITH_SYSTEMD |
2222 |
#if defined(WITH_SYSTEMD) || defined(WITH_ELOGIND) |
2220 |
/* check if logind is running */ |
2223 |
/* check if logind is running */ |
2221 |
listener->priv->have_systemd = (access("/run/systemd/seats/", F_OK) >= 0); |
2224 |
listener->priv->have_logind = (access("/run/systemd/seats/", F_OK) >= 0); |
2222 |
#endif |
2225 |
#endif |
2223 |
|
2226 |
|
2224 |
gs_listener_dbus_init (listener); |
2227 |
gs_listener_dbus_init (listener); |
2225 |
- |
|
|