On Mon, 12 Jan 2015 13:37:29 +0000 Mike Gabriel <mike.gabr...@das-netzwerkteam.de> wrote: > On Mo 12 Jan 2015 13:38:40 CET, Faidon Liambotis wrote: > > > Since upstream commit[1] 8a20baf39f781184d6126e0947e9fd4d9a115fab, > > mate-session-manager spawns gnome-keyring-daemon, with no option to turn > > it off, or pass arguments to it (such as --components). > > > > While this is bad in itself, it gets worse: keyring is spawned *after* > > the regular user-configured autostart programs are run. gnome-keyring's > > default set of components includes a GPG & a SSH agent and rightfully > > exports SSH_AUTH_SOCK and GPG_AGENT_INFO.
The gnome compat code is one of the first things to run, even before the main manager is started that handles autostart. I am surpised you see it being run after autostart... Start mate-session with --debug and look for "MsmGnome" in the log to see when it is run. > The "clobbering" could be disabled via gconf in GNOMEv2 and I am > pretty sure there is something similar possible by manipulating with > dconf-editor. There is no way to disable it atm other than removing gnome-keyring. The reason it is run this way is that MATE relies on gnome-keyring/libsecret instead of the forked 2.32 versions. And as gnome-keyring does not export the env variables we run gnome-keyring which outputs the variables that mate-session then exports them before autostarting the wm, desktop etc etc.. Attached is a preliminary patch that uses a gsettings key to determine which parts of the gnome compat should be started. Modify the list in gnome-compat-startup and remove the 'keyring' value. This should stop the "clobbering" of the variables. ~infirit
From 38334a705a479b60c54f2481a14751bd41deeffb Mon Sep 17 00:00:00 2001 From: infirit <infi...@gmail.com> Date: Mon, 12 Jan 2015 20:38:42 +0100 Subject: [PATCH 1/1] msmgnome: Allow users to disable one or both compatibility options --- data/org.mate.session.gschema.xml.in.in | 5 ++++ mate-session/msm-gnome.c | 41 +++++++++++++++++++++++++++++---- 2 files changed, 41 insertions(+), 5 deletions(-) diff --git a/data/org.mate.session.gschema.xml.in.in b/data/org.mate.session.gschema.xml.in.in index 2415c67..14e8da4 100644 --- a/data/org.mate.session.gschema.xml.in.in +++ b/data/org.mate.session.gschema.xml.in.in @@ -30,6 +30,11 @@ <_summary>Required session components</_summary> <_description>List of components that are required as part of the session. (Each element names a key under "/org/mate/desktop/session/required_components"). The Startup Applications preferences tool will not normally allow users to remove a required component from the session, and the session manager will automatically add the required components back to the session at login time if they do get removed.</_description> </key> + <key name="gnome-compat-startup" type="as"> + <default>[ 'keyring', 'smproxy' ]</default> + <_summary>Control gnome compatibility componnent startup</_summary> + <_description>Control which compatibility components to start.</_description> + </key> <child name="required-components" schema="org.mate.session.required-components"/> </schema> <schema id="org.mate.session.required-components" path="/org/mate/desktop/session/required-components/"> diff --git a/mate-session/msm-gnome.c b/mate-session/msm-gnome.c index 661d9e3..72f5493 100644 --- a/mate-session/msm-gnome.c +++ b/mate-session/msm-gnome.c @@ -37,9 +37,13 @@ #include <gtk/gtk.h> #include <gdk/gdkx.h> +#include <gio/gio.h> #include "msm-gnome.h" +#define GSM_SCHEMA "org.mate.session" +#define GSM_GNOME_COMPAT_STARTUP_KEY "gnome-compat-startup" + #define GNOME_KEYRING_DAEMON "gnome-keyring-daemon" @@ -231,16 +235,43 @@ msm_compat_gnome_smproxy_shutdown (void) void msm_gnome_start (void) { + GSettings* settings; + gchar **array; + GList *startup = NULL; + gint i; + if (gnome_compat_started == TRUE) return; - g_debug ("MsmGnome: starting"); - - msm_compat_gnome_smproxy_startup (); + settings = g_settings_new (GSM_SCHEMA); + array = g_settings_get_strv (settings, GSM_GNOME_COMPAT_STARTUP_KEY); + if (array) { + for (i = 0; array[i]; i++) { + startup = g_list_append (startup, g_strdup (array[i])); + } + } + g_strfreev (array); + g_object_unref (settings); + + if (startup != NULL) { + if (g_list_find_custom (startup, "smproxy", (GCompareFunc) strcmp) != NULL) { + g_debug ("MsmGnome: starting smproxy"); + msm_compat_gnome_smproxy_startup (); + gnome_compat_started = TRUE; + } else if (g_list_find_custom (startup, "keyring", (GCompareFunc) strcmp) != NULL) { + g_debug ("MsmGnome: starting keyring"); + gnome_keyring_daemon_startup (); + gnome_compat_started = TRUE; + } else { + g_debug ("MsmGnome: unknown component, ignoring"); + } - gnome_keyring_daemon_startup (); + g_list_foreach (startup, (GFunc) g_free, NULL); + g_list_free (startup); - gnome_compat_started = TRUE; + } else { + g_debug ("MsmGnome: No components found to start"); + } } -- 2.2.1