[xfce4-session] Add patch for systemd-logind support.
Kevin Fenzi
kevin at fedoraproject.org
Sat Feb 23 00:39:54 UTC 2013
commit 809994b61e66d6434192751fad7813e359796229
Author: Kevin Fenzi <kevin at scrye.com>
Date: Fri Feb 22 17:39:51 2013 -0700
Add patch for systemd-logind support.
xfce4-session-4.10.0-add-systemd-support.patch | 362 ++++++++++++++++++++++++
xfce4-session.spec | 18 +-
2 files changed, 378 insertions(+), 2 deletions(-)
---
diff --git a/xfce4-session-4.10.0-add-systemd-support.patch b/xfce4-session-4.10.0-add-systemd-support.patch
new file mode 100644
index 0000000..797a0de
--- /dev/null
+++ b/xfce4-session-4.10.0-add-systemd-support.patch
@@ -0,0 +1,362 @@
+diff -Nur xfce4-session-4.10.0.orig/configure.in xfce4-session-4.10.0/configure.in
+--- xfce4-session-4.10.0.orig/configure.in 2012-04-28 14:43:29.000000000 -0600
++++ xfce4-session-4.10.0/configure.in 2013-02-22 16:41:34.796387201 -0700
+@@ -101,6 +101,33 @@
+ XDT_CHECK_PACKAGE([DBUS_GLIB], [dbus-glib-1], [0.84])
+ XDT_CHECK_PACKAGE([XFCONF], [libxfconf-0], [4.9.0])
+
++dnl systemd integration
++AC_ARG_ENABLE([systemd],
++ AS_HELP_STRING([--enable-systemd], [Use systemd]),
++ [with_systemd=$enableval],
++ [with_systemd=auto])
++PKG_CHECK_MODULES(SYSTEMD,
++ [libsystemd-login polkit-gobject-1],
++ [have_systemd=yes], [have_systemd=no])
++AC_MSG_CHECKING([whether to use systemd])
++if test x$with_systemd = xauto ; then
++ if test x$have_systemd = xno ; then
++ with_systemd=no
++ else
++ with_systemd=yes
++ fi
++fi
++AC_MSG_RESULT($with_systemd)
++if test x$with_systemd = xyes; then
++ if test x$have_systemd = xno; then
++ AC_MSG_ERROR([Systemd support explicitly required, but systemd not found])
++ fi
++ AC_DEFINE(HAVE_SYSTEMD, 1, [Define if systemd is used for session tracking])
++fi
++AC_SUBST(SYSTEMD_CFLAGS)
++AC_SUBST(SYSTEMD_LIBS)
++AM_CONDITIONAL(WITH_SYSTEMD, [test "$with_systemd" = "yes"], [Using systemd])
++
+ dnl Check for gnome support
+ XDT_CHECK_OPTIONAL_PACKAGE([GNOME_KEYRING], [gnome-keyring-1], [2.22],
+ [libgnome-keyring],
+diff -Nur xfce4-session-4.10.0.orig/xfce4-session/Makefile.am xfce4-session-4.10.0/xfce4-session/Makefile.am
+--- xfce4-session-4.10.0.orig/xfce4-session/Makefile.am 2012-04-28 14:43:27.000000000 -0600
++++ xfce4-session-4.10.0/xfce4-session/Makefile.am 2013-02-22 16:47:32.877942086 -0700
+@@ -38,8 +38,6 @@
+ 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 \
+@@ -65,6 +63,16 @@
+ xfsm-upower.c \
+ xfsm-upower.h
+
++if WITH_SYSTEMD
++xfce4_session_SOURCES += \
++ xfsm-systemd.c \
++ xfsm-systemd.h
++else
++xfce4_session_SOURCES += \
++ xfsm-consolekit.c \
++ xfsm-consolekit.h
++endif
++
+ xfce4_session_CFLAGS = \
+ $(GNOME_KEYRING_CFLAGS) \
+ $(LIBSM_CFLAGS) \
+@@ -73,6 +81,7 @@
+ $(DBUS_CFLAGS) \
+ $(DBUS_GLIB_CFLAGS) \
+ $(LIBWNCK_CFLAGS) \
++ $(SYSTEMD_CFLAGS) \
+ $(XFCONF_CFLAGS) \
+ $(GMODULE_CFLAGS) \
+ $(PLATFORM_CFLAGS)
+@@ -92,6 +101,7 @@
+ $(DBUS_LIBS) \
+ $(DBUS_GLIB_LIBS) \
+ $(LIBWNCK_LIBS) \
++ $(SYSTEMD_LIBS) \
+ $(XFCONF_LIBS) \
+ $(GNOME_KEYRING_LIBS) \
+ -lm
+diff -Nur xfce4-session-4.10.0.orig/xfce4-session/xfsm-shutdown.c xfce4-session-4.10.0/xfce4-session/xfsm-shutdown.c
+--- xfce4-session-4.10.0.orig/xfce4-session/xfsm-shutdown.c 2012-04-28 14:43:27.000000000 -0600
++++ xfce4-session-4.10.0/xfce4-session/xfsm-shutdown.c 2013-02-22 16:48:03.616160362 -0700
+@@ -66,10 +66,13 @@
+ #include <xfce4-session/xfsm-fadeout.h>
+ #include <xfce4-session/xfsm-global.h>
+ #include <xfce4-session/xfsm-legacy.h>
+-#include <xfce4-session/xfsm-consolekit.h>
+ #include <xfce4-session/xfsm-upower.h>
+
+-
++#ifdef HAVE_SYSTEMD
++#include <xfce4-session/xfsm-systemd.h>
++#else
++#include <xfce4-session/xfsm-consolekit.h>
++#endif
+
+ static void xfsm_shutdown_finalize (GObject *object);
+ static void xfsm_shutdown_sudo_free (XfsmShutdown *shutdown);
+@@ -93,7 +96,11 @@
+ {
+ GObject __parent__;
+
+- XfsmConsolekit *consolekit;
++#ifdef HAVE_SYSTEMD
++ SystemdProxy *systemd_proxy;
++#else
++ XfsmConsolekit *consolekit;
++#endif
+ XfsmUPower *upower;
+
+ /* kiosk settings */
+@@ -130,8 +137,11 @@
+ xfsm_shutdown_init (XfsmShutdown *shutdown)
+ {
+ XfceKiosk *kiosk;
+-
++#ifdef HAVE_SYSTEMD
++ shutdown->systemd_proxy = systemd_proxy_new ();
++#else
+ shutdown->consolekit = xfsm_consolekit_get ();
++#endif
+ shutdown->upower = xfsm_upower_get ();
+ shutdown->helper_state = SUDO_NOT_INITIAZED;
+ shutdown->helper_require_password = FALSE;
+@@ -150,7 +160,11 @@
+ {
+ XfsmShutdown *shutdown = XFSM_SHUTDOWN (object);
+
++#ifdef HAVE_SYSTEMD
++ systemd_proxy_free (shutdown->systemd_proxy);
++#else
+ g_object_unref (G_OBJECT (shutdown->consolekit));
++#endif
+ g_object_unref (G_OBJECT (shutdown->upower));
+
+ /* close down helper */
+@@ -641,7 +655,11 @@
+ if (shutdown->helper_state == SUDO_AVAILABLE)
+ return xfsm_shutdown_sudo_try_action (shutdown, XFSM_SHUTDOWN_RESTART, error);
+ else
++#ifdef HAVE_SYSTEMD
++ return systemd_proxy_restart (shutdown->systemd_proxy, error);
++#else
+ return xfsm_consolekit_try_restart (shutdown->consolekit, error);
++#endif
+ }
+
+
+@@ -658,7 +676,11 @@
+ if (shutdown->helper_state == SUDO_AVAILABLE)
+ return xfsm_shutdown_sudo_try_action (shutdown, XFSM_SHUTDOWN_SHUTDOWN, error);
+ else
++#ifdef HAVE_SYSTEMD
++ return systemd_proxy_shutdown (shutdown->systemd_proxy, error);
++#else
+ return xfsm_consolekit_try_shutdown (shutdown->consolekit, error);
++#endif
+ }
+
+
+@@ -697,8 +719,11 @@
+ *can_restart = FALSE;
+ return TRUE;
+ }
+-
++#ifdef HAVE_SYSTEMD
++ if (systemd_proxy_can_restart (shutdown->systemd_proxy, can_restart, error))
++#else
+ if (xfsm_consolekit_can_restart (shutdown->consolekit, can_restart, error))
++#endif
+ return TRUE;
+
+ if (xfsm_shutdown_sudo_init (shutdown, error))
+@@ -724,8 +749,11 @@
+ *can_shutdown = FALSE;
+ return TRUE;
+ }
+-
++#ifdef HAVE_SYSTEMD
++ if (systemd_proxy_can_shutdown (shutdown->systemd_proxy, can_shutdown, error))
++#else
+ if (xfsm_consolekit_can_shutdown (shutdown->consolekit, can_shutdown, error))
++#endif
+ return TRUE;
+
+ if (xfsm_shutdown_sudo_init (shutdown, error))
+diff -Nur xfce4-session-4.10.0.orig/xfce4-session/xfsm-systemd.c xfce4-session-4.10.0/xfce4-session/xfsm-systemd.c
+--- xfce4-session-4.10.0.orig/xfce4-session/xfsm-systemd.c 1969-12-31 17:00:00.000000000 -0700
++++ xfce4-session-4.10.0/xfce4-session/xfsm-systemd.c 2013-02-22 16:40:16.102822123 -0700
+@@ -0,0 +1,123 @@
++/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
++ *
++ * Copyright (C) 2012 Christian Hesse
++ *
++ * Licensed under the GNU General Public License Version 2
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License as published by
++ * the Free Software Foundation; either version 2 of the License, or
++ * (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
++ */
++
++#include <config.h>
++
++#include <gio/gio.h>
++#include <polkit/polkit.h>
++
++#include "xfsm-systemd.h"
++
++#define SYSTEMD_DBUS_NAME "org.freedesktop.login1"
++#define SYSTEMD_DBUS_PATH "/org/freedesktop/login1"
++#define SYSTEMD_DBUS_INTERFACE "org.freedesktop.login1.Manager"
++#define SYSTEMD_REBOOT_ACTION "org.freedesktop.login1.reboot"
++#define SYSTEMD_SHUTDOWN_ACTION "org.freedesktop.login1.power-off"
++
++struct _SystemdProxy {
++ PolkitAuthority *authority;
++ PolkitSubject *subject;
++};
++
++SystemdProxy *
++systemd_proxy_new (void)
++{
++ SystemdProxy *proxy;
++
++ proxy = g_new0 (SystemdProxy, 1);
++
++ proxy->authority = polkit_authority_get_sync (NULL, NULL);
++ proxy->subject = polkit_unix_process_new (getpid());
++
++ return proxy;
++}
++
++void
++systemd_proxy_free (SystemdProxy *proxy)
++{
++ g_object_unref (proxy->authority);
++ g_object_unref (proxy->subject);
++
++ g_free (proxy);
++}
++
++gboolean systemd_proxy_can_method (SystemdProxy *proxy, gboolean *can_method, const gchar *method, GError **error)
++{
++ PolkitAuthorizationResult *res;
++ GError *local_error = NULL;
++
++ *can_method = FALSE;
++ res = polkit_authority_check_authorization_sync (proxy->authority,
++ proxy->subject,
++ method,
++ NULL,
++ POLKIT_CHECK_AUTHORIZATION_FLAGS_NONE,
++ NULL,
++ &local_error);
++ if (res == NULL) {
++ g_propagate_error (error, local_error);
++ return FALSE;
++ }
++
++ *can_method = polkit_authorization_result_get_is_authorized (res) ||
++ polkit_authorization_result_get_is_challenge (res);
++
++ g_object_unref (res);
++
++ return TRUE;
++}
++
++gboolean systemd_proxy_can_restart (SystemdProxy *proxy, gboolean *can_restart, GError **error)
++{
++ return systemd_proxy_can_method(proxy, can_restart, SYSTEMD_REBOOT_ACTION, error);
++}
++
++gboolean systemd_proxy_can_shutdown (SystemdProxy *proxy, gboolean *can_shutdown, GError **error)
++{
++ return systemd_proxy_can_method(proxy, can_shutdown, SYSTEMD_SHUTDOWN_ACTION, error);
++}
++
++gboolean systemd_proxy_method (SystemdProxy *proxy, const gchar *method, GError **error)
++{
++ GDBusConnection *bus;
++
++ bus = g_bus_get_sync (G_BUS_TYPE_SYSTEM, NULL, NULL);
++ g_dbus_connection_call_sync (bus,
++ SYSTEMD_DBUS_NAME,
++ SYSTEMD_DBUS_PATH,
++ SYSTEMD_DBUS_INTERFACE,
++ method,
++ g_variant_new ("(b)", TRUE),
++ NULL, 0, G_MAXINT, NULL, NULL);
++ g_object_unref (bus);
++
++ return TRUE;
++}
++
++gboolean systemd_proxy_restart (SystemdProxy *proxy, GError **error)
++{
++ return systemd_proxy_method(proxy, "Reboot", error);
++}
++
++gboolean systemd_proxy_shutdown (SystemdProxy *proxy, GError **error)
++{
++ return systemd_proxy_method(proxy, "PowerOff", error);
++}
+diff -Nur xfce4-session-4.10.0.orig/xfce4-session/xfsm-systemd.h xfce4-session-4.10.0/xfce4-session/xfsm-systemd.h
+--- xfce4-session-4.10.0.orig/xfce4-session/xfsm-systemd.h 1969-12-31 17:00:00.000000000 -0700
++++ xfce4-session-4.10.0/xfce4-session/xfsm-systemd.h 2013-02-22 16:40:53.847093328 -0700
+@@ -0,0 +1,42 @@
++/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
++ *
++ * Copyright (C) 2012 Christian Hesse
++ *
++ * Licensed under the GNU General Public License Version 2
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License as published by
++ * the Free Software Foundation; either version 2 of the License, or
++ * (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
++ */
++
++#ifndef __SYSTEMD_PROXY_H__
++#define __SYSTEMD_PROXY_H__
++
++#include <glib.h>
++
++G_BEGIN_DECLS
++
++typedef struct _SystemdProxy SystemdProxy;
++
++SystemdProxy *systemd_proxy_new (void);
++void systemd_proxy_free (SystemdProxy *proxy);
++gboolean systemd_proxy_can_method (SystemdProxy *proxy, gboolean *can_method, const char *method, GError **error);
++gboolean systemd_proxy_can_restart (SystemdProxy *proxy, gboolean *can_restart, GError **error);
++gboolean systemd_proxy_can_shutdown (SystemdProxy *proxy, gboolean *can_shutdown, GError **error);
++gboolean systemd_proxy_method (SystemdProxy *proxy, const char *method, GError **error);
++gboolean systemd_proxy_restart (SystemdProxy *proxy, GError **error);
++gboolean systemd_proxy_shutdown (SystemdProxy *proxy, GError **error);
++
++G_END_DECLS
++
++#endif /* __SYSTEMD_PROXY_H__ */
diff --git a/xfce4-session.spec b/xfce4-session.spec
index 357ba13..3a95473 100644
--- a/xfce4-session.spec
+++ b/xfce4-session.spec
@@ -2,7 +2,7 @@
Name: xfce4-session
Version: 4.10.0
-Release: 5%{?dist}
+Release: 6%{?dist}
Summary: Xfce session manager
Group: User Interface/Desktops
@@ -17,6 +17,9 @@ Source1: polkit-gnome-authentication-agent-1.desktop
# https://bugzilla.xfce.org/show_bug.cgi?id=5379
# http://git.xfce.org/xfce/xfce4-session/patch/?id=9f3077be682355e1cd07e9a9463e76307292208c
Patch1: xfce4-session-4.10.0-session-save.patch
+# add systemd-logind support.
+# Patch from arch linux / https://bugzilla.xfce.org/show_bug.cgi?id=8729
+Patch2: xfce4-session-4.10.0-add-systemd-support.patch
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
@@ -41,6 +44,11 @@ BuildRequires: libxslt
BuildRequires: gnome-doc-utils
#BuildRequires: libxml2
BuildRequires: xfce4-dev-tools
+BuildRequires: systemd-devel
+BuildRequires: polkit-devel
+# Needed since we regen auto files for systemd patch.
+BuildRequires: xfce4-dev-tools
+BuildRequires: libtool
Requires: xorg-x11-server-utils
Requires: polkit-gnome
@@ -71,13 +79,16 @@ Additional splash screen engines for the Xfce Session Manager.
%setup -q
%patch1 -p1
+%patch2 -p1
%build
+/usr/bin/xdt-autogen
%configure --disable-static \
--enable-gnome \
--enable-libgnome-keyring \
--enable-session-screenshots \
- --enable-panel-plugin
+ --enable-panel-plugin \
+ --enable-systemd
sed -i 's|^hardcode_libdir_flag_spec=.*|hardcode_libdir_flag_spec=""|g' libtool
sed -i 's|^runpath_var=LD_RUN_PATH|runpath_var=DIE_RPATH_DIE|g' libtool
@@ -150,6 +161,9 @@ gtk-update-icon-cache %{_datadir}/icons/hicolor &>/dev/null || :
%{_datadir}/themes/Default/balou/
%changelog
+* Fri Feb 22 2013 Kevin Fenzi <kevin at scrye.com> 4.10.0-6
+- Add patch for systemd-logind support.
+
* Fri Feb 15 2013 Fedora Release Engineering <rel-eng at lists.fedoraproject.org> - 4.10.0-5
- Rebuilt for https://fedoraproject.org/wiki/Fedora_19_Mass_Rebuild
More information about the scm-commits
mailing list