diff -uNr gdm-3.6.2.orig/daemon/gdm-display.c gdm-3.6.2.new/daemon/gdm-display.c
--- gdm-3.6.2.orig/daemon/gdm-display.c	2012-11-14 17:01:26.000000000 +0000
+++ gdm-3.6.2.new/daemon/gdm-display.c	2013-07-12 16:31:14.237234809 +0100
@@ -352,6 +352,11 @@
         int      delay;
         char    *username;
 
+#ifdef WITH_SYSTEMD
+        int      username_len;
+        username_len = 0;
+#endif
+
         enabled = FALSE;
         username = NULL;
         delay = 0;
@@ -362,7 +367,27 @@
          * systemd path.
          */
         if (g_strcmp0 (display->priv->seat_id, "seat0") != 0) {
-                goto out;
+                res = gdm_settings_direct_get_string (GDM_KEY_AUTO_LOGIN_USER, 
+							&username);
+                /* A script may be used to generate the automatic/timed login 
+                 * name based on the display/host by ending the name with the 
+                 * pipe symbol '|'. In this case the user can ensure the 
+                 * correct user is logged in for the correct seat.
+		 */
+        	if (username != NULL && username[0] != '\0') {
+                	username_len = strlen (username);
+                	if (username[username_len - 1] != '|') {
+        			g_warning ("GdmSlave: Get timed login details for display %s: seat '%s', username['%s'] is not a script.",
+                			display->priv->x11_display_name,
+		 			display->priv->seat_id,
+                 			username ? username : "(null)");
+        			g_free (username);
+        			username = NULL;
+                		goto out;
+                	}
+        		g_free (username);
+        		username = NULL;
+		}
         }
 #endif
 
diff -uNr gdm-3.6.2.orig/daemon/gdm-simple-slave.c gdm-3.6.2.new/daemon/gdm-simple-slave.c
--- gdm-3.6.2.orig/daemon/gdm-simple-slave.c	2013-07-12 10:32:08.925030412 +0100
+++ gdm-3.6.2.new/daemon/gdm-simple-slave.c	2013-07-12 15:14:02.708535357 +0100
@@ -99,6 +99,7 @@
 #ifdef  WITH_PLYMOUTH
         guint              plymouth_is_running : 1;
 #endif
+        char              *gdm_ran_once_seat_marker_file;
 };
 
 enum {
@@ -521,7 +522,8 @@
 {
         gboolean enabled;
 
-        if (g_file_test (GDM_RAN_ONCE_MARKER_FILE, G_FILE_TEST_EXISTS)) {
+        if (g_file_test (slave->priv->gdm_ran_once_seat_marker_file, 
+							G_FILE_TEST_EXISTS)) {
                 return;
         }
 
@@ -742,11 +744,11 @@
 {
         int fd;
 
-        fd = g_creat (GDM_RAN_ONCE_MARKER_FILE, 0644);
+        fd = g_creat (slave->priv->gdm_ran_once_seat_marker_file, 0644);
 
         if (fd < 0 && errno != EEXIST) {
                 g_warning ("could not create %s to mark run, this may cause auto login "
-                           "to repeat: %m", GDM_RAN_ONCE_MARKER_FILE);
+                           "to repeat: %m", slave->priv->gdm_ran_once_seat_marker_file);
                 return;
         }
 
@@ -800,6 +802,11 @@
                                                 display_is_local,
                                                 NULL);
 
+	/* Allocate a filepath for a per seat ran once file marker. */
+        slave->priv->gdm_ran_once_seat_marker_file = g_strdup_printf ("%s_%s",
+						GDM_RAN_ONCE_MARKER_FILE,
+						display_seat_id);
+
         g_free (display_id);
         g_free (display_name);
         g_free (display_device);
@@ -1272,7 +1279,10 @@
         int delay = 0;
         /* FIXME: handle wait-for-go */
 
-        if (g_file_test (GDM_RAN_ONCE_MARKER_FILE, G_FILE_TEST_EXISTS)) {
+        if (g_file_test (slave->priv->gdm_ran_once_seat_marker_file, 
+							G_FILE_TEST_EXISTS)) {
+                g_warning ("GdmRanOnceMarkerFile exists '%s'", 
+				slave->priv->gdm_ran_once_seat_marker_file);
                 return FALSE;
         }
 
@@ -1600,6 +1610,12 @@
                 g_clear_object (&self->priv->server);
         }
 
+        if (self->priv->gdm_ran_once_seat_marker_file != NULL) {
+                unlink (self->priv->gdm_ran_once_seat_marker_file);
+                g_free (self->priv->gdm_ran_once_seat_marker_file);
+		self->priv->gdm_ran_once_seat_marker_file = NULL;
+        }
+
         return TRUE;
 }
 
