--- a/config.h.in 2017-02-14 09:53:41.124245372 +0100 +++ b/config.h.in 2017-02-14 09:59:04.886255092 +0100 @@ -207,6 +207,9 @@ /* Define to 1 if libsystemd-login is available */ #undef SESSION_TRACKING_SYSTEMD +/* Define to 1 if libelogin is available */ +#undef SESSION_TRACKING_ELOGIND + /* The size of `dev_t', as computed by sizeof. */ #undef SIZEOF_DEV_T @@ -219,6 +222,9 @@ /* Define to 1 to use systemd suspend api */ #undef SUSPEND_RESUME_SYSTEMD +/* Define to 1 to use elogind suspend api */ +#undef SUSPEND_RESUME_ELOGIND + /* Define to 1 to use UPower suspend api */ #undef SUSPEND_RESUME_UPOWER --- a/configure.ac 2017-02-14 09:28:51.529200651 +0100 +++ b/configure.ac 2017-02-14 09:48:25.376235892 +0100 @@ -426,14 +426,15 @@ [Support systemd session tracking])) AC_ARG_WITH(consolekit, AS_HELP_STRING([--with-consolekit=yes|no], [Support consolekit session tracking])) -AC_ARG_WITH(session-tracking, AS_HELP_STRING([--with-session-tracking=systemd|consolekit|no], +AC_ARG_WITH(session-tracking, AS_HELP_STRING([--with-session-tracking=systemd|elogind|consolekit|no], [Compatibility option to choose one session tracking module])) # backwards compatibility -AS_IF([test "$with_session_tracking" = "ck"], [use_consolekit="yes" use_systemd_logind="no"]) -AS_IF([test "$with_session_tracking" = "consolekit"], [use_consolekit="yes" use_systemd_logind="no"]) -AS_IF([test "$with_session_tracking" = "systemd"], [use_consolekit="no" use_systemd_logind="yes"]) -AS_IF([test "$with_session_tracking" = "no"], [use_consolekit="no" use_systemd_logind="no"]) -AS_IF([test "$with_session_tracking" = "none"], [use_consolekit="no" use_systemd_logind="no"]) +AS_IF([test "$with_session_tracking" = "ck"], [use_consolekit="yes" use_systemd_logind="no" use_elogind="no"]) +AS_IF([test "$with_session_tracking" = "consolekit"], [use_consolekit="yes" use_systemd_logind="no" use_elogind="no"]) +AS_IF([test "$with_session_tracking" = "systemd"], [use_consolekit="no" use_systemd_logind="yes" use_elogind="no"]) +AS_IF([test "$with_session_tracking" = "elogind"], [use_consolekit="no" use_systemd_logind="no" use_elogind="yes"]) +AS_IF([test "$with_session_tracking" = "no"], [use_consolekit="no" use_systemd_logind="no" use_elogind="no"]) +AS_IF([test "$with_session_tracking" = "none"], [use_consolekit="no" use_systemd_logind="no" use_elogind="no"]) # current options AS_IF([test -n "$with_systemd_logind" ], [use_systemd_logind="$with_systemd_logind"]) AS_IF([test -n "$with_consolekit" ], [use_consolekit="$with_consolekit"]) @@ -454,6 +455,20 @@ AC_DEFINE([SESSION_TRACKING_SYSTEMD], 1, [Define to 1 if libsystemd-login is available]) session_tracking="$session_tracking, systemd-logind" fi + +if test "$use_elogind" = "yes" -o "$use_elogind" = "auto"; then + PKG_CHECK_MODULES(SYSTEMD_LOGIN, [libelogind], [have_elogind=yes], [PKG_CHECK_MODULES(SYSTEMD_LOGIN, [libelogind], [have_elogind=yes], [have_elogind=no])]) +else + have_elogind=no +fi +if test "$use_elogind" = "yes" -a "$have_elogind" = "no"; then + AC_MSG_ERROR([You must have libelogind installed to build with elogind support.]) +fi +if test "$have_elogind" = "yes"; then + AC_DEFINE([SESSION_TRACKING_ELOGIND], 1, [Define to 1 if libelogin is available]) + session_tracking="$session_tracking, elogind" +fi + if test "$use_consolekit" = "yes"; then AC_DEFINE([SESSION_TRACKING_CONSOLEKIT], 1, [Define to 1 if ConsoleKit is available]) AC_DEFINE([CKDB_PATH], "/var/run/ConsoleKit/database", [Path to ConsoleKit database]) @@ -461,7 +476,7 @@ fi session_tracking="$(printf '%s' "${session_tracking}" | sed 's/^, //')" -AC_ARG_WITH(suspend-resume, AS_HELP_STRING([--with-suspend-resume=upower|systemd|consolekit], [Build NetworkManager with specific suspend/resume support])) +AC_ARG_WITH(suspend-resume, AS_HELP_STRING([--with-suspend-resume=upower|systemd|elogind|consolekit], [Build NetworkManager with specific suspend/resume support])) if test "z$with_suspend_resume" = "z"; then PKG_CHECK_EXISTS([libsystemd >= 209], [have_systemd_inhibit=yes], [PKG_CHECK_EXISTS([libsystemd-login >= 183], [have_systemd_inhibit=yes], [have_systemd_inhibit=no])]) @@ -469,6 +484,12 @@ # Use systemd if it's new enough with_suspend_resume="systemd" else + PKG_CHECK_EXISTS([libelogind >= 219], [have_elogind_inhibit=yes], + [PKG_CHECK_EXISTS([libelogind >= 219], [have_elogind_inhibit=yes], [have_elogind_inhibit=no])]) + if test "z${have_elogind_inhibit}" = "zyes"; then + # Use elogind if it's new enough + with_suspend_resume="elogind" + else if test "$use_consolekit" = "yes"; then # Use consolekit suspend if session tracking is consolekit with_suspend_resume="consolekit" @@ -478,6 +499,7 @@ fi fi fi +fi case $with_suspend_resume in upower) @@ -488,11 +510,16 @@ [PKG_CHECK_MODULES(SYSTEMD_INHIBIT, [libsystemd-login >= 183])]) AC_DEFINE([SUSPEND_RESUME_SYSTEMD], 1, [Define to 1 to use systemd suspend api]) ;; + elogind) + PKG_CHECK_MODULES(ELOGIND_INHIBIT, [libelogind >= 219],, + [PKG_CHECK_MODULES(ELOGIND_INHIBIT, [libelogind >= 219])]) + AC_DEFINE([SUSPEND_RESUME_ELOGIND], 1, [Define to 1 to use elogind suspend api]) + ;; consolekit) AC_DEFINE([SUSPEND_RESUME_CONSOLEKIT], 1, [Define to 1 to use ConsoleKit2 suspend api]) ;; *) - AC_MSG_ERROR(--with-suspend-resume must be one of [upower, systemd, consolekit]) + AC_MSG_ERROR(--with-suspend-resume must be one of [upower, systemd, elogind, consolekit]) ;; esac --- a/src/nm-sleep-monitor.c 2017-02-14 09:57:16.963251852 +0100 +++ b/src/nm-sleep-monitor.c 2017-02-14 09:58:01.855253200 +0100 @@ -38,7 +38,7 @@ #define USE_UPOWER 1 #define _NMLOG_PREFIX_NAME "sleep-monitor-up" -#elif defined (SUSPEND_RESUME_SYSTEMD) +#elif defined (SUSPEND_RESUME_SYSTEMD) || defined (SUSPEND_RESUME_ELOGIND) #define SUSPEND_DBUS_NAME "org.freedesktop.login1" #define SUSPEND_DBUS_PATH "/org/freedesktop/login1" @@ -60,7 +60,7 @@ #else -#error define one of SUSPEND_RESUME_SYSTEMD, SUSPEND_RESUME_CONSOLEKIT, or SUSPEND_RESUME_UPOWER +#error define one of SUSPEND_RESUME_SYSTEMD, SUSPEND_RESUME_ELOGIND, SUSPEND_RESUME_CONSOLEKIT, or SUSPEND_RESUME_UPOWER #endif --- a/src/nm-session-monitor.c 2017-02-14 09:49:08.645237191 +0100 +++ b/src/nm-session-monitor.c 2017-02-14 09:56:48.680251003 +0100 @@ -32,6 +32,11 @@ #ifdef SESSION_TRACKING_SYSTEMD #include #endif +#ifdef SESSION_TRACKING_ELOGIND +#include +/* Re-Use SESSION_TRACKING_SYSTEMD as elogind substitutes systemd-login */ +#define SESSION_TRACKING_SYSTEMD 1 +#endif /********************************************************************/ @@ -103,7 +108,11 @@ status = sd_uid_get_sessions (uid, active, NULL); if (status < 0) +#ifdef SESSION_TRACKING_ELOGIND + _LOGE ("failed to get elogind sessions for uid %d: %d", uid, status); +#else _LOGE ("failed to get systemd sessions for uid %d: %d", uid, status); +#endif /* SESSION_TRACKING_ELOGIND */ return status > 0; } @@ -130,7 +139,11 @@ return; if ((status = sd_login_monitor_new (NULL, &monitor->sd.monitor)) < 0) { +#ifdef SESSION_TRACKING_ELOGIND + _LOGE ("failed to create elogind monitor: %d", status); +#else _LOGE ("failed to create systemd login monitor: %d", status); +#endif /* SESSION_TRACKING_ELOGIND */ return; } @@ -375,7 +388,11 @@ { #ifdef SESSION_TRACKING_SYSTEMD st_sd_init (monitor); +#ifdef SESSION_TRACKING_ELOGIND + _LOGD ("using elogind session tracking"); +#else _LOGD ("using systemd-logind session tracking"); +#endif /* SESSION_TRACKING_ELOGIND */ #endif #ifdef SESSION_TRACKING_CONSOLEKIT