SHA256
1
0
forked from pool/gdm
gdm/gdm-desktop-session-env-pam.patch

166 lines
7.1 KiB
Diff

Index: gdm-3.19.90/daemon/gdm-session-worker.c
===================================================================
--- gdm-3.19.90.orig/daemon/gdm-session-worker.c
+++ gdm-3.19.90/daemon/gdm-session-worker.c
@@ -175,6 +175,8 @@ struct GdmSessionWorkerPrivate
GdmSessionSettings *user_settings;
GDBusMethodInvocation *pending_invocation;
+
+ char *suse_session_name;
};
enum {
@@ -1045,6 +1047,9 @@ gdm_session_worker_initialize_pam (GdmSe
gdm_session_worker_set_environment_variable (worker, "XDG_SESSION_CLASS", "greeter");
}
+ if (worker->priv->suse_session_name)
+ gdm_session_worker_set_environment_variable (worker, "DESKTOP_SESSION", worker->priv->suse_session_name);
+
g_debug ("GdmSessionWorker: state SETUP_COMPLETE");
worker->priv->state = GDM_SESSION_WORKER_STATE_SETUP_COMPLETE;
@@ -2306,6 +2311,12 @@ gdm_session_worker_handle_set_session_na
{
GdmSessionWorker *worker = GDM_SESSION_WORKER (object);
g_debug ("GdmSessionWorker: session name set to %s", session_name);
+
+ if (worker->priv->pam_handle != NULL)
+ gdm_session_worker_set_environment_variable (worker, "DESKTOP_SESSION", session_name);
+ g_free (worker->priv->suse_session_name);
+ worker->priv->suse_session_name = g_strdup (session_name);
+
gdm_session_settings_set_session_name (worker->priv->user_settings,
session_name);
gdm_dbus_worker_complete_set_session_name (object, invocation);
@@ -2313,6 +2324,23 @@ gdm_session_worker_handle_set_session_na
}
static gboolean
+gdm_session_worker_handle_set_default_session_name (GdmDBusWorker *object,
+ GDBusMethodInvocation *invocation,
+ const char *session_name)
+{
+ GdmSessionWorker *worker = GDM_SESSION_WORKER (object);
+ g_debug ("GdmSessionWorker: default session name set to %s", session_name);
+
+ if (worker->priv->pam_handle != NULL)
+ gdm_session_worker_set_environment_variable (worker, "DESKTOP_SESSION", session_name);
+ g_free (worker->priv->suse_session_name);
+ worker->priv->suse_session_name = g_strdup (session_name);
+
+ gdm_dbus_worker_complete_set_default_session_name (object, invocation);
+ return TRUE;
+}
+
+static gboolean
gdm_session_worker_handle_set_session_display_mode (GdmDBusWorker *object,
GDBusMethodInvocation *invocation,
const char *str)
@@ -3119,6 +3147,7 @@ worker_interface_init (GdmDBusWorkerIfac
interface->handle_open = gdm_session_worker_handle_open;
interface->handle_set_language_name = gdm_session_worker_handle_set_language_name;
interface->handle_set_session_name = gdm_session_worker_handle_set_session_name;
+ interface->handle_set_default_session_name = gdm_session_worker_handle_set_default_session_name;
interface->handle_set_session_display_mode = gdm_session_worker_handle_set_session_display_mode;
interface->handle_set_environment_variable = gdm_session_worker_handle_set_environment_variable;
interface->handle_start_program = gdm_session_worker_handle_start_program;
@@ -3236,6 +3265,8 @@ gdm_session_worker_finalize (GObject *ob
g_hash_table_unref (worker->priv->reauthentication_requests);
+ g_free (worker->priv->suse_session_name);
+
G_OBJECT_CLASS (gdm_session_worker_parent_class)->finalize (object);
}
Index: gdm-3.19.90/daemon/gdm-session-worker.xml
===================================================================
--- gdm-3.19.90.orig/daemon/gdm-session-worker.xml
+++ gdm-3.19.90/daemon/gdm-session-worker.xml
@@ -13,6 +13,9 @@
<method name="SetSessionName">
<arg name="session_name" direction="in" type="s" />
</method>
+ <method name="SetDefaultSessionName">
+ <arg name="default_session_name" direction="in" type="s"/>
+ </method>
<method name="SetSessionDisplayMode">
<arg name="mode" direction="in" type="s"/>
</method>
Index: gdm-3.19.90/daemon/gdm-session.c
===================================================================
--- gdm-3.19.90.orig/daemon/gdm-session.c
+++ gdm-3.19.90/daemon/gdm-session.c
@@ -190,6 +190,8 @@ G_DEFINE_TYPE (GdmSession,
gdm_session,
G_TYPE_OBJECT);
+static const char *get_session_name (GdmSession *self);
+
static GdmSessionConversation *
find_conversation_by_name (GdmSession *self,
const char *service_name)
@@ -607,6 +609,9 @@ get_default_session_name (GdmSession *se
static void
gdm_session_defaults_changed (GdmSession *self)
{
+ GHashTableIter iter;
+ gpointer key, value;
+ const char *text;
update_session_type (self);
@@ -616,6 +621,19 @@ gdm_session_defaults_changed (GdmSession
gdm_dbus_greeter_emit_default_session_name_changed (self->priv->greeter_interface,
get_default_session_name (self));
}
+
+ text = get_session_name (self);
+
+ g_hash_table_iter_init (&iter, self->priv->conversations);
+ while (g_hash_table_iter_next (&iter, &key, &value)) {
+ GdmSessionConversation *conversation;
+
+ conversation = (GdmSessionConversation *) value;
+
+ gdm_dbus_worker_call_set_default_session_name (conversation->worker_proxy,
+ text,
+ NULL, NULL, NULL);
+ }
}
void
@@ -924,6 +942,10 @@ worker_on_saved_session_name_read (GdmDB
if (strcmp (session_name,
get_default_session_name (self)) != 0) {
+ GHashTableIter iter;
+ gpointer key, value;
+ const char *text;
+
g_free (self->priv->saved_session);
self->priv->saved_session = g_strdup (session_name);
@@ -931,6 +953,19 @@ worker_on_saved_session_name_read (GdmDB
gdm_dbus_greeter_emit_default_session_name_changed (self->priv->greeter_interface,
session_name);
}
+
+ text = get_session_name (self);
+
+ g_hash_table_iter_init (&iter, self->priv->conversations);
+ while (g_hash_table_iter_next (&iter, &key, &value)) {
+ GdmSessionConversation *conversation;
+
+ conversation = (GdmSessionConversation *) value;
+
+ gdm_dbus_worker_call_set_default_session_name (conversation->worker_proxy,
+ text,
+ NULL, NULL, NULL);
+ }
}
}