From 2d6d95e4e90fae014fc5615ab39fe64ba49d9a29 Mon Sep 17 00:00:00 2001
From: Ray Strode <rstrode@redhat.com>
Date: Thu, 21 Jan 2016 10:27:58 -0500
Subject: [PATCH] session: make sure greeter is GNOME session even if gnome
isn't installed
We figure out the XDG_CURRENT_DESKTOP by looking at the session that's
use for login. For the greeter, we don't use a session, at all, but
instead a directly specified program. Still, we're determining the
XDG_CURRENT_DESKTOP for the greeter based on what default session
gets picked. On KDE only setups, the greeter will get marked as
a KDE session which will prevent gnome-settings-daemon from starting
properly.
This commit changes the code so that greeter sessions, don't rely
on the default session desktop file.
https://bugzilla.gnome.org/show_bug.cgi?id=760943
---
daemon/gdm-session.c | 24 +++++++++++++++---------
1 file changed, 15 insertions(+), 9 deletions(-)
diff --git a/daemon/gdm-session.c b/daemon/gdm-session.c
index 647db86..ae94999 100644
--- a/daemon/gdm-session.c
+++ b/daemon/gdm-session.c
@@ -2502,60 +2502,64 @@ get_session_name (GdmSession *self)
return get_default_session_name (self);
}
static char *
get_session_command (GdmSession *self)
{
gboolean res;
char *command;
const char *session_name;
session_name = get_session_name (self);
command = NULL;
res = get_session_command_for_name (session_name, &command);
if (! res) {
g_critical ("Cannot find a command for specified session: %s", session_name);
exit (1);
}
return command;
}
static gchar *
get_session_desktop_names (GdmSession *self)
{
gchar *filename;
GKeyFile *keyfile;
gchar *desktop_names = NULL;
+ if (self->priv->selected_program != NULL) {
+ return g_strdup ("GNOME-Greeter:GNOME");
+ }
+
filename = g_strdup_printf ("%s.desktop", get_session_name (self));
keyfile = load_key_file_for_file (filename, NULL);
if (keyfile != NULL) {
gchar **names;
names = g_key_file_get_string_list (keyfile, G_KEY_FILE_DESKTOP_GROUP,
"DesktopNames", NULL, NULL);
if (names != NULL) {
desktop_names = g_strjoinv (":", names);
g_strfreev (names);
}
}
g_key_file_free (keyfile);
g_free (filename);
return desktop_names;
}
void
gdm_session_set_environment_variable (GdmSession *self,
const char *key,
const char *value)
{
g_return_if_fail (key != NULL);
g_return_if_fail (value != NULL);
g_hash_table_replace (self->priv->environment,
g_strdup (key),
g_strdup (value));
@@ -2565,69 +2569,71 @@ static void
set_up_session_language (GdmSession *self)
{
char **environment;
int i;
const char *value;
environment = g_listenv ();
for (i = 0; environment[i] != NULL; i++) {
if (strcmp (environment[i], "LANG") != 0 &&
strcmp (environment[i], "LANGUAGE") != 0 &&
!g_str_has_prefix (environment[i], "LC_")) {
continue;
}
value = g_getenv (environment[i]);
gdm_session_set_environment_variable (self,
environment[i],
value);
}
g_strfreev (environment);
}
static void
set_up_session_environment (GdmSession *self)
{
GdmSessionDisplayMode display_mode;
gchar *desktop_names;
char *locale;
- gdm_session_set_environment_variable (self,
- "GDMSESSION",
- get_session_name (self));
- gdm_session_set_environment_variable (self,
- "DESKTOP_SESSION",
- get_session_name (self));
- gdm_session_set_environment_variable (self,
- "XDG_SESSION_DESKTOP",
- get_session_name (self));
+ if (self->priv->selected_program == NULL) {
+ gdm_session_set_environment_variable (self,
+ "GDMSESSION",
+ get_session_name (self));
+ gdm_session_set_environment_variable (self,
+ "DESKTOP_SESSION",
+ get_session_name (self));
+ gdm_session_set_environment_variable (self,
+ "XDG_SESSION_DESKTOP",
+ get_session_name (self));
+ }
desktop_names = get_session_desktop_names (self);
if (desktop_names != NULL) {
gdm_session_set_environment_variable (self, "XDG_CURRENT_DESKTOP", desktop_names);
}
set_up_session_language (self);
locale = g_strdup (get_default_language_name (self));
if (locale != NULL && locale[0] != '\0') {
gdm_session_set_environment_variable (self,
"LANG",
locale);
gdm_session_set_environment_variable (self,
"GDM_LANG",
locale);
}
g_free (locale);
display_mode = gdm_session_get_display_mode (self);
if (display_mode == GDM_SESSION_DISPLAY_MODE_REUSE_VT) {
gdm_session_set_environment_variable (self,
"DISPLAY",
self->priv->display_name);
if (self->priv->user_x11_authority_file != NULL) {
gdm_session_set_environment_variable (self,
"XAUTHORITY",
--
2.8.1