1
0
mirror of https://git.freebsd.org/ports.git synced 2026-06-02 11:08:52 +00:00

x11/gnome-session: update to 47.0.1

PR:	286697
This commit is contained in:
Olivier Duchateau
2025-06-11 11:42:23 +02:00
committed by Baptiste Daroussin
parent 3e1381aeb4
commit 9940dac255
18 changed files with 1690 additions and 129 deletions
+19 -9
View File
@@ -1,37 +1,47 @@
PORTNAME= gnome-session
PORTVERSION= 42.0
PORTREVISION= 4
PORTVERSION= 47.0.1
CATEGORIES= x11 gnome
MASTER_SITES= GNOME
DIST_SUBDIR= gnome
MAINTAINER= gnome@FreeBSD.org
COMMENT= Session component for the GNOME desktop
WWW= https://www.gnome.org/
WWW= https://gitlab.gnome.org/GNOME/gnome-session
LICENSE= GPLv2+
LICENSE_FILE= ${WRKSRC}/COPYING
PORTSCOUT= limit:^47\.
BUILD_DEPENDS= xmlto:textproc/xmlto
LIB_DEPENDS= libjson-glib-1.0.so:devel/json-glib \
libdbus-glib-1.so:devel/dbus-glib \
libepoxy.so:graphics/libepoxy
RUN_DEPENDS= ${LOCALBASE}/sbin/console-kit-daemon:sysutils/consolekit2 \
dbus-daemon:devel/dbus
PORTSCOUT= limitw:1,even
RUN_DEPENDS= consolekit2>0:sysutils/consolekit2 \
dbus-daemon:devel/dbus \
zenity:x11/zenity
USES= compiler:c11 gettext gl gnome localbase:ldflags meson \
pkgconfig python:build tar:xz xorg
USE_GNOME= gnomedesktop3 gtk30
USE_GNOME= glib20 gnomedesktop3 gtk30 libxslt:build
USE_XORG= ice sm x11 xcomposite xtrans
USE_GL= egl gl glesv2
MESON_ARGS= -Dsystemd=false \
MESON_ARGS= -Ddocbook=false \
-Dsystemd=false \
-Dsystemd_session=disable \
-Dsystemd_journal=false \
-Dconsolekit=true
BINARY_ALIAS= python3=${PYTHON_VERSION}
PLIST_SUB= VERSION=${PORTVERSION:C/^([0-9]+)\..*/\1/}
GLIB_SCHEMAS= org.gnome.SessionManager.gschema.xml
post-patch:
# Avoid lots of warnings in gdm log
.for f in gnome-wayland.desktop.in.in gnome.desktop.in.in
${REINPLACE_CMD} -e 's|/gnome-session|/gnome-session --disable-acceleration-check|g' \
${WRKSRC}/data/${f}
.endfor
.include <bsd.port.mk>
+3 -3
View File
@@ -1,3 +1,3 @@
TIMESTAMP = 1648063129
SHA256 (gnome/gnome-session-42.0.tar.xz) = 3cca06053ab682926920951a7da95f8cc6d72da74c682c46d0a0653332969caa
SIZE (gnome/gnome-session-42.0.tar.xz) = 485616
TIMESTAMP = 1743437836
SHA256 (gnome/gnome-session-47.0.1.tar.xz) = 56ae9c68e49995793eb2096bcdc4533b111669e1e54c8b6e0b1d952f6a5e8a70
SIZE (gnome/gnome-session-47.0.1.tar.xz) = 486996
@@ -0,0 +1,18 @@
--- data/meson.build.orig 2024-03-18 19:30:06 UTC
+++ data/meson.build
@@ -108,6 +108,7 @@ install_data(
install_dir: join_paths(session_datadir, 'glib-2.0', 'schemas'),
)
+if enable_systemd_session
unit_conf = configuration_data()
unit_conf.set('libexecdir', session_libexecdir)
@@ -170,6 +171,7 @@ endforeach
session),
)
endforeach
+endif
data = files('hardware-compatibility')
@@ -0,0 +1,37 @@
--- doc/man/gnome-session.1.orig 2024-03-18 19:30:06 UTC
+++ doc/man/gnome-session.1
@@ -43,6 +43,14 @@ Use the applications defined in \fBSESSION.session\fP.
Use the applications defined in \fBSESSION.session\fP. If not specified,
\fBgnome.session\fP will be used.
.TP
+.I "--builtin"
+Use the legacy non-systemd method of managing the user session. This is the
+opposite of the \fI--systemd\fP option.
+.TP
+.I "--systemd"
+Use the systemd method of managing the user session. This is the opposite of
+the \fI--builtin\fP option.
+.TP
.I "--failsafe"
Run in fail-safe mode. User-specified applications will not be started.
.TP
@@ -82,11 +90,17 @@ The \fB.session\fP files are looked for in
\fB$XDG_CONFIG_DIRS/gnome-session/sessions\fP and
\fB$XDG_DATA_DIRS/gnome-session/sessions\fP.
.SH systemd
-\fIgnome-session\fP can pass much of the session management over to systemd.
-In this case, startup components that have \fBX-GNOME-HiddenUnderSystemd=true\fP
+\fIgnome-session\fP can pass much of the session management over to systemd
+(see the \fI--systemd\fP option which may be the default since 3.34). In this
+case, startup components that have \fBX-GNOME-HiddenUnderSystemd=true\fP
set in their \fB.desktop\fP file will be ignored by \fIgnome-session\fP. It
instead relies on the fact that these components are managed by systemd.
.PP
+As of GNOME 3.34 the systemd support is new and the customizing the
+configuration is not yet easily possible. With GNOME 3.34 it may be best to use
+\fI--builtin\fP if session customizations are required. This is due to the way
+that GNOME currently defines the components that will be started on each session
+type.
.PP
\fBsystemd\fP provides the two special targets \fBgraphical-session.target\fP
and \fBgraphical-session-pre.target\fP which are fully functional and should be
@@ -0,0 +1,44 @@
--- gnome-session/gsm-autostart-app.c.orig 2024-03-18 19:30:06 UTC
+++ gnome-session/gsm-autostart-app.c
@@ -31,8 +31,12 @@
#define GNOME_DESKTOP_USE_UNSTABLE_API
#include <libgnome-desktop/gnome-systemd.h>
+#ifdef HAVE_SYSTEMD
+#ifdef ENABLE_SYSTEMD_JOURNAL
#include <systemd/sd-journal.h>
+#endif
#include <systemd/sd-daemon.h>
+#endif
#include "gsm-autostart-app.h"
#include "gsm-util.h"
@@ -957,6 +961,7 @@ app_launched (GAppLaunchContext *ctx,
NULL, NULL, NULL);
}
+#ifdef ENABLE_SYSTEMD_JOURNAL
static void
on_child_setup (GsmAutostartApp *app)
{
@@ -983,6 +988,7 @@ on_child_setup (GsmAutostartApp *app)
close (standard_error);
}
}
+#endif
static gboolean
autostart_app_start_spawn (GsmAutostartApp *app,
@@ -1033,10 +1039,12 @@ autostart_app_start_spawn (GsmAutostartApp *app,
g_app_launch_context_setenv (ctx, "DESKTOP_AUTOSTART_ID", startup_id);
}
+#ifdef ENABLE_SYSTEMD_JOURNAL
if (sd_booted () > 0) {
child_setup_func = (GSpawnChildSetupFunc) on_child_setup;
child_setup_data = app;
}
+#endif
handler = g_signal_connect (ctx, "launched", G_CALLBACK (app_launched), app);
success = g_desktop_app_info_launch_uris_as_manager (priv->app_info,
@@ -0,0 +1,975 @@
--- gnome-session/gsm-consolekit.c.orig 2024-12-30 10:33:10 UTC
+++ gnome-session/gsm-consolekit.c
@@ -0,0 +1,972 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
+ *
+ * Copyright (C) 2008 Jon McCann <jmccann@redhat.com>
+ *
+ * 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, 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, see <http://www.gnu.org/licenses/>.
+ */
+
+#include "config.h"
+
+#include <errno.h>
+#include <string.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <sys/types.h>
+#include <pwd.h>
+
+#include <glib.h>
+#include <glib-object.h>
+#include <glib/gi18n.h>
+#include <gio/gio.h>
+#include <gio/gunixfdlist.h>
+
+#include "gsm-system.h"
+#include "gsm-consolekit.h"
+
+#define CK_NAME "org.freedesktop.ConsoleKit"
+
+#define CK_MANAGER_PATH "/org/freedesktop/ConsoleKit/Manager"
+#define CK_MANAGER_INTERFACE CK_NAME ".Manager"
+#define CK_SEAT_INTERFACE CK_NAME ".Seat"
+#define CK_SESSION_INTERFACE CK_NAME ".Session"
+
+
+struct _GsmConsolekitPrivate
+{
+ GDBusProxy *ck_proxy;
+ GDBusProxy *ck_session_proxy;
+
+ char *session_id;
+ gchar *session_path;
+
+ const gchar *inhibit_locks;
+ gint inhibit_fd;
+
+ gboolean is_active;
+
+ gint delay_inhibit_fd;
+ gboolean prepare_for_shutdown_expected;
+};
+
+enum {
+ PROP_0,
+ PROP_ACTIVE
+};
+
+static void gsm_consolekit_system_init (GsmSystemInterface *iface);
+
+G_DEFINE_TYPE_WITH_CODE (GsmConsolekit, gsm_consolekit, G_TYPE_OBJECT,
+ G_IMPLEMENT_INTERFACE (GSM_TYPE_SYSTEM,
+ gsm_consolekit_system_init))
+
+static void
+drop_system_inhibitor (GsmConsolekit *manager)
+{
+ if (manager->priv->inhibit_fd != -1) {
+ g_debug ("GsmConsolekit: Dropping system inhibitor fd %d", manager->priv->inhibit_fd);
+ close (manager->priv->inhibit_fd);
+ manager->priv->inhibit_fd = -1;
+ }
+}
+
+static void
+drop_delay_inhibitor (GsmConsolekit *manager)
+{
+ if (manager->priv->delay_inhibit_fd != -1) {
+ g_debug ("GsmConsolekit: Dropping delay inhibitor");
+ close (manager->priv->delay_inhibit_fd);
+ manager->priv->delay_inhibit_fd = -1;
+ }
+}
+
+static void
+gsm_consolekit_finalize (GObject *object)
+{
+ GsmConsolekit *consolekit = GSM_CONSOLEKIT (object);
+
+ g_clear_object (&consolekit->priv->ck_proxy);
+ g_clear_object (&consolekit->priv->ck_session_proxy);
+ free (consolekit->priv->session_id);
+ g_free (consolekit->priv->session_path);
+
+ drop_system_inhibitor (consolekit);
+ drop_delay_inhibitor (consolekit);
+
+ G_OBJECT_CLASS (gsm_consolekit_parent_class)->finalize (object);
+}
+
+static void
+gsm_consolekit_set_property (GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ GsmConsolekit *self = GSM_CONSOLEKIT (object);
+
+ switch (prop_id) {
+ case PROP_ACTIVE:
+ self->priv->is_active = g_value_get_boolean (value);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ }
+}
+
+static void
+gsm_consolekit_get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ GsmConsolekit *self = GSM_CONSOLEKIT (object);
+
+ switch (prop_id) {
+ case PROP_ACTIVE:
+ g_value_set_boolean (value, self->priv->is_active);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+gsm_consolekit_class_init (GsmConsolekitClass *manager_class)
+{
+ GObjectClass *object_class;
+
+ object_class = G_OBJECT_CLASS (manager_class);
+
+ object_class->get_property = gsm_consolekit_get_property;
+ object_class->set_property = gsm_consolekit_set_property;
+ object_class->finalize = gsm_consolekit_finalize;
+
+ g_object_class_override_property (object_class, PROP_ACTIVE, "active");
+
+ g_type_class_add_private (manager_class, sizeof (GsmConsolekitPrivate));
+}
+
+static void ck_session_proxy_signal_cb (GDBusProxy *proxy,
+ const gchar *sender_name,
+ const gchar *signal_name,
+ GVariant *parameters,
+ gpointer user_data);
+
+static void ck_proxy_signal_cb (GDBusProxy *proxy,
+ const gchar *sender_name,
+ const gchar *signal_name,
+ GVariant *parameters,
+ gpointer user_data);
+
+static void
+ck_pid_get_session (GsmConsolekit *manager,
+ pid_t pid,
+ gchar **session_id)
+{
+ GVariant *res;
+
+ *session_id = NULL;
+
+ if (pid < 0) {
+ g_warning ("Calling GetSessionForUnixProcess failed."
+ "Invalid pid.");
+ return;
+ }
+
+ res = g_dbus_proxy_call_sync (manager->priv->ck_proxy,
+ "GetSessionForUnixProcess",
+ g_variant_new ("(u)", pid),
+ 0,
+ -1,
+ NULL,
+ NULL);
+ if (!res) {
+ g_warning ("Calling GetSessionForUnixProcess failed."
+ "Check that ConsoleKit is properly installed.");
+ return;
+ }
+
+ g_variant_get (res, "(o)", session_id);
+ g_variant_unref (res);
+}
+
+static void
+gsm_consolekit_init (GsmConsolekit *manager)
+{
+ GError *error = NULL;
+ GDBusConnection *bus;
+ GVariant *res;
+
+ manager->priv = G_TYPE_INSTANCE_GET_PRIVATE (manager,
+ GSM_TYPE_CONSOLEKIT,
+ GsmConsolekitPrivate);
+
+ manager->priv->inhibit_fd = -1;
+ manager->priv->delay_inhibit_fd = -1;
+
+ bus = g_bus_get_sync (G_BUS_TYPE_SYSTEM, NULL, &error);
+ if (bus == NULL)
+ g_error ("Failed to connect to system bus: %s",
+ error->message);
+ manager->priv->ck_proxy =
+ g_dbus_proxy_new_sync (bus,
+ 0,
+ NULL,
+ CK_NAME,
+ CK_MANAGER_PATH,
+ CK_MANAGER_INTERFACE,
+ NULL,
+ &error);
+ if (manager->priv->ck_proxy == NULL) {
+ g_warning ("Failed to connect to consolekit: %s",
+ error->message);
+ g_clear_error (&error);
+ }
+
+ g_signal_connect (manager->priv->ck_proxy, "g-signal",
+ G_CALLBACK (ck_proxy_signal_cb), manager);
+
+ ck_pid_get_session (manager, getpid (), &manager->priv->session_id);
+
+ if (manager->priv->session_id == NULL) {
+ g_warning ("Could not get session id for session. Check that ConsoleKit is "
+ "properly installed.");
+ return;
+ }
+
+ /* in ConsoleKit, the session id is the session path */
+ manager->priv->session_path = g_strdup (manager->priv->session_id);
+
+ manager->priv->ck_session_proxy =
+ g_dbus_proxy_new_sync (bus,
+ 0,
+ NULL,
+ CK_NAME,
+ manager->priv->session_path,
+ CK_SESSION_INTERFACE,
+ NULL,
+ &error);
+ if (manager->priv->ck_proxy == NULL) {
+ g_warning ("Failed to connect to consolekit session: %s",
+ error->message);
+ g_clear_error (&error);
+ }
+
+ g_signal_connect (manager->priv->ck_session_proxy, "g-signal",
+ G_CALLBACK (ck_session_proxy_signal_cb), manager);
+
+ g_object_unref (bus);
+}
+
+static void
+emit_restart_complete (GsmConsolekit *manager,
+ GError *error)
+{
+ GError *call_error;
+
+ call_error = NULL;
+
+ if (error != NULL) {
+ call_error = g_error_new_literal (GSM_SYSTEM_ERROR,
+ GSM_SYSTEM_ERROR_RESTARTING,
+ error->message);
+ }
+
+ g_signal_emit_by_name (G_OBJECT (manager),
+ "request_completed", call_error);
+
+ if (call_error != NULL) {
+ g_error_free (call_error);
+ }
+}
+
+static void
+emit_stop_complete (GsmConsolekit *manager,
+ GError *error)
+{
+ GError *call_error;
+
+ call_error = NULL;
+
+ if (error != NULL) {
+ call_error = g_error_new_literal (GSM_SYSTEM_ERROR,
+ GSM_SYSTEM_ERROR_STOPPING,
+ error->message);
+ }
+
+ g_signal_emit_by_name (G_OBJECT (manager),
+ "request_completed", call_error);
+
+ if (call_error != NULL) {
+ g_error_free (call_error);
+ }
+}
+
+static void
+restart_done (GObject *source,
+ GAsyncResult *result,
+ gpointer user_data)
+{
+ GDBusProxy *proxy = G_DBUS_PROXY (source);
+ GsmConsolekit *manager = user_data;
+ GError *error = NULL;
+ GVariant *res;
+
+ res = g_dbus_proxy_call_finish (proxy, result, &error);
+
+ if (!res) {
+ g_warning ("Unable to restart system: %s", error->message);
+ emit_restart_complete (manager, error);
+ g_error_free (error);
+ } else {
+ emit_restart_complete (manager, NULL);
+ g_variant_unref (res);
+ }
+}
+
+static void
+gsm_consolekit_attempt_restart (GsmSystem *system)
+{
+ GsmConsolekit *manager = GSM_CONSOLEKIT (system);
+
+ /* Use Restart instead of Reboot because it will work on
+ * both CK and CK2 */
+ g_dbus_proxy_call (manager->priv->ck_proxy,
+ "Restart",
+ g_variant_new ("()"),
+ 0,
+ G_MAXINT,
+ NULL,
+ restart_done,
+ manager);
+}
+
+static void
+stop_done (GObject *source,
+ GAsyncResult *result,
+ gpointer user_data)
+{
+ GDBusProxy *proxy = G_DBUS_PROXY (source);
+ GsmConsolekit *manager = user_data;
+ GError *error = NULL;
+ GVariant *res;
+
+ res = g_dbus_proxy_call_finish (proxy, result, &error);
+
+ if (!res) {
+ g_warning ("Unable to stop system: %s", error->message);
+ emit_stop_complete (manager, error);
+ g_error_free (error);
+ } else {
+ emit_stop_complete (manager, NULL);
+ g_variant_unref (res);
+ }
+}
+
+static void
+gsm_consolekit_attempt_stop (GsmSystem *system)
+{
+ GsmConsolekit *manager = GSM_CONSOLEKIT (system);
+
+ /* Use Stop insetad of PowerOff because it will work with
+ * Ck and CK2. */
+ g_dbus_proxy_call (manager->priv->ck_proxy,
+ "Stop",
+ g_variant_new ("()"),
+ 0,
+ G_MAXINT,
+ NULL,
+ stop_done,
+ manager);
+}
+
+static void
+gsm_consolekit_set_session_idle (GsmSystem *system,
+ gboolean is_idle)
+{
+ GsmConsolekit *manager = GSM_CONSOLEKIT (system);
+
+ g_debug ("Updating consolekit idle status: %d", is_idle);
+ g_dbus_proxy_call_sync (manager->priv->ck_session_proxy,
+ "SetIdleHint",
+ g_variant_new ("(b)", is_idle),
+ 0,
+ G_MAXINT,
+ NULL, NULL);
+}
+
+static void
+ck_session_get_seat (GsmConsolekit *manager,
+ gchar **seat)
+{
+ GVariant *res;
+
+ *seat = NULL;
+
+ res = g_dbus_proxy_call_sync (manager->priv->ck_session_proxy,
+ "GetSeatId",
+ g_variant_new ("()"),
+ 0,
+ -1,
+ NULL, NULL);
+ if (!res) {
+ g_warning ("GsmConsoleKit: Calling GetSeatId failed.");
+ return;
+ }
+
+ g_variant_get (res, "(o)", seat);
+ g_variant_unref (res);
+}
+
+/* returns -1 on failure
+ * 0 seat is multi-session
+ * 1 seat is not multi-session
+ */
+static gint
+ck_seat_can_multi_session (GsmConsolekit *manager,
+ const gchar *seat)
+{
+ GDBusConnection *bus;
+ GVariant *res;
+ gboolean can_activate;
+
+
+ bus = g_dbus_proxy_get_connection (manager->priv->ck_proxy);
+ res = g_dbus_connection_call_sync (bus,
+ CK_NAME,
+ seat,
+ CK_SEAT_INTERFACE,
+ "CanActivateSessions",
+ g_variant_new ("()"),
+ G_VARIANT_TYPE_BOOLEAN,
+ 0,
+ -1,
+ NULL, NULL);
+ if (!res) {
+ g_warning ("GsmConsoleKit: Calling GetSeatId failed.");
+ return -1;
+ }
+
+ g_variant_get (res, "(b)", &can_activate);
+ g_variant_unref (res);
+
+ return can_activate == TRUE ? 1 : 0;
+}
+
+static gboolean
+gsm_consolekit_can_switch_user (GsmSystem *system)
+{
+ GsmConsolekit *manager = GSM_CONSOLEKIT (system);
+ gchar *seat;
+ gint ret;
+
+ ck_session_get_seat (manager, &seat);
+ ret = ck_seat_can_multi_session (manager, seat);
+ free (seat);
+
+ return ret > 0;
+}
+
+static gboolean
+gsm_consolekit_can_restart (GsmSystem *system)
+{
+ GsmConsolekit *manager = GSM_CONSOLEKIT (system);
+ GVariant *res;
+ gboolean can_restart;
+
+ res = g_dbus_proxy_call_sync (manager->priv->ck_proxy,
+ "CanRestart",
+ g_variant_new ("()"),
+ 0,
+ G_MAXINT,
+ NULL,
+ NULL);
+ if (!res) {
+ g_warning ("Calling CanRestart failed. Check that ConsoleKit is "
+ "properly installed.");
+ return FALSE;
+ }
+
+ g_variant_get (res, "(b)", &can_restart);
+ g_variant_unref (res);
+
+ return can_restart;
+}
+
+static gboolean
+gsm_consolekit_can_stop (GsmSystem *system)
+{
+ GsmConsolekit *manager = GSM_CONSOLEKIT (system);
+ GVariant *res;
+ gboolean can_stop;
+
+ res = g_dbus_proxy_call_sync (manager->priv->ck_proxy,
+ "CanStop",
+ g_variant_new ("()"),
+ 0,
+ G_MAXINT,
+ NULL,
+ NULL);
+ if (!res) {
+ g_warning ("Calling CanStop failed. Check that ConsoleKit is "
+ "properly installed.");
+ return FALSE;
+ }
+
+ g_variant_get (res, "(b)", &can_stop);
+ g_variant_unref (res);
+
+ return can_stop;
+}
+
+/* returns -1 on failure, 0 on success */
+static gint
+ck_session_get_class (GsmConsolekit *manager,
+ gchar **session_class)
+{
+ GVariant *res;
+
+ *session_class = NULL;
+
+ res = g_dbus_proxy_call_sync (manager->priv->ck_session_proxy,
+ "GetSessionClass",
+ g_variant_new ("()"),
+ 0,
+ -1,
+ NULL, NULL);
+ if (!res) {
+ g_warning ("GsmConsoleKit: Calling GetSessionClass failed.");
+ return -1;
+ }
+
+ g_variant_get (res, "(s)", session_class);
+ g_variant_unref (res);
+
+ return 0;
+}
+
+static gboolean
+gsm_consolekit_is_login_session (GsmSystem *system)
+{
+ GsmConsolekit *manager = GSM_CONSOLEKIT (system);
+ int res;
+ gboolean ret;
+ gchar *session_class = NULL;
+
+ ret = FALSE;
+
+ if (manager->priv->session_id == NULL) {
+ return ret;
+ }
+
+ res = ck_session_get_class (manager, &session_class);
+ if (res < 0) {
+ g_warning ("Could not get session class: %s", strerror (-res));
+ return FALSE;
+ }
+ ret = (g_strcmp0 (session_class, "greeter") == 0);
+ g_free (session_class);
+
+ return ret;
+}
+
+static gboolean
+gsm_consolekit_can_suspend (GsmSystem *system)
+{
+ GsmConsolekit *manager = GSM_CONSOLEKIT (system);
+ gchar *rv;
+ GVariant *res;
+ gboolean can_suspend;
+
+ res = g_dbus_proxy_call_sync (manager->priv->ck_proxy,
+ "CanSuspend",
+ NULL,
+ 0,
+ G_MAXINT,
+ NULL,
+ NULL);
+ if (!res) {
+ g_warning ("Calling CanSuspend failed. Check that ConsoleKit is "
+ "properly installed.");
+ return FALSE;
+ }
+
+ g_variant_get (res, "(s)", &rv);
+ g_variant_unref (res);
+
+ can_suspend = g_strcmp0 (rv, "yes") == 0 ||
+ g_strcmp0 (rv, "challenge") == 0;
+
+ g_free (rv);
+
+ return can_suspend;
+}
+
+static gboolean
+gsm_consolekit_can_hibernate (GsmSystem *system)
+{
+ GsmConsolekit *manager = GSM_CONSOLEKIT (system);
+ gchar *rv;
+ GVariant *res;
+ gboolean can_hibernate;
+
+ res = g_dbus_proxy_call_sync (manager->priv->ck_proxy,
+ "CanHibernate",
+ NULL,
+ 0,
+ G_MAXINT,
+ NULL,
+ NULL);
+ if (!res) {
+ g_warning ("Calling CanHibernate failed. Check that ConsoleKit is "
+ "properly installed.");
+ return FALSE;
+ }
+
+ g_variant_get (res, "(s)", &rv);
+ g_variant_unref (res);
+
+ can_hibernate = g_strcmp0 (rv, "yes") == 0 ||
+ g_strcmp0 (rv, "challenge") == 0;
+
+ g_free (rv);
+
+ return can_hibernate;
+}
+
+static void
+suspend_done (GObject *source,
+ GAsyncResult *result,
+ gpointer user_data)
+{
+ GDBusProxy *proxy = G_DBUS_PROXY (source);
+ GError *error = NULL;
+ GVariant *res;
+
+ res = g_dbus_proxy_call_finish (proxy, result, &error);
+
+ if (!res) {
+ g_warning ("Unable to suspend system: %s", error->message);
+ g_error_free (error);
+ } else {
+ g_variant_unref (res);
+ }
+}
+
+static void
+hibernate_done (GObject *source,
+ GAsyncResult *result,
+ gpointer user_data)
+{
+ GDBusProxy *proxy = G_DBUS_PROXY (source);
+ GError *error = NULL;
+ GVariant *res;
+
+ res = g_dbus_proxy_call_finish (proxy, result, &error);
+
+ if (!res) {
+ g_warning ("Unable to hibernate system: %s", error->message);
+ g_error_free (error);
+ } else {
+ g_variant_unref (res);
+ }
+}
+
+static void
+gsm_consolekit_suspend (GsmSystem *system)
+{
+ GsmConsolekit *manager = GSM_CONSOLEKIT (system);
+
+ g_dbus_proxy_call (manager->priv->ck_proxy,
+ "Suspend",
+ g_variant_new ("(b)", TRUE),
+ 0,
+ G_MAXINT,
+ NULL,
+ suspend_done,
+ manager);
+}
+
+static void
+gsm_consolekit_hibernate (GsmSystem *system)
+{
+ GsmConsolekit *manager = GSM_CONSOLEKIT (system);
+
+ g_dbus_proxy_call (manager->priv->ck_proxy,
+ "Hibernate",
+ g_variant_new ("(b)", TRUE),
+ 0,
+ G_MAXINT,
+ NULL,
+ hibernate_done,
+ manager);
+}
+
+static void
+inhibit_done (GObject *source,
+ GAsyncResult *result,
+ gpointer user_data)
+{
+ GDBusProxy *proxy = G_DBUS_PROXY (source);
+ GsmConsolekit *manager = GSM_CONSOLEKIT (user_data);
+ GError *error = NULL;
+ GVariant *res;
+ GUnixFDList *fd_list = NULL;
+ gint idx;
+
+ /* Drop any previous inhibit before recording the new one */
+ drop_system_inhibitor (manager);
+
+ res = g_dbus_proxy_call_with_unix_fd_list_finish (proxy, &fd_list, result, &error);
+
+ if (!res) {
+ g_warning ("Unable to inhibit system: %s", error->message);
+ g_error_free (error);
+ } else {
+ g_variant_get (res, "(h)", &idx);
+ manager->priv->inhibit_fd = g_unix_fd_list_get (fd_list, idx, &error);
+ if (manager->priv->inhibit_fd == -1) {
+ g_warning ("Failed to receive system inhibitor fd: %s", error->message);
+ g_error_free (error);
+ }
+ g_debug ("System inhibitor fd is %d", manager->priv->inhibit_fd);
+ g_object_unref (fd_list);
+ g_variant_unref (res);
+ }
+
+ /* Handle a race condition, where locks got unset during dbus call */
+ if (manager->priv->inhibit_locks == NULL) {
+ drop_system_inhibitor (manager);
+ }
+}
+
+static void
+gsm_consolekit_set_inhibitors (GsmSystem *system,
+ GsmInhibitorFlag flags)
+{
+ GsmConsolekit *manager = GSM_CONSOLEKIT (system);
+ const gchar *locks = NULL;
+ gboolean inhibit_logout;
+ gboolean inhibit_suspend;
+
+ inhibit_logout = (flags & GSM_INHIBITOR_FLAG_LOGOUT) != 0;
+ inhibit_suspend = (flags & GSM_INHIBITOR_FLAG_SUSPEND) != 0;
+
+ if (inhibit_logout && inhibit_suspend) {
+ locks = "sleep:shutdown";
+ } else if (inhibit_logout) {
+ locks = "shutdown";
+ } else if (inhibit_suspend) {
+ locks = "sleep";
+ }
+ manager->priv->inhibit_locks = locks;
+
+ if (locks != NULL) {
+ g_debug ("Adding system inhibitor on %s", locks);
+ g_dbus_proxy_call_with_unix_fd_list (manager->priv->ck_proxy,
+ "Inhibit",
+ g_variant_new ("(ssss)",
+ locks,
+ g_get_user_name (),
+ "user session inhibited",
+ "block"),
+ 0,
+ G_MAXINT,
+ NULL,
+ NULL,
+ inhibit_done,
+ manager);
+ } else {
+ drop_system_inhibitor (manager);
+ }
+}
+
+static void
+reboot_or_poweroff_done (GObject *source,
+ GAsyncResult *res,
+ gpointer user_data)
+{
+ GsmConsolekit *consolekit = user_data;
+ GVariant *result;
+ GError *error = NULL;
+
+ result = g_dbus_proxy_call_finish (G_DBUS_PROXY (source),
+ res,
+ &error);
+
+ if (result == NULL) {
+ if (!g_error_matches (error, G_DBUS_ERROR, G_DBUS_ERROR_ACCESS_DENIED)) {
+ g_warning ("Shutdown failed: %s", error->message);
+ }
+ g_error_free (error);
+ drop_delay_inhibitor (consolekit);
+ g_debug ("GsmConsolekit: shutdown preparation failed");
+ consolekit->priv->prepare_for_shutdown_expected = FALSE;
+ g_signal_emit_by_name (consolekit, "shutdown-prepared", FALSE);
+ } else {
+ g_variant_unref (result);
+ }
+}
+
+static void
+gsm_consolekit_prepare_shutdown (GsmSystem *system,
+ gboolean restart)
+{
+ GsmConsolekit *consolekit = GSM_CONSOLEKIT (system);
+ GUnixFDList *fd_list;
+ GVariant *res;
+ GError *error = NULL;
+ gint idx;
+
+ g_debug ("GsmConsolekit: prepare shutdown");
+
+ res = g_dbus_proxy_call_with_unix_fd_list_sync (consolekit->priv->ck_proxy,
+ "Inhibit",
+ g_variant_new ("(ssss)",
+ "shutdown",
+ g_get_user_name (),
+ "Preparing to end the session",
+ "delay"),
+ 0,
+ G_MAXINT,
+ NULL,
+ &fd_list,
+ NULL,
+ &error);
+ if (res == NULL) {
+ g_warning ("Failed to get delay inhibitor: %s", error->message);
+ g_error_free (error);
+ /* We may fail here with CK and that's ok */
+ } else {
+ g_variant_get (res, "(h)", &idx);
+
+ consolekit->priv->delay_inhibit_fd = g_unix_fd_list_get (fd_list, idx, NULL);
+
+ g_debug ("GsmConsolekit: got delay inhibitor, fd = %d", consolekit->priv->delay_inhibit_fd);
+
+ g_variant_unref (res);
+ g_object_unref (fd_list);
+ }
+
+ consolekit->priv->prepare_for_shutdown_expected = TRUE;
+
+ g_dbus_proxy_call (consolekit->priv->ck_proxy,
+ restart ? "Reboot" : "PowerOff",
+ g_variant_new ("(b)", TRUE),
+ 0,
+ G_MAXINT,
+ NULL,
+ reboot_or_poweroff_done,
+ consolekit);
+}
+
+static void
+gsm_consolekit_complete_shutdown (GsmSystem *system)
+{
+ GsmConsolekit *consolekit = GSM_CONSOLEKIT (system);
+
+ /* remove delay inhibitor, if any */
+ drop_delay_inhibitor (consolekit);
+}
+
+static gboolean
+gsm_consolekit_is_last_session_for_user (GsmSystem *system)
+{
+ return FALSE;
+}
+
+static void
+gsm_consolekit_system_init (GsmSystemInterface *iface)
+{
+ iface->can_switch_user = gsm_consolekit_can_switch_user;
+ iface->can_stop = gsm_consolekit_can_stop;
+ iface->can_restart = gsm_consolekit_can_restart;
+ iface->can_suspend = gsm_consolekit_can_suspend;
+ iface->can_hibernate = gsm_consolekit_can_hibernate;
+ iface->attempt_stop = gsm_consolekit_attempt_stop;
+ iface->attempt_restart = gsm_consolekit_attempt_restart;
+ iface->suspend = gsm_consolekit_suspend;
+ iface->hibernate = gsm_consolekit_hibernate;
+ iface->set_session_idle = gsm_consolekit_set_session_idle;
+ iface->is_login_session = gsm_consolekit_is_login_session;
+ iface->set_inhibitors = gsm_consolekit_set_inhibitors;
+ iface->prepare_shutdown = gsm_consolekit_prepare_shutdown;
+ iface->complete_shutdown = gsm_consolekit_complete_shutdown;
+ iface->is_last_session_for_user = gsm_consolekit_is_last_session_for_user;
+}
+
+GsmConsolekit *
+gsm_consolekit_new (void)
+{
+ GsmConsolekit *manager;
+
+ manager = g_object_new (GSM_TYPE_CONSOLEKIT, NULL);
+
+ return manager;
+}
+
+static void
+ck_proxy_signal_cb (GDBusProxy *proxy,
+ const gchar *sender_name,
+ const gchar *signal_name,
+ GVariant *parameters,
+ gpointer user_data)
+{
+ GsmConsolekit *consolekit = user_data;
+ gboolean is_about_to_shutdown;
+
+ g_debug ("GsmConsolekit: received ConsoleKit signal: %s", signal_name);
+
+ if (g_strcmp0 (signal_name, "PrepareForShutdown") != 0) {
+ g_debug ("GsmConsolekit: ignoring %s signal", signal_name);
+ return;
+ }
+
+ g_variant_get (parameters, "(b)", &is_about_to_shutdown);
+ if (!is_about_to_shutdown) {
+ g_debug ("GsmConsolekit: ignoring %s signal since about-to-shutdown is FALSE", signal_name);
+ return;
+ }
+
+ if (consolekit->priv->prepare_for_shutdown_expected) {
+ g_debug ("GsmConsolekit: shutdown successfully prepared");
+ g_signal_emit_by_name (consolekit, "shutdown-prepared", TRUE);
+ consolekit->priv->prepare_for_shutdown_expected = FALSE;
+ }
+}
+
+static void
+ck_session_proxy_signal_cb (GDBusProxy *proxy,
+ const gchar *sender_name,
+ const gchar *signal_name,
+ GVariant *parameters,
+ gpointer user_data)
+{
+ GsmConsolekit *consolekit = user_data;
+ gboolean is_active;
+
+ g_debug ("GsmConsolekit: received ConsoleKit signal: %s", signal_name);
+
+ if (g_strcmp0 (signal_name, "ActiveChanged") != 0) {
+ g_debug ("GsmConsolekit: ignoring %s signal", signal_name);
+ return;
+ }
+
+ g_variant_get (parameters, "(b)", &is_active);
+ if (consolekit->priv->is_active != is_active) {
+ g_debug ("GsmConsolekit: session state changed");
+ consolekit->priv->is_active = is_active;
+ g_object_notify (G_OBJECT (consolekit), "active");
+ }
+}
@@ -0,0 +1,62 @@
--- gnome-session/gsm-consolekit.h.orig 2024-12-30 10:33:15 UTC
+++ gnome-session/gsm-consolekit.h
@@ -0,0 +1,59 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
+ *
+ * Copyright (C) 2008 Jon McCann <jmccann@redhat.com>
+ *
+ * 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, see <http://www.gnu.org/licenses/>.
+ *
+ * Authors:
+ * Jon McCann <jmccann@redhat.com>
+ */
+
+#ifndef __GSM_CONSOLEKIT_H__
+#define __GSM_CONSOLEKIT_H__
+
+#include <glib.h>
+#include <glib-object.h>
+
+G_BEGIN_DECLS
+
+#define GSM_TYPE_CONSOLEKIT (gsm_consolekit_get_type ())
+#define GSM_CONSOLEKIT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GSM_TYPE_CONSOLEKIT, GsmConsolekit))
+#define GSM_CONSOLEKIT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GSM_TYPE_CONSOLEKIT, GsmConsolekitClass))
+#define GSM_IS_CONSOLEKIT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GSM_TYPE_CONSOLEKIT))
+#define GSM_IS_CONSOLEKIT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GSM_TYPE_CONSOLEKIT))
+#define GSM_CONSOLEKIT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), GSM_TYPE_CONSOLEKIT, GsmConsolekitClass))
+
+typedef struct _GsmConsolekit GsmConsolekit;
+typedef struct _GsmConsolekitClass GsmConsolekitClass;
+typedef struct _GsmConsolekitPrivate GsmConsolekitPrivate;
+
+struct _GsmConsolekit
+{
+ GObject parent;
+
+ GsmConsolekitPrivate *priv;
+};
+
+struct _GsmConsolekitClass
+{
+ GObjectClass parent_class;
+};
+
+GType gsm_consolekit_get_type (void);
+
+GsmConsolekit *gsm_consolekit_new (void) G_GNUC_MALLOC;
+
+G_END_DECLS
+
+#endif /* __GSM_CONSOLEKIT_H__ */
@@ -0,0 +1,86 @@
--- gnome-session/gsm-manager.c.orig 2024-09-19 12:36:55 UTC
+++ gnome-session/gsm-manager.c
@@ -40,9 +40,17 @@
#include "gsm-manager.h"
#include "org.gnome.SessionManager.h"
+#ifdef ENABLE_SYSTEMD_JOURNAL
#include <systemd/sd-journal.h>
+#endif
+#ifdef HAVE_SYSTEMD
#include <systemd/sd-daemon.h>
+#else
+/* So we don't need to add ifdef's everywhere */
+#define sd_notify(u, m) do {} while (0)
+#define sd_notifyf(u, m, ...) do {} while (0)
+#endif
#include "gsm-store.h"
#include "gsm-inhibitor.h"
@@ -280,10 +288,12 @@ on_required_app_failure (GsmManager *manager,
allow_logout = !_log_out_is_locked_down (manager);
}
+#ifdef ENABLE_SYSTEMD_JOURNAL
sd_journal_send ("MESSAGE_ID=%s", GSM_MANAGER_UNRECOVERABLE_FAILURE_MSGID,
"PRIORITY=%d", 3,
"MESSAGE=Unrecoverable failure in required component %s", app_id,
NULL);
+#endif
gsm_fail_whale_dialog_we_failed (FALSE,
allow_logout,
@@ -308,10 +318,12 @@ on_display_server_failure (GsmManager *manager,
extensions = NULL;
}
+#ifdef ENABLE_SYSTEMD_JOURNAL
sd_journal_send ("MESSAGE_ID=%s", GSM_MANAGER_UNRECOVERABLE_FAILURE_MSGID,
"PRIORITY=%d", 3,
"MESSAGE=Unrecoverable failure in required component %s", app_id,
NULL);
+#endif
gsm_quit ();
}
@@ -966,6 +978,7 @@ _client_stop (const char *id,
return FALSE;
}
+#ifdef HAVE_SYSTEMD
static void
maybe_restart_user_bus (GsmManager *manager)
{
@@ -998,6 +1011,7 @@ maybe_restart_user_bus (GsmManager *manager)
g_debug ("GsmManager: reloading user bus failed: %s", error->message);
}
}
+#endif
static void
do_phase_exit (GsmManager *manager)
@@ -1010,8 +1024,10 @@ do_phase_exit (GsmManager *manager)
NULL);
}
+#ifdef HAVE_SYSTEMD
if (!priv->systemd_managed)
maybe_restart_user_bus (manager);
+#endif
end_phase (manager);
}
@@ -1405,10 +1421,12 @@ start_phase (GsmManager *manager)
do_phase_startup (manager);
break;
case GSM_MANAGER_PHASE_RUNNING:
+#ifdef ENABLE_SYSTEMD_JOURNAL
sd_journal_send ("MESSAGE_ID=%s", GSM_MANAGER_STARTUP_SUCCEEDED_MSGID,
"PRIORITY=%d", 5,
"MESSAGE=Entering running state",
NULL);
+#endif
#ifdef HAVE_X11
gsm_xsmp_server_start_accepting_new_clients (priv->xsmp_server);
#endif
@@ -0,0 +1,28 @@
--- gnome-session/gsm-system.c.orig 2024-03-18 19:30:06 UTC
+++ gnome-session/gsm-system.c
@@ -25,6 +25,9 @@
#include "gsm-systemd.h"
+#ifdef HAVE_CONSOLEKIT
+#include "gsm-consolekit.h"
+#endif
enum {
REQUEST_COMPLETED,
@@ -266,6 +269,15 @@ gsm_get_system (void)
g_debug ("Using systemd for session tracking");
}
}
+
+#ifdef HAVE_CONSOLEKIT
+ if (system == NULL) {
+ system = GSM_SYSTEM (gsm_consolekit_new ());
+ if (system != NULL) {
+ g_debug ("Using ConsoleKit for session tracking");
+ }
+ }
+#endif
if (system == NULL) {
system = g_object_new (gsm_system_null_get_type (), NULL);
@@ -0,0 +1,25 @@
--- gnome-session/gsm-systemd.c.orig 2024-03-18 19:30:06 UTC
+++ gnome-session/gsm-systemd.c
@@ -21,6 +21,8 @@
#include "config.h"
#include "gsm-systemd.h"
+#ifdef HAVE_SYSTEMD
+
#include <errno.h>
#include <string.h>
#include <stdlib.h>
@@ -1169,4 +1171,13 @@ sd_proxy_signal_cb (GDBusProxy *proxy,
}
}
+#else
+
+GsmSystemd *
+gsm_systemd_new (void)
+{
+ return NULL;
+}
+
+#endif
@@ -0,0 +1,46 @@
--- gnome-session/gsm-util.c.orig 2024-03-18 19:30:06 UTC
+++ gnome-session/gsm-util.c
@@ -73,12 +73,6 @@ static const char * const variable_unsetlist[] = {
"LC_COLLATE",
"LC_MONETARY",
"LC_MESSAGES",
- "LC_PAPER",
- "LC_NAME",
- "LC_ADDRESS",
- "LC_TELEPHONE",
- "LC_MEASUREMENT",
- "LC_IDENTIFICATION",
"LC_ALL",
NULL
@@ -626,6 +620,7 @@ gsm_util_export_activation_environment (GError **e
return environment_updated;
}
+#ifdef HAVE_SYSTEMD
gboolean
gsm_util_export_user_environment (GError **error)
{
@@ -884,6 +879,7 @@ gsm_util_systemd_reset_failed (GError **error)
return TRUE;
}
+#endif
void
gsm_util_setenv (const char *variable,
@@ -907,12 +903,14 @@ gsm_util_setenv (const char *variable,
g_clear_error (&error);
}
+#ifdef HAVE_SYSTEMD
/* If this fails, the system user session won't get the updated environment
*/
if (!gsm_util_update_user_environment (variable, value, &error)) {
g_debug ("Could not make systemd aware of %s=%s environment variable: %s", variable, value, error->message);
g_clear_error (&error);
}
+#endif
}
const char * const *
@@ -0,0 +1,18 @@
--- gnome-session/gsm-util.h.orig 2024-03-18 19:30:06 UTC
+++ gnome-session/gsm-util.h
@@ -53,6 +53,7 @@ gboolean gsm_util_export_activation_environment (G
const char * const * gsm_util_get_variable_blacklist(void);
gboolean gsm_util_export_activation_environment (GError **error);
+#ifdef HAVE_SYSTEMD
gboolean gsm_util_export_user_environment (GError **error);
gboolean gsm_util_systemd_unit_is_active (const char *unit,
GError **error);
@@ -61,6 +62,7 @@ gboolean gsm_util_systemd_reset_failed (G
GError **error);
gboolean gsm_util_systemd_reset_failed (GError **error);
+#endif
void gsm_quit (void);
@@ -0,0 +1,96 @@
--- gnome-session/main.c.orig 2024-03-18 19:30:06 UTC
+++ gnome-session/main.c
@@ -43,11 +43,14 @@
#include "gsm-system.h"
#include "gsm-fail-whale.h"
+#ifdef ENABLE_SYSTEMD_JOURNAL
#include <systemd/sd-journal.h>
+#endif
#define GSM_DBUS_NAME "org.gnome.SessionManager"
static gboolean systemd_service = FALSE;
+static gboolean use_systemd = USE_SYSTEMD_SESSION;
static gboolean failsafe = FALSE;
static gboolean show_version = FALSE;
static gboolean debug = FALSE;
@@ -280,6 +283,7 @@ initialize_gio (void)
}
}
+#ifdef ENABLE_SYSTEMD_SESSION
static gboolean
leader_term_or_int_signal_cb (gpointer data)
{
@@ -485,6 +489,7 @@ systemd_leader_run(void)
gsm_main ();
exit(0);
}
+#endif /* ENABLE_SYSTEMD_SESSION */
int
main (int argc, char **argv)
@@ -499,7 +504,11 @@ main (int argc, char **argv)
guint name_owner_id;
GOptionContext *options;
static GOptionEntry entries[] = {
+#ifdef ENABLE_SYSTEMD_SESSION
{ "systemd-service", 0, 0, G_OPTION_ARG_NONE, &systemd_service, N_("Running as systemd service"), NULL },
+ { "systemd", 0, 0, G_OPTION_ARG_NONE, &use_systemd, N_("Use systemd session management"), NULL },
+#endif
+ { "builtin", 0, G_OPTION_FLAG_REVERSE, G_OPTION_ARG_NONE, &use_systemd, N_("Use builtin session management (rather than the systemd based one)"), NULL },
{ "autostart", 'a', 0, G_OPTION_ARG_STRING_ARRAY, &override_autostart_dirs, N_("Override standard autostart directories"), N_("AUTOSTART_DIR") },
{ "session", 0, 0, G_OPTION_ARG_STRING, &opt_session_name, N_("Session to use"), N_("SESSION_NAME") },
{ "debug", 0, 0, G_OPTION_ARG_NONE, &debug, N_("Enable debugging code"), NULL },
@@ -553,6 +562,7 @@ main (int argc, char **argv)
* journald picks ups the nicer "gnome-session" as the program
* name instead of whatever shell script GDM happened to use.
*/
+#ifdef ENABLE_SYSTEMD_JOURNAL
if (!debug) {
int journalfd;
@@ -562,6 +572,7 @@ main (int argc, char **argv)
dup2(journalfd, 2);
}
}
+#endif
gdm_log_init ();
gdm_log_set_debug (debug);
@@ -636,12 +647,15 @@ main (int argc, char **argv)
session_name = opt_session_name;
+#ifdef HAVE_SYSTEMD
gsm_util_export_user_environment (&error);
if (error && !g_getenv ("RUNNING_UNDER_GDM"))
g_warning ("Failed to upload environment to systemd: %s", error->message);
g_clear_error (&error);
+#endif
- if (!systemd_service) {
+#ifdef ENABLE_SYSTEMD_SESSION
+ if (use_systemd && !systemd_service) {
const gchar *session_type = NULL;
g_autofree gchar *gnome_session_target = NULL;
@@ -688,6 +702,7 @@ main (int argc, char **argv)
exit (1);
}
}
+#endif /* ENABLE_SYSTEMD_SESSION */
{
gchar *ibus_path;
@@ -724,7 +739,9 @@ main (int argc, char **argv)
gsm_main ();
+#ifdef HAVE_SYSTEMD
gsm_util_export_user_environment (NULL);
+#endif
g_clear_object (&manager);
g_free (gl_renderer);
@@ -0,0 +1,13 @@
--- gnome-session/meson.build.orig 2024-03-18 19:30:06 UTC
+++ gnome-session/meson.build
@@ -60,6 +60,10 @@ endforeach
)
endforeach
+if enable_consolekit
+ sources += files('gsm-consolekit.c')
+endif
+
cflags = [
'-DLOCALE_DIR="@0@"'.format(session_localedir),
'-DDATA_DIR="@0@"'.format(session_pkgdatadir),
+73
View File
@@ -0,0 +1,73 @@
--- meson.build.orig 2024-03-18 19:30:06 UTC
+++ meson.build
@@ -103,19 +103,52 @@ enable_session_selector = get_option('session_selector
# Check for session selector GTK+ UI
enable_session_selector = get_option('session_selector')
-session_bin_deps += dependency('gio-unix-2.0', version: glib_req_version)
+# Check for session tracking backend
+session_tracking = 'null backend'
-# Check for systemd
-systemd_userunitdir = get_option('systemduserunitdir')
-if systemd_userunitdir == ''
- systemd_dep = dependency('systemd', version: '>= 242', required: true)
- systemd_userunitdir = systemd_dep.get_variable(pkgconfig: 'systemduserunitdir',
- pkgconfig_define: ['prefix', session_prefix])
-endif
+enable_systemd = get_option('systemd')
+enable_systemd_session = get_option('systemd_session') != 'disable'
+use_systemd_session = get_option('systemd_session') == 'default'
+enable_systemd_journal = get_option('systemd_journal')
+enable_consolekit = get_option('consolekit')
+if enable_systemd or enable_consolekit
+ session_bin_deps += dependency('gio-unix-2.0', version: glib_req_version)
-libsystemd_dep = dependency('libsystemd', version: '>= 209', required: true)
-session_bin_deps += libsystemd_dep
+ # Check for systemd
+ if enable_systemd
+ systemd_userunitdir = get_option('systemduserunitdir')
+ if systemd_userunitdir == ''
+ systemd_dep = dependency('systemd', version: '>= 242', required: true)
+ systemd_userunitdir = systemd_dep.get_variable(pkgconfig: 'systemduserunitdir',
+ pkgconfig_define: ['prefix', session_prefix])
+ endif
+ libsystemd_dep = dependency('libsystemd', version: '>= 209', required: true)
+ session_bin_deps += libsystemd_dep
+
+ session_tracking = 'systemd'
+ endif
+
+ # Check for ConsoleKit
+ if enable_consolekit
+ systemd_userunitdir = ''
+
+ if enable_systemd
+ session_tracking += ' (with fallback to ConsoleKit)'
+ else
+ session_tracking = 'ConsoleKit'
+ endif
+ endif
+endif
+if enable_systemd_session
+ assert(enable_systemd, 'Systemd support must be enabled when using systemd session management')
+endif
+config_h.set('HAVE_SYSTEMD', enable_systemd)
+config_h.set('ENABLE_SYSTEMD_SESSION', enable_systemd_session)
+config_h.set('ENABLE_SYSTEMD_JOURNAL', enable_systemd_journal)
+config_h.set('HAVE_CONSOLEKIT', enable_consolekit)
+config_h.set10('USE_SYSTEMD_SESSION', use_systemd_session)
+
configure_file(
output: 'config.h',
configuration: config_h
@@ -151,6 +184,7 @@ summary_options = {
'Build manpages': get_option('man'),
'Systemd Units Directory': systemd_userunitdir,
'Session Selector Enabled': enable_session_selector,
+ 'Session tracking': session_tracking,
}
summary_dirs = {
@@ -0,0 +1,12 @@
--- meson_options.txt.orig 2024-03-18 19:30:06 UTC
+++ meson_options.txt
@@ -1,5 +1,9 @@ option('session_selector', type: 'boolean', value: fal
option('deprecation_flags', type: 'boolean', value: false, description: 'use *_DISABLE_DEPRECATED flags')
option('session_selector', type: 'boolean', value: false, description: 'enable building a custom session selector dialog')
+option('systemd', type: 'boolean', value: true, description: 'Use systemd')
+option('systemd_session', type: 'combo', choices: ['disable', 'enable', 'default'], value: 'default', description: 'Whether to include systemd session support and use it by default')
+option('systemd_journal', type: 'boolean', value:'true', description: 'Send log to systemd-journal')
option('systemduserunitdir', type: 'string', description: 'Directory for systemd user service files')
+option('consolekit', type: 'boolean', value: false, description: 'Use consolekit')
option('docbook', type: 'boolean', value: true, description: 'build documentation')
option('man', type: 'boolean', value: true, description: 'build documentation (requires xmlto)')
@@ -0,0 +1,18 @@
--- tools/meson.build.orig 2024-09-19 12:36:55 UTC
+++ tools/meson.build
@@ -2,9 +2,14 @@ programs = [
programs = [
# name, deps, cflags, install_dir
- ['gnome-session-ctl', session_bin_deps, cflags, session_libexecdir],
['gnome-session-inhibit', session_deps, cflags, session_bindir],
]
+
+if enable_systemd_session
+ programs += [
+ ['gnome-session-ctl', session_bin_deps, cflags, session_libexecdir],
+ ]
+endif
if have_x11
deps = session_deps + [
+117 -117
View File
@@ -1,5 +1,4 @@
bin/gnome-session
bin/gnome-session-custom-session
bin/gnome-session-inhibit
bin/gnome-session-quit
libexec/gnome-session-binary
@@ -7,126 +6,127 @@ libexec/gnome-session-check-accelerated
libexec/gnome-session-check-accelerated-gl-helper
libexec/gnome-session-check-accelerated-gles-helper
libexec/gnome-session-failed
share/man/man1/gnome-session-inhibit.1.gz
share/man/man1/gnome-session-quit.1.gz
share/man/man1/gnome-session.1.gz
share/GConf/gsettings/gnome-session.convert
%%DATADIR%%/hardware-compatibility
%%DATADIR%%/sessions/gnome-dummy.session
%%DATADIR%%/sessions/gnome.session
share/locale/ab/LC_MESSAGES/gnome-session-42.mo
share/locale/af/LC_MESSAGES/gnome-session-42.mo
share/locale/am/LC_MESSAGES/gnome-session-42.mo
share/locale/an/LC_MESSAGES/gnome-session-42.mo
share/locale/ar/LC_MESSAGES/gnome-session-42.mo
share/locale/as/LC_MESSAGES/gnome-session-42.mo
share/locale/ast/LC_MESSAGES/gnome-session-42.mo
share/locale/az/LC_MESSAGES/gnome-session-42.mo
share/locale/be/LC_MESSAGES/gnome-session-42.mo
share/locale/be@latin/LC_MESSAGES/gnome-session-42.mo
share/locale/bg/LC_MESSAGES/gnome-session-42.mo
share/locale/bn/LC_MESSAGES/gnome-session-42.mo
share/locale/bn_IN/LC_MESSAGES/gnome-session-42.mo
share/locale/br/LC_MESSAGES/gnome-session-42.mo
share/locale/bs/LC_MESSAGES/gnome-session-42.mo
share/locale/ca/LC_MESSAGES/gnome-session-42.mo
share/locale/ca@valencia/LC_MESSAGES/gnome-session-42.mo
share/locale/ckb/LC_MESSAGES/gnome-session-42.mo
share/locale/crh/LC_MESSAGES/gnome-session-42.mo
share/locale/cs/LC_MESSAGES/gnome-session-42.mo
share/locale/csb/LC_MESSAGES/gnome-session-42.mo
share/locale/cy/LC_MESSAGES/gnome-session-42.mo
share/locale/da/LC_MESSAGES/gnome-session-42.mo
share/locale/de/LC_MESSAGES/gnome-session-42.mo
share/locale/dz/LC_MESSAGES/gnome-session-42.mo
share/locale/el/LC_MESSAGES/gnome-session-42.mo
share/locale/en@shaw/LC_MESSAGES/gnome-session-42.mo
share/locale/en_CA/LC_MESSAGES/gnome-session-42.mo
share/locale/en_GB/LC_MESSAGES/gnome-session-42.mo
share/locale/eo/LC_MESSAGES/gnome-session-42.mo
share/locale/es/LC_MESSAGES/gnome-session-42.mo
share/locale/et/LC_MESSAGES/gnome-session-42.mo
share/locale/eu/LC_MESSAGES/gnome-session-42.mo
share/locale/fa/LC_MESSAGES/gnome-session-42.mo
share/locale/fi/LC_MESSAGES/gnome-session-42.mo
share/locale/fr/LC_MESSAGES/gnome-session-42.mo
share/locale/fur/LC_MESSAGES/gnome-session-42.mo
share/locale/fy/LC_MESSAGES/gnome-session-42.mo
share/locale/ga/LC_MESSAGES/gnome-session-42.mo
share/locale/gd/LC_MESSAGES/gnome-session-42.mo
share/locale/gl/LC_MESSAGES/gnome-session-42.mo
share/locale/gu/LC_MESSAGES/gnome-session-42.mo
share/locale/ha/LC_MESSAGES/gnome-session-42.mo
share/locale/he/LC_MESSAGES/gnome-session-42.mo
share/locale/hi/LC_MESSAGES/gnome-session-42.mo
share/locale/hr/LC_MESSAGES/gnome-session-42.mo
share/locale/hu/LC_MESSAGES/gnome-session-42.mo
share/locale/hy/LC_MESSAGES/gnome-session-42.mo
share/locale/id/LC_MESSAGES/gnome-session-42.mo
share/locale/ig/LC_MESSAGES/gnome-session-42.mo
share/locale/is/LC_MESSAGES/gnome-session-42.mo
share/locale/it/LC_MESSAGES/gnome-session-42.mo
share/locale/ja/LC_MESSAGES/gnome-session-42.mo
share/locale/ka/LC_MESSAGES/gnome-session-42.mo
share/locale/kab/LC_MESSAGES/gnome-session-42.mo
share/locale/kk/LC_MESSAGES/gnome-session-42.mo
share/locale/km/LC_MESSAGES/gnome-session-42.mo
share/locale/kn/LC_MESSAGES/gnome-session-42.mo
share/locale/ko/LC_MESSAGES/gnome-session-42.mo
share/locale/ku/LC_MESSAGES/gnome-session-42.mo
share/locale/lt/LC_MESSAGES/gnome-session-42.mo
share/locale/lv/LC_MESSAGES/gnome-session-42.mo
share/locale/mai/LC_MESSAGES/gnome-session-42.mo
share/locale/mg/LC_MESSAGES/gnome-session-42.mo
share/locale/mi/LC_MESSAGES/gnome-session-42.mo
share/locale/mjw/LC_MESSAGES/gnome-session-42.mo
share/locale/mk/LC_MESSAGES/gnome-session-42.mo
share/locale/ml/LC_MESSAGES/gnome-session-42.mo
share/locale/mn/LC_MESSAGES/gnome-session-42.mo
share/locale/mr/LC_MESSAGES/gnome-session-42.mo
share/locale/ms/LC_MESSAGES/gnome-session-42.mo
share/locale/nb/LC_MESSAGES/gnome-session-42.mo
share/locale/nds/LC_MESSAGES/gnome-session-42.mo
share/locale/ne/LC_MESSAGES/gnome-session-42.mo
share/locale/nl/LC_MESSAGES/gnome-session-42.mo
share/locale/nn/LC_MESSAGES/gnome-session-42.mo
share/locale/nso/LC_MESSAGES/gnome-session-42.mo
share/locale/oc/LC_MESSAGES/gnome-session-42.mo
share/locale/or/LC_MESSAGES/gnome-session-42.mo
share/locale/pa/LC_MESSAGES/gnome-session-42.mo
share/locale/pl/LC_MESSAGES/gnome-session-42.mo
share/locale/ps/LC_MESSAGES/gnome-session-42.mo
share/locale/pt/LC_MESSAGES/gnome-session-42.mo
share/locale/pt_BR/LC_MESSAGES/gnome-session-42.mo
share/locale/ro/LC_MESSAGES/gnome-session-42.mo
share/locale/ru/LC_MESSAGES/gnome-session-42.mo
share/locale/rw/LC_MESSAGES/gnome-session-42.mo
share/locale/si/LC_MESSAGES/gnome-session-42.mo
share/locale/sk/LC_MESSAGES/gnome-session-42.mo
share/locale/sl/LC_MESSAGES/gnome-session-42.mo
share/locale/sq/LC_MESSAGES/gnome-session-42.mo
share/locale/sr/LC_MESSAGES/gnome-session-42.mo
share/locale/sr@latin/LC_MESSAGES/gnome-session-42.mo
share/locale/sv/LC_MESSAGES/gnome-session-42.mo
share/locale/ta/LC_MESSAGES/gnome-session-42.mo
share/locale/te/LC_MESSAGES/gnome-session-42.mo
share/locale/tg/LC_MESSAGES/gnome-session-42.mo
share/locale/th/LC_MESSAGES/gnome-session-42.mo
share/locale/tk/LC_MESSAGES/gnome-session-42.mo
share/locale/tr/LC_MESSAGES/gnome-session-42.mo
share/locale/ug/LC_MESSAGES/gnome-session-42.mo
share/locale/uk/LC_MESSAGES/gnome-session-42.mo
share/locale/uz/LC_MESSAGES/gnome-session-42.mo
share/locale/uz@cyrillic/LC_MESSAGES/gnome-session-42.mo
share/locale/vi/LC_MESSAGES/gnome-session-42.mo
share/locale/wa/LC_MESSAGES/gnome-session-42.mo
share/locale/xh/LC_MESSAGES/gnome-session-42.mo
share/locale/yo/LC_MESSAGES/gnome-session-42.mo
share/locale/zh_CN/LC_MESSAGES/gnome-session-42.mo
share/locale/zh_HK/LC_MESSAGES/gnome-session-42.mo
share/locale/zh_TW/LC_MESSAGES/gnome-session-42.mo
share/locale/zu/LC_MESSAGES/gnome-session-42.mo
share/locale/ab/LC_MESSAGES/gnome-session-%%VERSION%%.mo
share/locale/af/LC_MESSAGES/gnome-session-%%VERSION%%.mo
share/locale/am/LC_MESSAGES/gnome-session-%%VERSION%%.mo
share/locale/an/LC_MESSAGES/gnome-session-%%VERSION%%.mo
share/locale/ar/LC_MESSAGES/gnome-session-%%VERSION%%.mo
share/locale/as/LC_MESSAGES/gnome-session-%%VERSION%%.mo
share/locale/ast/LC_MESSAGES/gnome-session-%%VERSION%%.mo
share/locale/az/LC_MESSAGES/gnome-session-%%VERSION%%.mo
share/locale/be/LC_MESSAGES/gnome-session-%%VERSION%%.mo
share/locale/be@latin/LC_MESSAGES/gnome-session-%%VERSION%%.mo
share/locale/bg/LC_MESSAGES/gnome-session-%%VERSION%%.mo
share/locale/bn/LC_MESSAGES/gnome-session-%%VERSION%%.mo
share/locale/bn_IN/LC_MESSAGES/gnome-session-%%VERSION%%.mo
share/locale/br/LC_MESSAGES/gnome-session-%%VERSION%%.mo
share/locale/bs/LC_MESSAGES/gnome-session-%%VERSION%%.mo
share/locale/ca/LC_MESSAGES/gnome-session-%%VERSION%%.mo
share/locale/ca@valencia/LC_MESSAGES/gnome-session-%%VERSION%%.mo
share/locale/ckb/LC_MESSAGES/gnome-session-%%VERSION%%.mo
share/locale/crh/LC_MESSAGES/gnome-session-%%VERSION%%.mo
share/locale/cs/LC_MESSAGES/gnome-session-%%VERSION%%.mo
share/locale/csb/LC_MESSAGES/gnome-session-%%VERSION%%.mo
share/locale/cy/LC_MESSAGES/gnome-session-%%VERSION%%.mo
share/locale/da/LC_MESSAGES/gnome-session-%%VERSION%%.mo
share/locale/de/LC_MESSAGES/gnome-session-%%VERSION%%.mo
share/locale/dz/LC_MESSAGES/gnome-session-%%VERSION%%.mo
share/locale/el/LC_MESSAGES/gnome-session-%%VERSION%%.mo
share/locale/en@shaw/LC_MESSAGES/gnome-session-%%VERSION%%.mo
share/locale/en_CA/LC_MESSAGES/gnome-session-%%VERSION%%.mo
share/locale/en_GB/LC_MESSAGES/gnome-session-%%VERSION%%.mo
share/locale/eo/LC_MESSAGES/gnome-session-%%VERSION%%.mo
share/locale/es/LC_MESSAGES/gnome-session-%%VERSION%%.mo
share/locale/et/LC_MESSAGES/gnome-session-%%VERSION%%.mo
share/locale/eu/LC_MESSAGES/gnome-session-%%VERSION%%.mo
share/locale/fa/LC_MESSAGES/gnome-session-%%VERSION%%.mo
share/locale/fi/LC_MESSAGES/gnome-session-%%VERSION%%.mo
share/locale/fr/LC_MESSAGES/gnome-session-%%VERSION%%.mo
share/locale/fur/LC_MESSAGES/gnome-session-%%VERSION%%.mo
share/locale/fy/LC_MESSAGES/gnome-session-%%VERSION%%.mo
share/locale/ga/LC_MESSAGES/gnome-session-%%VERSION%%.mo
share/locale/gd/LC_MESSAGES/gnome-session-%%VERSION%%.mo
share/locale/gl/LC_MESSAGES/gnome-session-%%VERSION%%.mo
share/locale/gu/LC_MESSAGES/gnome-session-%%VERSION%%.mo
share/locale/ha/LC_MESSAGES/gnome-session-%%VERSION%%.mo
share/locale/he/LC_MESSAGES/gnome-session-%%VERSION%%.mo
share/locale/hi/LC_MESSAGES/gnome-session-%%VERSION%%.mo
share/locale/hr/LC_MESSAGES/gnome-session-%%VERSION%%.mo
share/locale/hu/LC_MESSAGES/gnome-session-%%VERSION%%.mo
share/locale/hy/LC_MESSAGES/gnome-session-%%VERSION%%.mo
share/locale/id/LC_MESSAGES/gnome-session-%%VERSION%%.mo
share/locale/ie/LC_MESSAGES/gnome-session-%%VERSION%%.mo
share/locale/ig/LC_MESSAGES/gnome-session-%%VERSION%%.mo
share/locale/is/LC_MESSAGES/gnome-session-%%VERSION%%.mo
share/locale/it/LC_MESSAGES/gnome-session-%%VERSION%%.mo
share/locale/ja/LC_MESSAGES/gnome-session-%%VERSION%%.mo
share/locale/ka/LC_MESSAGES/gnome-session-%%VERSION%%.mo
share/locale/kab/LC_MESSAGES/gnome-session-%%VERSION%%.mo
share/locale/kk/LC_MESSAGES/gnome-session-%%VERSION%%.mo
share/locale/km/LC_MESSAGES/gnome-session-%%VERSION%%.mo
share/locale/kn/LC_MESSAGES/gnome-session-%%VERSION%%.mo
share/locale/ko/LC_MESSAGES/gnome-session-%%VERSION%%.mo
share/locale/ku/LC_MESSAGES/gnome-session-%%VERSION%%.mo
share/locale/lt/LC_MESSAGES/gnome-session-%%VERSION%%.mo
share/locale/lv/LC_MESSAGES/gnome-session-%%VERSION%%.mo
share/locale/mai/LC_MESSAGES/gnome-session-%%VERSION%%.mo
share/locale/mg/LC_MESSAGES/gnome-session-%%VERSION%%.mo
share/locale/mi/LC_MESSAGES/gnome-session-%%VERSION%%.mo
share/locale/mjw/LC_MESSAGES/gnome-session-%%VERSION%%.mo
share/locale/mk/LC_MESSAGES/gnome-session-%%VERSION%%.mo
share/locale/ml/LC_MESSAGES/gnome-session-%%VERSION%%.mo
share/locale/mn/LC_MESSAGES/gnome-session-%%VERSION%%.mo
share/locale/mr/LC_MESSAGES/gnome-session-%%VERSION%%.mo
share/locale/ms/LC_MESSAGES/gnome-session-%%VERSION%%.mo
share/locale/nb/LC_MESSAGES/gnome-session-%%VERSION%%.mo
share/locale/nds/LC_MESSAGES/gnome-session-%%VERSION%%.mo
share/locale/ne/LC_MESSAGES/gnome-session-%%VERSION%%.mo
share/locale/nl/LC_MESSAGES/gnome-session-%%VERSION%%.mo
share/locale/nn/LC_MESSAGES/gnome-session-%%VERSION%%.mo
share/locale/nso/LC_MESSAGES/gnome-session-%%VERSION%%.mo
share/locale/oc/LC_MESSAGES/gnome-session-%%VERSION%%.mo
share/locale/or/LC_MESSAGES/gnome-session-%%VERSION%%.mo
share/locale/pa/LC_MESSAGES/gnome-session-%%VERSION%%.mo
share/locale/pl/LC_MESSAGES/gnome-session-%%VERSION%%.mo
share/locale/ps/LC_MESSAGES/gnome-session-%%VERSION%%.mo
share/locale/pt/LC_MESSAGES/gnome-session-%%VERSION%%.mo
share/locale/pt_BR/LC_MESSAGES/gnome-session-%%VERSION%%.mo
share/locale/ro/LC_MESSAGES/gnome-session-%%VERSION%%.mo
share/locale/ru/LC_MESSAGES/gnome-session-%%VERSION%%.mo
share/locale/rw/LC_MESSAGES/gnome-session-%%VERSION%%.mo
share/locale/si/LC_MESSAGES/gnome-session-%%VERSION%%.mo
share/locale/sk/LC_MESSAGES/gnome-session-%%VERSION%%.mo
share/locale/sl/LC_MESSAGES/gnome-session-%%VERSION%%.mo
share/locale/sq/LC_MESSAGES/gnome-session-%%VERSION%%.mo
share/locale/sr/LC_MESSAGES/gnome-session-%%VERSION%%.mo
share/locale/sr@latin/LC_MESSAGES/gnome-session-%%VERSION%%.mo
share/locale/sv/LC_MESSAGES/gnome-session-%%VERSION%%.mo
share/locale/ta/LC_MESSAGES/gnome-session-%%VERSION%%.mo
share/locale/te/LC_MESSAGES/gnome-session-%%VERSION%%.mo
share/locale/tg/LC_MESSAGES/gnome-session-%%VERSION%%.mo
share/locale/th/LC_MESSAGES/gnome-session-%%VERSION%%.mo
share/locale/tk/LC_MESSAGES/gnome-session-%%VERSION%%.mo
share/locale/tr/LC_MESSAGES/gnome-session-%%VERSION%%.mo
share/locale/ug/LC_MESSAGES/gnome-session-%%VERSION%%.mo
share/locale/uk/LC_MESSAGES/gnome-session-%%VERSION%%.mo
share/locale/uz/LC_MESSAGES/gnome-session-%%VERSION%%.mo
share/locale/uz@cyrillic/LC_MESSAGES/gnome-session-%%VERSION%%.mo
share/locale/vi/LC_MESSAGES/gnome-session-%%VERSION%%.mo
share/locale/wa/LC_MESSAGES/gnome-session-%%VERSION%%.mo
share/locale/xh/LC_MESSAGES/gnome-session-%%VERSION%%.mo
share/locale/yo/LC_MESSAGES/gnome-session-%%VERSION%%.mo
share/locale/zh_CN/LC_MESSAGES/gnome-session-%%VERSION%%.mo
share/locale/zh_HK/LC_MESSAGES/gnome-session-%%VERSION%%.mo
share/locale/zh_TW/LC_MESSAGES/gnome-session-%%VERSION%%.mo
share/locale/zu/LC_MESSAGES/gnome-session-%%VERSION%%.mo
share/man/man1/gnome-session-inhibit.1.gz
share/man/man1/gnome-session-quit.1.gz
share/man/man1/gnome-session.1.gz
share/wayland-sessions/gnome-wayland.desktop
share/wayland-sessions/gnome.desktop
share/xdg-desktop-portal/gnome-portals.conf
share/xsessions/gnome-xorg.desktop
share/xsessions/gnome.desktop