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