Gentoo Websites Logo
Go to: Gentoo Home Documentation Forums Lists Bugs Planet Store Wiki Get Gentoo!
View | Details | Raw Unified | Return to bug 681344 | Differences between
and this patch

Collapse All | Expand All

(-)a/Makefile.am (+1 lines)
Lines 6-11 ACLOCAL_AMFLAGS = -I m4 ${ACLOCAL_FLAGS} Link Here
6
NULL =
6
NULL =
7
7
8
DISTCHECK_CONFIGURE_FLAGS = \
8
DISTCHECK_CONFIGURE_FLAGS = \
9
	--without-elogind \
9
	--without-systemd
10
	--without-systemd
10
11
11
SUBDIRS =			\
12
SUBDIRS =			\
(-)a/configure.ac (+32 lines)
Lines 982-987 fi Link Here
982
AC_SUBST(SYSTEMD_CFLAGS)
982
AC_SUBST(SYSTEMD_CFLAGS)
983
AC_SUBST(SYSTEMD_LIBS)
983
AC_SUBST(SYSTEMD_LIBS)
984
984
985
dnl ---------------------------------------------------------------------------
986
dnl elogind
987
dnl ---------------------------------------------------------------------------
988
989
AC_ARG_WITH(elogind,
990
            AS_HELP_STRING([--with-elogind],
991
            [Add elogind support]),
992
            [with_elogind=$withval], [with_elogind=auto])
993
994
PKG_CHECK_MODULES(ELOGIND, [libelogind], [have_elogind=yes], [have_elogind=no])
995
996
if test "x$with_elogind" = "xauto" ; then
997
        if test x$have_elogind = xno ; then
998
                use_elogind=no
999
        else
1000
                use_elogind=yes
1001
        fi
1002
else
1003
	use_elogind=$with_elogind
1004
fi
1005
1006
if test "x$use_elogind" = "xyes"; then
1007
        if test "x$have_elogind" = "xno"; then
1008
                AC_MSG_ERROR([Elogind support explicitly required, but elogind not found])
1009
        fi
1010
1011
        AC_DEFINE(WITH_ELOGIND, 1, [elogind support])
1012
fi
1013
AC_SUBST(ELOGIND_CFLAGS)
1014
AC_SUBST(ELOGIND_LIBS)
1015
985
dnl ---------------------------------------------------------------------------
1016
dnl ---------------------------------------------------------------------------
986
dnl libxfcekbd
1017
dnl libxfcekbd
987
dnl ---------------------------------------------------------------------------
1018
dnl ---------------------------------------------------------------------------
Lines 1173-1178 echo " Link Here
1173
        Screen locking enabled:   ${enable_locking}
1204
        Screen locking enabled:   ${enable_locking}
1174
        Show keyboard indicator:  ${with_kbd_layout_indicator}
1205
        Show keyboard indicator:  ${with_kbd_layout_indicator}
1175
        systemd support:          ${use_systemd}
1206
        systemd support:          ${use_systemd}
1207
        elogind support:          ${use_elogind}
1176
        ConsoleKit support:       ${use_console_kit}
1208
        ConsoleKit support:       ${use_console_kit}
1177
        PAM support:              ${have_pam}
1209
        PAM support:              ${have_pam}
1178
        PAM auth type:            ${PAM_AUTH_TYPE}
1210
        PAM auth type:            ${PAM_AUTH_TYPE}
(-)a/src/Makefile.am (+2 lines)
Lines 32-37 AM_CPPFLAGS = \ Link Here
32
	$(LIBXFCEKBDUI_CFLAGS)					\
32
	$(LIBXFCEKBDUI_CFLAGS)					\
33
	$(LIBXKLAVIER_CFLAGS)				\
33
	$(LIBXKLAVIER_CFLAGS)				\
34
	$(SYSTEMD_CFLAGS)					\
34
	$(SYSTEMD_CFLAGS)					\
35
	$(ELOGIND_CFLAGS)					\
35
	$(NULL)
36
	$(NULL)
36
37
37
bin_PROGRAMS = \
38
bin_PROGRAMS = \
Lines 248-253 xfce4_screensaver_LDADD = \ Link Here
248
	$(XFCE_SCREENSAVER_LIBS)	\
249
	$(XFCE_SCREENSAVER_LIBS)	\
249
	$(SAVER_LIBS)			\
250
	$(SAVER_LIBS)			\
250
	$(SYSTEMD_LIBS)			\
251
	$(SYSTEMD_LIBS)			\
252
	$(ELOGIND_LIBS)			\
251
	$(NULL)
253
	$(NULL)
252
254
253
xfce4_screensaver_LDFLAGS = -export-dynamic
255
xfce4_screensaver_LDFLAGS = -export-dynamic
(-)a/src/gs-listener-dbus.c (-31 / +33 lines)
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
- 

Return to bug 681344