diff --git a/daemon/gdm-x-session.c b/daemon/gdm-x-session.c
index ed01fbe52..de3a6e647 100644
--- a/daemon/gdm-x-session.c
+++ b/daemon/gdm-x-session.c
@@ -670,12 +670,27 @@ spawn_session (State        *state,
                 g_subprocess_launcher_setenv (launcher, "WINDOWPATH", vt, TRUE);
         }
 
+        char const *session_wrapper;
+        char *eff_session_command;
+        session_wrapper = g_getenv ("GDM_X_SESSION_WRAPPER");
+        if (session_wrapper != NULL) {
+                char *quoted_wrapper = g_shell_quote (session_wrapper);
+                eff_session_command = g_strjoin (" ", quoted_wrapper, state->session_command, NULL);
+                g_free (quoted_wrapper);
+        } else {
+                eff_session_command = state->session_command;
+        }
+
         subprocess = g_subprocess_launcher_spawn (launcher,
                                                   &error,
                                                   GDMCONFDIR "/Xsession",
-                                                  state->session_command,
+                                                  eff_session_command,
                                                   NULL);
 
+        if (session_wrapper != NULL) {
+                g_free (eff_session_command);
+        }
+
         if (subprocess == NULL) {
                 g_debug ("could not start session: %s", error->message);
                 goto out;
