          static const char *wayland_search_dir = DATADIR "/wayland-sessions/";
  
          search_array = g_array_new (TRUE, TRUE, sizeof (char *));
+--- a/libgdm/gdm-sessions.c
++++ b/libgdm/gdm-sessions.c
+@@ -217,6 +217,7 @@
+ {
+         int         i;
+         const char *xorg_search_dirs[] = {
++                "/var/empty/",
+                 "/etc/X11/sessions/",
+                 DMCONFDIR "/Sessions/",
+                 DATADIR "/gdm/BuiltInSessions/",
+@@ -224,6 +225,10 @@
+                 NULL
+         };
+ 
++        if (g_getenv("GDM_SESSIONS_DIR") != NULL) {
++                xorg_search_dirs[0] = g_getenv("GDM_SESSIONS_DIR");
++        };
++
+ #ifdef ENABLE_WAYLAND_SUPPORT
+         const char *wayland_search_dirs[] = {
+                 DATADIR "/wayland-sessions/",

                 "/etc/X11/sessions/",
                 DMCONFDIR "/Sessions/",
                 DATADIR "/gdm/BuiltInSessions/",
@@ -351,6 +352,10 @@ get_system_session_dirs (GdmSession *self)
                 NULL
         };
 
+        if (getenv("GDM_SESSIONS_DIR") != NULL) {

--- a/daemon/gdm-launch-environment.c
+++ b/daemon/gdm-launch-environment.c
@@ -126,7 +126,7 @@
                 "LC_COLLATE", "LC_MONETARY", "LC_MESSAGES", "LC_PAPER",
                 "LC_NAME", "LC_ADDRESS", "LC_TELEPHONE", "LC_MEASUREMENT",
                 "LC_IDENTIFICATION", "LC_ALL", "WINDOWPATH", "XCURSOR_PATH",
-                "XDG_CONFIG_DIRS", NULL
+                "XDG_CONFIG_DIRS", "GDM_SESSIONS_DIR", NULL
         };
         char *system_data_dirs;
         int i;
--- a/daemon/gdm-session.c
+++ b/daemon/gdm-session.c
@@ -345,12 +345,17 @@
         char **search_dirs;
 
         static const char *x_search_dirs[] = {
