From 75be5fd967f1329e0e61cdf31894d181b4097ab21dd7a557c8848d80c974275f Mon Sep 17 00:00:00 2001 From: Guido Berhoerster Date: Wed, 7 Aug 2013 21:20:36 +0000 Subject: [PATCH] Accepting request 186328 from home:gberh:branches:X11:xfce - add xfce4-session-systemd-suspend-hibernate-support.patch in order to add systemd suspend/hibernate support (bnc#9952) OBS-URL: https://build.opensuse.org/request/show/186328 OBS-URL: https://build.opensuse.org/package/show/X11:xfce/xfce4-session?expand=0&rev=112 --- ...on-systemd-suspend-hibernate-support.patch | 390 ++++++++++++++++++ xfce4-session.changes | 6 + xfce4-session.spec | 12 +- 3 files changed, 403 insertions(+), 5 deletions(-) create mode 100644 xfce4-session-systemd-suspend-hibernate-support.patch diff --git a/xfce4-session-systemd-suspend-hibernate-support.patch b/xfce4-session-systemd-suspend-hibernate-support.patch new file mode 100644 index 0000000..7c972cf --- /dev/null +++ b/xfce4-session-systemd-suspend-hibernate-support.patch @@ -0,0 +1,390 @@ +Index: xfce4-session-4.10.1/configure.ac +=================================================================== +--- xfce4-session-4.10.1.orig/configure.ac ++++ xfce4-session-4.10.1/configure.ac +@@ -103,7 +103,7 @@ XDT_CHECK_PACKAGE([XFCONF], [libxfconf-0 + + dnl Check for polkit / systemd integration + XDT_CHECK_OPTIONAL_PACKAGE([SYSTEMD], [polkit-gobject-1], [0.100], +- [systemd], [Systemd support (through polit)]) ++ [systemd], [Systemd support (through polkit)]) + + dnl Check for debugging support + XDT_FEATURE_DEBUG([xfsm_debug_default]) +@@ -207,10 +207,10 @@ echo " * Legacy session management: + else + echo " * Legacy session management: no" + fi +-if test x"$GNOME_KEYRING_FOUND" = x"yes"; then +-echo " * Gnome Keyring support: yes" ++if test x"$SYSTEMD_FOUND" = x"yes"; then ++echo " * Systemd support (through polkit): yes" + else +-echo " * Gnome Keyring support: no" ++echo " * Systemd support (through polkit): no" + fi + + echo +Index: xfce4-session-4.10.1/xfce4-session/Makefile.am +=================================================================== +--- xfce4-session-4.10.1.orig/xfce4-session/Makefile.am ++++ xfce4-session-4.10.1/xfce4-session/Makefile.am +@@ -38,6 +38,8 @@ xfce4_session_SOURCES = \ + xfsm-compat-gnome.h \ + xfsm-compat-kde.c \ + xfsm-compat-kde.h \ ++ xfsm-consolekit.c \ ++ xfsm-consolekit.h \ + xfsm-dns.c \ + xfsm-dns.h \ + xfsm-error.c \ +@@ -67,10 +69,6 @@ if HAVE_SYSTEMD + xfce4_session_SOURCES += \ + xfsm-systemd.c \ + xfsm-systemd.h +-else +-xfce4_session_SOURCES += \ +- xfsm-consolekit.c \ +- xfsm-consolekit.h + endif + + xfce4_session_CFLAGS = \ +Index: xfce4-session-4.10.1/xfce4-session/xfsm-systemd.c +=================================================================== +--- xfce4-session-4.10.1.orig/xfce4-session/xfsm-systemd.c ++++ xfce4-session-4.10.1/xfce4-session/xfsm-systemd.c +@@ -24,6 +24,7 @@ + #include + #include + ++#include + #include + + +@@ -33,8 +34,12 @@ + #define SYSTEMD_DBUS_INTERFACE "org.freedesktop.login1.Manager" + #define SYSTEMD_REBOOT_ACTION "Reboot" + #define SYSTEMD_POWEROFF_ACTION "PowerOff" ++#define SYSTEMD_SUSPEND_ACTION "Suspend" ++#define SYSTEMD_HIBERNATE_ACTION "Hibernate" + #define SYSTEMD_REBOOT_TEST "org.freedesktop.login1.reboot" + #define SYSTEMD_POWEROFF_TEST "org.freedesktop.login1.power-off" ++#define SYSTEMD_SUSPEND_TEST "org.freedesktop.login1.suspend" ++#define SYSTEMD_HIBERNATE_TEST "org.freedesktop.login1.hibernate" + + + +@@ -93,6 +98,22 @@ xfsm_systemd_finalize (GObject *object) + } + + ++ ++static gboolean ++xfsm_systemd_lock_screen (GError **error) ++{ ++ XfconfChannel *channel; ++ gboolean ret = TRUE; ++ ++ channel = xfsm_open_config (); ++ if (xfconf_channel_get_bool (channel, "/shutdown/LockScreen", FALSE)) ++ ret = g_spawn_command_line_async ("xflock4", error); ++ ++ return ret; ++} ++ ++ ++ + static gboolean + xfsm_systemd_can_method (XfsmSystemd *systemd, + gboolean *can_method, +@@ -205,6 +226,34 @@ xfsm_systemd_try_shutdown (XfsmSystemd + + + gboolean ++xfsm_systemd_try_suspend (XfsmSystemd *systemd, ++ GError **error) ++{ ++ if (!xfsm_systemd_lock_screen (error)) ++ return FALSE; ++ ++ return xfsm_systemd_try_method (systemd, ++ SYSTEMD_SUSPEND_ACTION, ++ error); ++} ++ ++ ++ ++gboolean ++xfsm_systemd_try_hibernate (XfsmSystemd *systemd, ++ GError **error) ++{ ++ if (!xfsm_systemd_lock_screen (error)) ++ return FALSE; ++ ++ return xfsm_systemd_try_method (systemd, ++ SYSTEMD_HIBERNATE_ACTION, ++ error); ++} ++ ++ ++ ++gboolean + xfsm_systemd_can_restart (XfsmSystemd *systemd, + gboolean *can_restart, + GError **error) +@@ -227,3 +276,39 @@ xfsm_systemd_can_shutdown (XfsmSystemd + SYSTEMD_POWEROFF_TEST, + error); + } ++ ++ ++ ++gboolean ++xfsm_systemd_can_suspend (XfsmSystemd *systemd, ++ gboolean *can_suspend, ++ gboolean *auth_suspend, ++ GError **error) ++{ ++ gboolean ret = FALSE; ++ ++ ret = xfsm_systemd_can_method (systemd, ++ can_suspend, ++ SYSTEMD_SUSPEND_TEST, ++ error); ++ *auth_suspend = *can_suspend; ++ return ret; ++} ++ ++ ++ ++gboolean ++xfsm_systemd_can_hibernate (XfsmSystemd *systemd, ++ gboolean *can_hibernate, ++ gboolean *auth_hibernate, ++ GError **error) ++{ ++ gboolean ret = FALSE; ++ ++ ret = xfsm_systemd_can_method (systemd, ++ can_hibernate, ++ SYSTEMD_HIBERNATE_TEST, ++ error); ++ *auth_hibernate = *can_hibernate; ++ return ret; ++} +Index: xfce4-session-4.10.1/xfce4-session/xfsm-systemd.h +=================================================================== +--- xfce4-session-4.10.1.orig/xfce4-session/xfsm-systemd.h ++++ xfce4-session-4.10.1/xfce4-session/xfsm-systemd.h +@@ -42,6 +42,12 @@ gboolean xfsm_systemd_try_restart ( + gboolean xfsm_systemd_try_shutdown (XfsmSystemd *systemd, + GError **error); + ++gboolean xfsm_systemd_try_suspend (XfsmSystemd *systemd, ++ GError **error); ++ ++gboolean xfsm_systemd_try_hibernate (XfsmSystemd *systemd, ++ GError **error); ++ + gboolean xfsm_systemd_can_restart (XfsmSystemd *systemd, + gboolean *can_restart, + GError **error); +@@ -50,6 +56,16 @@ gboolean xfsm_systemd_can_shutdown ( + gboolean *can_shutdown, + GError **error); + ++gboolean xfsm_systemd_can_suspend (XfsmSystemd *systemd, ++ gboolean *can_suspend, ++ gboolean *auth_suspend, ++ GError **error); ++ ++gboolean xfsm_systemd_can_hibernate (XfsmSystemd *systemd, ++ gboolean *can_hibernate, ++ gboolean *auth_hibernate, ++ GError **error); ++ + G_END_DECLS + + #endif /* __XFSM_SYSTEMD_H__ */ +Index: xfce4-session-4.10.1/xfce4-session/xfsm-shutdown.c +=================================================================== +--- xfce4-session-4.10.1.orig/xfce4-session/xfsm-shutdown.c ++++ xfce4-session-4.10.1/xfce4-session/xfsm-shutdown.c +@@ -63,15 +63,15 @@ + #include + #include + #include ++#include + #include + #include + #include + #include + + #ifdef HAVE_SYSTEMD ++#define LOGIND_RUNNING() (access ("/run/systemd/seats/", F_OK) >= 0) + #include +-#else +-#include + #endif + + static void xfsm_shutdown_finalize (GObject *object); +@@ -98,9 +98,8 @@ struct _XfsmShutdown + + #ifdef HAVE_SYSTEMD + XfsmSystemd *systemd; +-#else +- XfsmConsolekit *consolekit; + #endif ++ XfsmConsolekit *consolekit; + XfsmUPower *upower; + + /* kiosk settings */ +@@ -139,10 +138,14 @@ xfsm_shutdown_init (XfsmShutdown *shutdo + XfceKiosk *kiosk; + + #ifdef HAVE_SYSTEMD +- shutdown->systemd = xfsm_systemd_get (); +-#else +- shutdown->consolekit = xfsm_consolekit_get (); ++ shutdown->consolekit = NULL; ++ shutdown->systemd = NULL; ++ if (LOGIND_RUNNING()) ++ shutdown->systemd = xfsm_systemd_get (); ++ else + #endif ++ shutdown->consolekit = xfsm_consolekit_get (); ++ + shutdown->upower = xfsm_upower_get (); + shutdown->helper_state = SUDO_NOT_INITIAZED; + shutdown->helper_require_password = FALSE; +@@ -162,10 +165,11 @@ xfsm_shutdown_finalize (GObject *object) + XfsmShutdown *shutdown = XFSM_SHUTDOWN (object); + + #ifdef HAVE_SYSTEMD +- g_object_unref (G_OBJECT (shutdown->systemd)); +-#else +- g_object_unref (G_OBJECT (shutdown->consolekit)); ++ if (shutdown->systemd != NULL) ++ g_object_unref (G_OBJECT (shutdown->systemd)); + #endif ++ if (shutdown->consolekit != NULL) ++ g_object_unref (G_OBJECT (shutdown->consolekit)); + g_object_unref (G_OBJECT (shutdown->upower)); + + /* close down helper */ +@@ -657,10 +661,11 @@ xfsm_shutdown_try_restart (XfsmShutdown + return xfsm_shutdown_sudo_try_action (shutdown, XFSM_SHUTDOWN_RESTART, error); + else + #ifdef HAVE_SYSTEMD +- return xfsm_systemd_try_restart (shutdown->systemd, error); +-#else +- return xfsm_consolekit_try_restart (shutdown->consolekit, error); ++ if (LOGIND_RUNNING()) ++ return xfsm_systemd_try_restart (shutdown->systemd, error); ++ else + #endif ++ return xfsm_consolekit_try_restart (shutdown->consolekit, error); + } + + +@@ -678,10 +683,11 @@ xfsm_shutdown_try_shutdown (XfsmShutdown + return xfsm_shutdown_sudo_try_action (shutdown, XFSM_SHUTDOWN_SHUTDOWN, error); + else + #ifdef HAVE_SYSTEMD +- return xfsm_systemd_try_shutdown (shutdown->systemd, error); +-#else +- return xfsm_consolekit_try_shutdown (shutdown->consolekit, error); ++ if (LOGIND_RUNNING()) ++ return xfsm_systemd_try_shutdown (shutdown->systemd, error); ++ else + #endif ++ return xfsm_consolekit_try_shutdown (shutdown->consolekit, error); + } + + +@@ -692,6 +698,11 @@ xfsm_shutdown_try_suspend (XfsmShutdown + { + g_return_val_if_fail (XFSM_IS_SHUTDOWN (shutdown), FALSE); + ++#ifdef HAVE_SYSTEMD ++ if (LOGIND_RUNNING()) ++ return xfsm_systemd_try_suspend (shutdown->systemd, error); ++ else ++#endif + return xfsm_upower_try_suspend (shutdown->upower, error); + } + +@@ -703,6 +714,11 @@ xfsm_shutdown_try_hibernate (XfsmShutdow + { + g_return_val_if_fail (XFSM_IS_SHUTDOWN (shutdown), FALSE); + ++#ifdef HAVE_SYSTEMD ++ if (LOGIND_RUNNING()) ++ return xfsm_systemd_try_hibernate (shutdown->systemd, error); ++ else ++#endif + return xfsm_upower_try_hibernate (shutdown->upower, error); + } + +@@ -722,10 +738,14 @@ xfsm_shutdown_can_restart (XfsmShutdown + } + + #ifdef HAVE_SYSTEMD +- if (xfsm_systemd_can_restart (shutdown->systemd, can_restart, error)) +-#else +- if (xfsm_consolekit_can_restart (shutdown->consolekit, can_restart, error)) ++ if (LOGIND_RUNNING()) ++ { ++ if (xfsm_systemd_can_restart (shutdown->systemd, can_restart, error)) ++ return TRUE; ++ } ++ else + #endif ++ if (xfsm_consolekit_can_restart (shutdown->consolekit, can_restart, error)) + return TRUE; + + if (xfsm_shutdown_sudo_init (shutdown, error)) +@@ -753,10 +773,14 @@ xfsm_shutdown_can_shutdown (XfsmShutdown + } + + #ifdef HAVE_SYSTEMD +- if (xfsm_systemd_can_shutdown (shutdown->systemd, can_shutdown, error)) +-#else +- if (xfsm_consolekit_can_shutdown (shutdown->consolekit, can_shutdown, error)) ++ if (LOGIND_RUNNING()) ++ { ++ if (xfsm_systemd_can_shutdown (shutdown->systemd, can_shutdown, error)) ++ return TRUE; ++ } ++ else + #endif ++ if (xfsm_consolekit_can_shutdown (shutdown->consolekit, can_shutdown, error)) + return TRUE; + + if (xfsm_shutdown_sudo_init (shutdown, error)) +@@ -784,6 +808,12 @@ xfsm_shutdown_can_suspend (XfsmShutdown + return TRUE; + } + ++#ifdef HAVE_SYSTEMD ++ if (LOGIND_RUNNING()) ++ return xfsm_systemd_can_suspend (shutdown->systemd, can_suspend, ++ auth_suspend, error); ++ else ++#endif + return xfsm_upower_can_suspend (shutdown->upower, can_suspend, + auth_suspend, error); + } +@@ -804,6 +834,12 @@ xfsm_shutdown_can_hibernate (XfsmShutdow + return TRUE; + } + ++#ifdef HAVE_SYSTEMD ++ if (LOGIND_RUNNING()) ++ return xfsm_systemd_can_hibernate (shutdown->systemd, can_hibernate, ++ auth_hibernate, error); ++ else ++#endif + return xfsm_upower_can_hibernate (shutdown->upower, can_hibernate, + auth_hibernate, error); + } diff --git a/xfce4-session.changes b/xfce4-session.changes index 8779af4..45e901c 100644 --- a/xfce4-session.changes +++ b/xfce4-session.changes @@ -1,3 +1,9 @@ +------------------------------------------------------------------- +Tue Aug 6 17:43:56 UTC 2013 - gber@opensuse.org + +- add xfce4-session-systemd-suspend-hibernate-support.patch in + order to add systemd suspend/hibernate support (bnc#9952) + ------------------------------------------------------------------- Fri Jun 7 09:28:05 UTC 2013 - gber@opensuse.org diff --git a/xfce4-session.spec b/xfce4-session.spec index 283c20d..0d7ff39 100644 --- a/xfce4-session.spec +++ b/xfce4-session.spec @@ -30,11 +30,12 @@ Source0: http://archive.xfce.org/src/xfce/xfce4-session/4.10/%{name}-%{ve Patch0: xfce4-session-simple-splash-remove-shadows.patch # PATCH-FIX-OPENSUSE xfce4-session-adapt-session-scripts.patch bnc#789057 gber@opensuse.org -- Adapt upstream sessions script to openSUSE Patch1: xfce4-session-adapt-session-scripts.patch -%if 0%{?suse_version} > 1210 +# PATCH-FIX-UPSTREAM xfce4-session-systemd-suspend-hibernate-support.patch bnc#9952 gber@opensuse.org -- Add systemd suspend/hibernate support +Patch2: xfce4-session-systemd-suspend-hibernate-support.patch BuildRequires: iceauth -%endif BuildRequires: intltool BuildRequires: update-desktop-files +BuildRequires: xfce4-dev-tools BuildRequires: xorg-x11 BuildRequires: pkgconfig(dbus-1) BuildRequires: pkgconfig(dbus-glib-1) @@ -59,11 +60,10 @@ Obsoletes: xfce-utils-lang <= 4.8.3 Provides: xfce4-session-doc = %{version} Obsoletes: xfce4-session-doc <= 4.8.3 Requires: %{name}-branding = %{version} -%if 0%{?suse_version} < 1230 -Requires: ConsoleKit-x11 -%endif %if 0%{?suse_version} >= 1230 Requires: systemd +%else +Requires: ConsoleKit-x11 %endif Requires: xfce4-settings Requires: xfconf @@ -117,8 +117,10 @@ This package provides the upstream look and feel for the Xfce Session Manager. %setup -q %patch0 -p1 %patch1 -p1 +%patch2 -p1 %build +xdt-autogen %configure \ --disable-static make %{?_smp_mflags} V=1