2009-11-05 Halton Huo <[email protected]>
authorhalton
Thu, 05 Nov 2009 07:08:02 +0000
changeset 16911 31e2f6cba93e
parent 16910 45320324d7a0
child 16912 7042017812bd
2009-11-05 Halton Huo <[email protected]> * base-specs/ConsoleKit.spec: Added patches -06 and -07. * patches/ConsoleKit-01-ck-dynamic.diff: Rework to sync with branch multi-seat 56d275968f8d9c866a9b69b0dcf769aba0e619af * patches/ConsoleKit-06-sol-xserver.diff: Added branding patch to fix doo 12395. * patches/ConsoleKit-07-sol-vt-major.diff: Added to fix doo 12322. * patches/gdm-04-dynamic-display.diff: Rework to sync with branch display-configuration 51214c2a504b97f3e498ffd2e23a5f3e864ba95c
ChangeLog
base-specs/ConsoleKit.spec
patches/ConsoleKit-01-ck-dynamic.diff
patches/ConsoleKit-06-sol-xserver.diff
patches/ConsoleKit-07-sol-vt-major.diff
patches/gdm-04-dynamic-display.diff
--- a/ChangeLog	Thu Nov 05 06:52:50 2009 +0000
+++ b/ChangeLog	Thu Nov 05 07:08:02 2009 +0000
@@ -1,3 +1,14 @@
+2009-11-05  Halton Huo  <[email protected]>
+
+	* base-specs/ConsoleKit.spec: Added patches -06 and -07.
+	* patches/ConsoleKit-01-ck-dynamic.diff: Rework to sync with branch
+	  multi-seat 56d275968f8d9c866a9b69b0dcf769aba0e619af
+	* patches/ConsoleKit-06-sol-xserver.diff: Added branding patch to fix
+	  doo 12395.
+	* patches/ConsoleKit-07-sol-vt-major.diff: Added to fix doo 12322.
+	* patches/gdm-04-dynamic-display.diff: Rework to sync with branch
+	  display-configuration 51214c2a504b97f3e498ffd2e23a5f3e864ba95c
+
 2009-11-05  Jeff Cai <[email protected]>
 
 	* SUNWgnome-archive-mgr.spec:
--- a/base-specs/ConsoleKit.spec	Thu Nov 05 06:52:50 2009 +0000
+++ b/base-specs/ConsoleKit.spec	Thu Nov 05 07:08:02 2009 +0000
@@ -29,6 +29,10 @@
 Patch4:       ConsoleKit-04-sol-tty.diff
 # date:2009-10-15 owner:halton type:bug doo:11612 status:upstreamed
 Patch5:       ConsoleKit-05-sol-sigpoll.diff
+# date:2009-11-03 owner:halton type:branding doo:12395
+Patch6:       ConsoleKit-06-sol-xserver.diff
+# date:2009-11-03 owner:halton type:bug doo:12322 status:upstreamed
+Patch7:       ConsoleKit-07-sol-vt-major.diff
 
 BuildRequires:  PolicyKit-devel >= 0.7
 BuildRequires:  autoconf >= 2.60
@@ -96,6 +100,8 @@
 %patch3 -p1
 %patch4 -p1
 %patch5 -p1
+%patch6 -p1
+%patch7 -p1
 
 %build
 CPUS=`/usr/sbin/psrinfo | grep on-line | wc -l | tr -d ' '`
@@ -196,6 +202,9 @@
 %{_libdir}/libck-connector.a
 
 %changelog
+* Thu Nov 05 2009 - [email protected]
+- Add patch sol-xserver.diff to fix doo 12395.
+- Add patch sol-vt-major.diff to fix doo 12322.
 * Thu Oct 15 2009 - [email protected]
 - Add patch sol-sigpoll.diff to fix doo 11612.
 * Fri Sep 25 2009 - [email protected]
--- a/patches/ConsoleKit-01-ck-dynamic.diff	Thu Nov 05 06:52:50 2009 +0000
+++ b/patches/ConsoleKit-01-ck-dynamic.diff	Thu Nov 05 07:08:02 2009 +0000
@@ -350,10 +350,10 @@
 +
  </chapter>
 diff --git a/libck-connector/ck-connector.c b/libck-connector/ck-connector.c
-index 7f6f87f..6d5d9e5 100644
+index 7f6f87f..87a7d4a 100644
 --- a/libck-connector/ck-connector.c
 +++ b/libck-connector/ck-connector.c
-@@ -76,9 +76,13 @@ static struct {
+@@ -76,8 +76,11 @@ static struct {
          { "display-device",     DBUS_TYPE_STRING },
          { "x11-display-device", DBUS_TYPE_STRING },
          { "x11-display",        DBUS_TYPE_STRING },
@@ -363,10 +363,8 @@
          { "session-type",       DBUS_TYPE_STRING },
 +        { "display-type",       DBUS_TYPE_STRING },
          { "is-local",           DBUS_TYPE_BOOLEAN },
-+        { "is-dynamic",         DBUS_TYPE_BOOLEAN },
          { "unix-user",          DBUS_TYPE_INT32 },
  };
- 
 diff --git a/src/Makefile.am b/src/Makefile.am
 index 6ab05c8..97a59ef 100644
 --- a/src/Makefile.am
@@ -805,7 +803,7 @@
 +
 +#endif /* __CK_DISPLAY_TEMPLATE_H */
 diff --git a/src/ck-log-event.c b/src/ck-log-event.c
-index 66f439c..1a01b0e 100644
+index 66f439c..510b18e 100644
 --- a/src/ck-log-event.c
 +++ b/src/ck-log-event.c
 @@ -79,6 +79,8 @@ event_seat_session_added_free (CkLogSeatSessionAddedEvent *event)
@@ -826,21 +824,7 @@
          g_free (event->session_x11_display);
          event->session_x11_display = NULL;
          g_free (event->session_x11_display_device);
-@@ -213,11 +217,13 @@ event_seat_session_added_copy (CkLogSeatSessionAddedEvent *event,
-         event_copy->seat_id = g_strdup (event->seat_id);
-         event_copy->session_id = g_strdup (event->session_id);
-         event_copy->session_type = g_strdup (event->session_type);
-+        event_copy->display_type = g_strdup (event->display_type);
-         event_copy->session_x11_display = g_strdup (event->session_x11_display);
-         event_copy->session_x11_display_device = g_strdup (event->session_x11_display_device);
-         event_copy->session_display_device = g_strdup (event->session_display_device);
-         event_copy->session_remote_host_name = g_strdup (event->session_remote_host_name);
-         event_copy->session_is_local = event->session_is_local;
-+        event_copy->session_is_dynamic = event->session_is_dynamic;
-         event_copy->session_unix_user = event->session_unix_user;
-         event_copy->session_creation_time = g_strdup (event->session_creation_time);
- }
-@@ -232,11 +238,13 @@ event_seat_session_removed_copy (CkLogSeatSessionRemovedEvent *event,
+@@ -213,6 +217,7 @@ event_seat_session_added_copy (CkLogSeatSessionAddedEvent *event,
          event_copy->seat_id = g_strdup (event->seat_id);
          event_copy->session_id = g_strdup (event->session_id);
          event_copy->session_type = g_strdup (event->session_type);
@@ -848,37 +832,20 @@
          event_copy->session_x11_display = g_strdup (event->session_x11_display);
          event_copy->session_x11_display_device = g_strdup (event->session_x11_display_device);
          event_copy->session_display_device = g_strdup (event->session_display_device);
-         event_copy->session_remote_host_name = g_strdup (event->session_remote_host_name);
-         event_copy->session_is_local = event->session_is_local;
-+        event_copy->session_is_dynamic = event->session_is_dynamic;
-         event_copy->session_unix_user = event->session_unix_user;
-         event_copy->session_creation_time = g_strdup (event->session_creation_time);
- }
-@@ -415,15 +423,17 @@ add_log_for_seat_session_added (GString    *str,
+@@ -232,6 +237,7 @@ event_seat_session_removed_copy (CkLogSeatSessionRemovedEvent *event,
+         event_copy->seat_id = g_strdup (event->seat_id);
+         event_copy->session_id = g_strdup (event->session_id);
+         event_copy->session_type = g_strdup (event->session_type);
++        event_copy->display_type = g_strdup (event->display_type);
+         event_copy->session_x11_display = g_strdup (event->session_x11_display);
+         event_copy->session_x11_display_device = g_strdup (event->session_x11_display_device);
+         event_copy->session_display_device = g_strdup (event->session_display_device);
+@@ -415,10 +421,11 @@ add_log_for_seat_session_added (GString    *str,
  
          e = (CkLogSeatSessionAddedEvent *)event;
          g_string_append_printf (str,
 -                                "seat-id='%s' session-id='%s' session-type='%s' session-x11-display='%s' session-x11-display-device='%s' session-display-device='%s' session-remote-host-name='%s' session-is-local=%s session-unix-user=%u session-creation-time='%s'",
-+                                "seat-id='%s' session-id='%s' session-type='%s' display-type='%s' session-x11-display='%s' session-x11-display-device='%s' session-display-device='%s' session-remote-host-name='%s' session-is-local=%s session-is-dynamic=%s session-unix-user=%u session-creation-time='%s'",
-                                 e->seat_id ? e->seat_id : "",
-                                 e->session_id ? e->session_id : "",
-                                 e->session_type ? e->session_type : "",
-+                                e->display_type ? e->display_type : "",
-                                 e->session_x11_display ? e->session_x11_display : "",
-                                 e->session_x11_display_device ? e->session_x11_display_device : "",
-                                 e->session_display_device ? e->session_display_device : "",
-                                 e->session_remote_host_name ? e->session_remote_host_name : "",
-                                 e->session_is_local ? "TRUE" : "FALSE",
-+                                e->session_is_dynamic ? "TRUE" : "FALSE",
-                                 e->session_unix_user,
-                                 e->session_creation_time ? e->session_creation_time : "");
- }
-@@ -436,15 +446,17 @@ add_log_for_seat_session_removed (GString    *str,
- 
-         e = (CkLogSeatSessionRemovedEvent *)event;
-         g_string_append_printf (str,
--                                "seat-id='%s' session-id='%s' session-type='%s' session-x11-display='%s' session-x11-display-device='%s' session-display-device='%s' session-remote-host-name='%s' session-is-local=%s session-unix-user=%u session-creation-time='%s'",
-+                                "seat-id='%s' session-id='%s' session-type='%s' display-type='%s' session-x11-display='%s' session-x11-display-device='%s' session-display-device='%s' session-remote-host-name='%s' session-is-local=%s session-is-dynamic=%s session-unix-user=%u session-creation-time='%s'",
++                                "seat-id='%s' session-id='%s' session-type='%s' display-type='%s' session-x11-display='%s' session-x11-display-device='%s' session-display-device='%s' session-remote-host-name='%s' session-is-local=%s session-unix-user=%u session-creation-time='%s'",
                                  e->seat_id ? e->seat_id : "",
                                  e->session_id ? e->session_id : "",
                                  e->session_type ? e->session_type : "",
@@ -886,22 +853,29 @@
                                  e->session_x11_display ? e->session_x11_display : "",
                                  e->session_x11_display_device ? e->session_x11_display_device : "",
                                  e->session_display_device ? e->session_display_device : "",
-                                 e->session_remote_host_name ? e->session_remote_host_name : "",
-                                 e->session_is_local ? "TRUE" : "FALSE",
-+                                e->session_is_dynamic ? "TRUE" : "FALSE",
-                                 e->session_unix_user,
-                                 e->session_creation_time ? e->session_creation_time : "");
- }
-@@ -939,7 +951,7 @@ parse_log_for_seat_session_added (const GString *str,
+@@ -436,10 +443,11 @@ add_log_for_seat_session_removed (GString    *str,
+ 
+         e = (CkLogSeatSessionRemovedEvent *)event;
+         g_string_append_printf (str,
+-                                "seat-id='%s' session-id='%s' session-type='%s' session-x11-display='%s' session-x11-display-device='%s' session-display-device='%s' session-remote-host-name='%s' session-is-local=%s session-unix-user=%u session-creation-time='%s'",
++                                "seat-id='%s' session-id='%s' session-type='%s' display-type='%s' session-x11-display='%s' session-x11-display-device='%s' session-display-device='%s' session-remote-host-name='%s' session-is-local=%s session-unix-user=%u session-creation-time='%s'",
+                                 e->seat_id ? e->seat_id : "",
+                                 e->session_id ? e->session_id : "",
+                                 e->session_type ? e->session_type : "",
++                                e->display_type ? e->display_type : "",
+                                 e->session_x11_display ? e->session_x11_display : "",
+                                 e->session_x11_display_device ? e->session_x11_display_device : "",
+                                 e->session_display_device ? e->session_display_device : "",
+@@ -939,7 +947,7 @@ parse_log_for_seat_session_added (const GString *str,
          }
  
          error = NULL;
 -        re = g_regex_new ("seat-id='(?P<seatid>[a-zA-Z0-9/]+)' session-id='(?P<sessionid>[a-zA-Z0-9/]+)' session-type='(?P<sessiontype>[a-zA-Z0-9 ]*)' session-x11-display='(?P<sessionx11display>[0-9a-zA-Z.:]*)' session-x11-display-device='(?P<sessionx11displaydevice>[^']*)' session-display-device='(?P<sessiondisplaydevice>[^']*)' session-remote-host-name='(?P<sessionremovehostname>[^']*)' session-is-local=(?P<sessionislocal>[a-zA-Z]*) session-unix-user=(?P<sessionunixuser>[0-9]*) session-creation-time='(?P<sessioncreationtime>[^']*)'", 0, 0, &error);
-+        re = g_regex_new ("seat-id='(?P<seatid>[a-zA-Z0-9/]+)' session-id='(?P<sessionid>[a-zA-Z0-9/]+)' session-type='(?P<sessiontype>[a-zA-Z0-9 ]*)' display-type='(?P<displaytype>[a-zA-Z0-9 ]*)' session-x11-display='(?P<sessionx11display>[0-9a-zA-Z.:]*)' session-x11-display-device='(?P<sessionx11displaydevice>[^']*)' session-display-device='(?P<sessiondisplaydevice>[^']*)' session-remote-host-name='(?P<sessionremovehostname>[^']*)' session-is-local=(?P<sessionislocal>[a-zA-Z]*) session-is-dynamic=(?P<sessionisdynamic>[a-zA-Z]*) session-unix-user=(?P<sessionunixuser>[0-9]*) session-creation-time='(?P<sessioncreationtime>[^']*)'", 0, 0, &error);
++        re = g_regex_new ("seat-id='(?P<seatid>[a-zA-Z0-9/]+)' session-id='(?P<sessionid>[a-zA-Z0-9/]+)' session-type='(?P<sessiontype>[a-zA-Z0-9 ]*)' display-type='(?P<displaytype>[a-zA-Z0-9 ]*)' session-x11-display='(?P<sessionx11display>[0-9a-zA-Z.:]*)' session-x11-display-device='(?P<sessionx11displaydevice>[^']*)' session-display-device='(?P<sessiondisplaydevice>[^']*)' session-remote-host-name='(?P<sessionremovehostname>[^']*)' session-is-local=(?P<sessionislocal>[a-zA-Z]*) session-unix-user=(?P<sessionunixuser>[0-9]*) session-creation-time='(?P<sessioncreationtime>[^']*)'", 0, 0, &error);
          if (re == NULL) {
                  g_warning (error->message);
                  goto out;
-@@ -957,6 +969,7 @@ parse_log_for_seat_session_added (const GString *str,
+@@ -957,6 +965,7 @@ parse_log_for_seat_session_added (const GString *str,
          e->seat_id = g_match_info_fetch_named (match_info, "seatid");
          e->session_id = g_match_info_fetch_named (match_info, "sessionid");
          e->session_type = g_match_info_fetch_named (match_info, "sessiontype");
@@ -909,31 +883,16 @@
          e->session_x11_display = g_match_info_fetch_named (match_info, "sessionx11display");
          e->session_x11_display_device = g_match_info_fetch_named (match_info, "sessionx11displaydevice");
          e->session_display_device = g_match_info_fetch_named (match_info, "sessiondisplaydevice");
-@@ -971,6 +984,14 @@ parse_log_for_seat_session_added (const GString *str,
-         }
-         g_free (tmp);
- 
-+        tmp = g_match_info_fetch_named (match_info, "sessionisdynamic");
-+        if (tmp != NULL && strcmp (tmp, "TRUE") == 0) {
-+                e->session_is_dynamic = TRUE;
-+        } else {
-+                e->session_is_dynamic = FALSE;
-+        }
-+        g_free (tmp);
-+
-         tmp = g_match_info_fetch_named (match_info, "sessionunixuser");
-         if (tmp != NULL) {
-                 gulong l;
-@@ -1014,7 +1035,7 @@ parse_log_for_seat_session_removed (const GString *str,
+@@ -1014,7 +1023,7 @@ parse_log_for_seat_session_removed (const GString *str,
          }
  
          error = NULL;
 -        re = g_regex_new ("seat-id='(?P<seatid>[a-zA-Z0-9/]+)' session-id='(?P<sessionid>[a-zA-Z0-9/]+)' session-type='(?P<sessiontype>[a-zA-Z0-9 ]*)' session-x11-display='(?P<sessionx11display>[0-9a-zA-Z.:]*)' session-x11-display-device='(?P<sessionx11displaydevice>[^']*)' session-display-device='(?P<sessiondisplaydevice>[^']*)' session-remote-host-name='(?P<sessionremovehostname>[^']*)' session-is-local=(?P<sessionislocal>[a-zA-Z]*) session-unix-user=(?P<sessionunixuser>[0-9]*) session-creation-time='(?P<sessioncreationtime>[^']*)'", 0, 0, &error);
-+        re = g_regex_new ("seat-id='(?P<seatid>[a-zA-Z0-9/]+)' session-id='(?P<sessionid>[a-zA-Z0-9/]+)' session-type='(?P<sessiontype>[a-zA-Z0-9 ]*)' display-type='(?P<displaytype>[a-zA-Z0-9 ]*)' session-x11-display='(?P<sessionx11display>[0-9a-zA-Z.:]*)' session-x11-display-device='(?P<sessionx11displaydevice>[^']*)' session-display-device='(?P<sessiondisplaydevice>[^']*)' session-remote-host-name='(?P<sessionremovehostname>[^']*)' session-is-local=(?P<sessionislocal>[a-zA-Z]*) session-is-dynamic=(?P<sessionisdynamic>[a-zA-Z]*) session-unix-user=(?P<sessionunixuser>[0-9]*) session-creation-time='(?P<sessioncreationtime>[^']*)'", 0, 0, &error);
++        re = g_regex_new ("seat-id='(?P<seatid>[a-zA-Z0-9/]+)' session-id='(?P<sessionid>[a-zA-Z0-9/]+)' session-type='(?P<sessiontype>[a-zA-Z0-9 ]*)' display-type='(?P<displaytype>[a-zA-Z0-9 ]*)' session-x11-display='(?P<sessionx11display>[0-9a-zA-Z.:]*)' session-x11-display-device='(?P<sessionx11displaydevice>[^']*)' session-display-device='(?P<sessiondisplaydevice>[^']*)' session-remote-host-name='(?P<sessionremovehostname>[^']*)' session-is-local=(?P<sessionislocal>[a-zA-Z]*) session-unix-user=(?P<sessionunixuser>[0-9]*) session-creation-time='(?P<sessioncreationtime>[^']*)'", 0, 0, &error);
          if (re == NULL) {
                  g_warning (error->message);
                  goto out;
-@@ -1032,6 +1053,7 @@ parse_log_for_seat_session_removed (const GString *str,
+@@ -1032,6 +1041,7 @@ parse_log_for_seat_session_removed (const GString *str,
          e->seat_id = g_match_info_fetch_named (match_info, "seatid");
          e->session_id = g_match_info_fetch_named (match_info, "sessionid");
          e->session_type = g_match_info_fetch_named (match_info, "sessiontype");
@@ -941,21 +900,6 @@
          e->session_x11_display = g_match_info_fetch_named (match_info, "sessionx11display");
          e->session_x11_display_device = g_match_info_fetch_named (match_info, "sessionx11displaydevice");
          e->session_display_device = g_match_info_fetch_named (match_info, "sessiondisplaydevice");
-@@ -1046,6 +1068,14 @@ parse_log_for_seat_session_removed (const GString *str,
-         }
-         g_free (tmp);
- 
-+        tmp = g_match_info_fetch_named (match_info, "sessionisdynamic");
-+        if (tmp != NULL && strcmp (tmp, "TRUE") == 0) {
-+                e->session_is_dynamic= TRUE;
-+        } else {
-+                e->session_is_dynamic = FALSE;
-+        }
-+        g_free (tmp);
-+
-         tmp = g_match_info_fetch_named (match_info, "sessionunixuser");
-         if (tmp != NULL) {
-                 gulong l;
 diff --git a/src/ck-log-event.h b/src/ck-log-event.h
 index 65571f0..2d4ed4e 100644
 --- a/src/ck-log-event.h
@@ -997,7 +941,7 @@
          char    *session_creation_time;
  } CkLogSeatSessionRemovedEvent;
 diff --git a/src/ck-manager.c b/src/ck-manager.c
-index 99693a3..0e8701c 100644
+index 99693a3..cc66740 100644
 --- a/src/ck-manager.c
 +++ b/src/ck-manager.c
 @@ -46,9 +46,14 @@
@@ -1063,7 +1007,7 @@
  }
  
  static void
-@@ -517,11 +533,13 @@ log_seat_session_added_event (CkManager  *manager,
+@@ -517,6 +533,7 @@ log_seat_session_added_event (CkManager  *manager,
          if (session != NULL) {
                  g_object_get (session,
                                "session-type", &event.event.seat_session_added.session_type,
@@ -1071,13 +1015,7 @@
                                "x11-display", &event.event.seat_session_added.session_x11_display,
                                "x11-display-device", &event.event.seat_session_added.session_x11_display_device,
                                "display-device", &event.event.seat_session_added.session_display_device,
-                               "remote-host-name", &event.event.seat_session_added.session_remote_host_name,
-                               "is-local", &event.event.seat_session_added.session_is_local,
-+                              "is-dynamic", &event.event.seat_session_added.session_is_dynamic,
-                               "unix-user", &event.event.seat_session_added.session_unix_user,
-                               NULL);
-                 ck_session_get_creation_time (session, &event.event.seat_session_added.session_creation_time, NULL);
-@@ -572,11 +590,13 @@ log_seat_session_removed_event (CkManager  *manager,
+@@ -572,6 +589,7 @@ log_seat_session_removed_event (CkManager  *manager,
          if (session != NULL) {
                  g_object_get (session,
                                "session-type", &event.event.seat_session_removed.session_type,
@@ -1085,13 +1023,7 @@
                                "x11-display", &event.event.seat_session_removed.session_x11_display,
                                "x11-display-device", &event.event.seat_session_removed.session_x11_display_device,
                                "display-device", &event.event.seat_session_removed.session_display_device,
-                               "remote-host-name", &event.event.seat_session_removed.session_remote_host_name,
-                               "is-local", &event.event.seat_session_removed.session_is_local,
-+                              "is-dynamic", &event.event.seat_session_removed.session_is_dynamic,
-                               "unix-user", &event.event.seat_session_removed.session_unix_user,
-                               NULL);
-                 ck_session_get_creation_time (session, &event.event.seat_session_removed.session_creation_time, NULL);
-@@ -1311,15 +1331,21 @@ disconnect_seat_signals (CkManager *manager,
+@@ -1311,15 +1329,21 @@ disconnect_seat_signals (CkManager *manager,
  }
  
  static CkSeat *
@@ -1117,7 +1049,7 @@
  
          /* First we connect our own signals to the seat, followed by
           * the D-Bus signal hookup to make sure we can first dump the
-@@ -1344,7 +1370,7 @@ add_new_seat (CkManager *manager,
+@@ -1344,7 +1368,7 @@ add_new_seat (CkManager *manager,
          ck_seat_run_programs (seat, NULL, NULL, "seat_added");
  
          g_debug ("Emitting seat-added: %s", sid);
@@ -1126,7 +1058,7 @@
  
          log_seat_added_event (manager, seat);
  
-@@ -1402,64 +1428,22 @@ remove_seat (CkManager *manager,
+@@ -1402,64 +1426,22 @@ remove_seat (CkManager *manager,
          g_free (sid);
  }
  
@@ -1198,7 +1130,7 @@
          return seat;
  }
  
-@@ -1599,31 +1583,41 @@ open_session_for_leader (CkManager             *manager,
+@@ -1599,31 +1581,40 @@ open_session_for_leader (CkManager             *manager,
          ssid = ck_session_leader_peek_session_id (leader);
          cookie = ck_session_leader_peek_cookie (leader);
  
@@ -1251,11 +1183,10 @@
                  /* create a new seat */
 -                seat = add_new_seat (manager, CK_SEAT_KIND_DYNAMIC);
 +                seat = add_new_seat (manager, NULL, CK_SEAT_KIND_DYNAMIC, "Default");
-+                ck_seat_manage (seat, context);
          }
  
          ck_seat_add_session (seat, session, NULL);
-@@ -1697,11 +1691,57 @@ generate_session_for_leader (CkManager             *manager,
+@@ -1697,11 +1688,57 @@ generate_session_for_leader (CkManager             *manager,
          }
  }
  
@@ -1317,7 +1248,7 @@
  {
          pid_t           pid;
          uid_t           uid;
-@@ -1709,6 +1749,7 @@ create_session_for_sender (CkManager             *manager,
+@@ -1709,6 +1746,7 @@ create_session_for_sender (CkManager             *manager,
          char            *cookie;
          char            *ssid;
          CkSessionLeader *leader;
@@ -1325,7 +1256,7 @@
  
          g_debug ("CkManager: create session for sender: %s", sender);
  
-@@ -1727,9 +1768,21 @@ create_session_for_sender (CkManager             *manager,
+@@ -1727,9 +1765,21 @@ create_session_for_sender (CkManager             *manager,
          }
  
          cookie = generate_session_cookie (manager);
@@ -1349,7 +1280,7 @@
  
          leader = ck_session_leader_new ();
          ck_session_leader_set_uid (leader, uid);
-@@ -1967,7 +2020,7 @@ ck_manager_open_session (CkManager             *manager,
+@@ -1967,7 +2017,7 @@ ck_manager_open_session (CkManager             *manager,
          gboolean ret;
  
          sender = dbus_g_method_get_sender (context);
@@ -1358,7 +1289,7 @@
          g_free (sender);
  
          return ret;
-@@ -1982,7 +2035,7 @@ ck_manager_open_session_with_parameters (CkManager             *manager,
+@@ -1982,7 +2032,7 @@ ck_manager_open_session_with_parameters (CkManager             *manager,
          gboolean ret;
  
          sender = dbus_g_method_get_sender (context);
@@ -1367,7 +1298,7 @@
          g_free (sender);
  
          return ret;
-@@ -1999,10 +2052,12 @@ remove_session_for_cookie (CkManager  *manager,
+@@ -1999,10 +2049,12 @@ remove_session_for_cookie (CkManager  *manager,
          char            *sid;
          gboolean         res;
          gboolean         ret;
@@ -1380,7 +1311,7 @@
  
          g_debug ("Removing session for cookie: %s", cookie);
  
-@@ -2029,6 +2084,17 @@ remove_session_for_cookie (CkManager  *manager,
+@@ -2029,6 +2081,17 @@ remove_session_for_cookie (CkManager  *manager,
                  goto out;
          }
  
@@ -1398,7 +1329,7 @@
          /* Must keep a reference to the session in the manager until
           * all events for seats are cleared.  So don't remove
           * or steal the session from the master list until
-@@ -2036,31 +2102,35 @@ remove_session_for_cookie (CkManager  *manager,
+@@ -2036,31 +2099,35 @@ remove_session_for_cookie (CkManager  *manager,
           * for seat removals doesn't work.
           */
  
@@ -1456,7 +1387,7 @@
  
          ck_manager_dump (manager);
  
-@@ -2068,11 +2138,13 @@ remove_session_for_cookie (CkManager  *manager,
+@@ -2068,11 +2135,13 @@ remove_session_for_cookie (CkManager  *manager,
  
          ret = TRUE;
   out:
@@ -1474,7 +1405,7 @@
          return ret;
  }
  
-@@ -2290,9 +2362,11 @@ ck_manager_class_init (CkManagerClass *klass)
+@@ -2290,9 +2359,11 @@ ck_manager_class_init (CkManagerClass *klass)
                                G_STRUCT_OFFSET (CkManagerClass, seat_added),
                                NULL,
                                NULL,
@@ -1488,7 +1419,7 @@
          signals [SEAT_REMOVED] =
                  g_signal_new ("seat-removed",
                                G_TYPE_FROM_CLASS (object_class),
-@@ -2399,6 +2473,43 @@ ck_manager_get_seats (CkManager  *manager,
+@@ -2399,6 +2470,43 @@ ck_manager_get_seats (CkManager  *manager,
  }
  
  static void
@@ -1532,7 +1463,7 @@
  listify_session_ids (char       *id,
                       CkSession  *session,
                       GPtrArray **array)
-@@ -2423,16 +2534,307 @@ ck_manager_get_sessions (CkManager  *manager,
+@@ -2423,16 +2531,307 @@ ck_manager_get_sessions (CkManager  *manager,
          return TRUE;
  }
  
@@ -1841,7 +1772,7 @@
  
          connect_seat_signals (manager, seat);
          if (!ck_seat_register (seat)) {
-@@ -2451,7 +2853,7 @@ add_seat_for_file (CkManager  *manager,
+@@ -2451,7 +2850,7 @@ add_seat_for_file (CkManager  *manager,
          ck_seat_run_programs (seat, NULL, NULL, "seat_added");
  
          g_debug ("Emitting seat-added: %s", sid);
@@ -1850,7 +1781,7 @@
  
          log_seat_added_event (manager, seat);
  }
-@@ -2462,6 +2864,7 @@ load_seats_from_dir (CkManager *manager)
+@@ -2462,6 +2861,7 @@ load_seats_from_dir (CkManager *manager)
          GDir       *d;
          GError     *error;
          const char *file;
@@ -1858,7 +1789,7 @@
  
          error = NULL;
          d = g_dir_open (CK_SEAT_DIR,
-@@ -2473,15 +2876,26 @@ load_seats_from_dir (CkManager *manager)
+@@ -2473,15 +2873,26 @@ load_seats_from_dir (CkManager *manager)
                  return FALSE;
          }
  
@@ -1887,7 +1818,7 @@
          return TRUE;
  }
  
-@@ -2517,8 +2931,6 @@ ck_manager_init (CkManager *manager)
+@@ -2517,8 +2928,6 @@ ck_manager_init (CkManager *manager)
                                                          (GDestroyNotify) g_object_unref);
  
          manager->priv->logger = ck_event_logger_new (LOG_FILE);
@@ -1896,7 +1827,7 @@
  }
  
  static void
-@@ -2563,6 +2975,8 @@ ck_manager_new (void)
+@@ -2563,6 +2972,8 @@ ck_manager_new (void)
                          g_object_unref (manager_object);
                          return NULL;
                  }
@@ -1969,7 +1900,7 @@
 +VOID:STRING,BOOLEAN,STRING,POINTER,STRING,POINTER
  VOID:OBJECT,OBJECT
 diff --git a/src/ck-seat.c b/src/ck-seat.c
-index af7db59..3844196 100644
+index af7db59..7398298 100644
 --- a/src/ck-seat.c
 +++ b/src/ck-seat.c
 @@ -40,21 +40,30 @@
@@ -2036,7 +1967,7 @@
  
          g_return_val_if_fail (CK_IS_SEAT (seat), FALSE);
  
-@@ -298,12 +312,385 @@ ck_seat_activate_session (CkSeat                *seat,
+@@ -298,12 +312,386 @@ ck_seat_activate_session (CkSeat                *seat,
                  session = g_hash_table_lookup (seat->priv->sessions, ssid);
          }
  
@@ -2136,6 +2067,7 @@
 +        CkSeat      *seat = CK_SEAT (user_data);
 +        CkSession   *session = (CkSession *) value;
 +
++        ck_session_set_ever_open (session, FALSE, NULL);
 +        ck_seat_request_open_session (seat, session, NULL);
 +}
 +
@@ -2423,7 +2355,7 @@
  match_session_display_device (const char *key,
                                CkSession  *session,
                                const char *display_device)
-@@ -526,6 +913,40 @@ change_active_session (CkSeat    *seat,
+@@ -526,6 +914,40 @@ change_active_session (CkSeat    *seat,
  }
  
  static void
@@ -2464,7 +2396,7 @@
  update_active_vt (CkSeat *seat,
                    guint   num)
  {
-@@ -537,7 +958,12 @@ update_active_vt (CkSeat *seat,
+@@ -537,7 +959,12 @@ update_active_vt (CkSeat *seat,
          g_debug ("Active device: %s", device);
  
          session = find_session_for_display_device (seat, device);
@@ -2478,7 +2410,7 @@
  
          g_free (device);
  }
-@@ -628,18 +1054,77 @@ ck_seat_remove_session (CkSeat         *seat,
+@@ -628,18 +1055,77 @@ ck_seat_remove_session (CkSeat         *seat,
          return ret;
  }
  
@@ -2557,7 +2489,7 @@
  
          ck_session_set_seat_id (session, seat->priv->id, NULL);
  
-@@ -656,6 +1141,10 @@ ck_seat_add_session (CkSeat         *seat,
+@@ -656,6 +1142,10 @@ ck_seat_add_session (CkSeat         *seat,
  
          maybe_update_active_session (seat);
  
@@ -2568,7 +2500,7 @@
          g_free (ssid);
  
          return TRUE;
-@@ -742,6 +1231,20 @@ ck_seat_get_kind (CkSeat        *seat,
+@@ -742,6 +1232,20 @@ ck_seat_get_kind (CkSeat        *seat,
  }
  
  gboolean
@@ -2589,7 +2521,7 @@
  ck_seat_get_id (CkSeat         *seat,
                  char          **id,
                  GError        **error)
-@@ -858,6 +1361,14 @@ _ck_seat_set_kind (CkSeat    *seat,
+@@ -858,6 +1362,14 @@ _ck_seat_set_kind (CkSeat    *seat,
  }
  
  static void
@@ -2604,7 +2536,7 @@
  ck_seat_set_property (GObject            *object,
                        guint               prop_id,
                        const GValue       *value,
-@@ -874,6 +1385,9 @@ ck_seat_set_property (GObject            *object,
+@@ -874,6 +1386,9 @@ ck_seat_set_property (GObject            *object,
          case PROP_KIND:
                  _ck_seat_set_kind (self, g_value_get_enum (value));
                  break;
@@ -2614,7 +2546,7 @@
          default:
                  G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
                  break;
-@@ -895,7 +1409,10 @@ ck_seat_get_property (GObject    *object,
+@@ -895,7 +1410,10 @@ ck_seat_get_property (GObject    *object,
                  g_value_set_string (value, self->priv->id);
                  break;
          case PROP_KIND:
@@ -2626,7 +2558,7 @@
                  break;
          default:
                  G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
-@@ -1008,6 +1525,15 @@ ck_seat_class_init (CkSeatClass *klass)
+@@ -1008,6 +1526,15 @@ ck_seat_class_init (CkSeatClass *klass)
                                                   G_TYPE_NONE,
                                                   1, CK_TYPE_DEVICE);
  
@@ -2642,7 +2574,7 @@
          g_object_class_install_property (object_class,
                                           PROP_ID,
                                           g_param_spec_string ("id",
-@@ -1024,6 +1550,13 @@ ck_seat_class_init (CkSeatClass *klass)
+@@ -1024,6 +1551,13 @@ ck_seat_class_init (CkSeatClass *klass)
                                                              CK_SEAT_KIND_DYNAMIC,
                                                              G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
  
@@ -2656,7 +2588,7 @@
          g_type_class_add_private (klass, sizeof (CkSeatPrivate));
  
          dbus_g_object_type_install_info (CK_TYPE_SEAT, &dbus_glib_ck_seat_object_info);
-@@ -1039,6 +1572,7 @@ ck_seat_init (CkSeat *seat)
+@@ -1039,6 +1573,7 @@ ck_seat_init (CkSeat *seat)
                                                        g_free,
                                                        (GDestroyNotify) g_object_unref);
          seat->priv->devices = g_ptr_array_new ();
@@ -2664,7 +2596,7 @@
  }
  
  static void
-@@ -1064,28 +1598,32 @@ ck_seat_finalize (GObject *object)
+@@ -1064,28 +1599,32 @@ ck_seat_finalize (GObject *object)
          g_ptr_array_free (seat->priv->devices, TRUE);
          g_hash_table_destroy (seat->priv->sessions);
          g_free (seat->priv->id);
@@ -2701,7 +2633,7 @@
  {
          GObject *object;
          int      i;
-@@ -1100,24 +1638,57 @@ ck_seat_new_with_devices (const char *sid,
+@@ -1100,24 +1639,57 @@ ck_seat_new_with_devices (const char *sid,
                          ck_seat_add_device (CK_SEAT (object), g_ptr_array_index (devices, i), NULL);
                  }
          }
@@ -2770,7 +2702,7 @@
  
          seat = NULL;
  
-@@ -1145,6 +1716,49 @@ ck_seat_new_from_file (const char *sid,
+@@ -1145,6 +1717,49 @@ ck_seat_new_from_file (const char *sid,
                  goto out;
          }
  
@@ -2820,7 +2752,7 @@
          device_list = g_key_file_get_string_list (key_file, group, "Devices", &ndevices, NULL);
  
          g_debug ("Creating seat %s with %zd devices", sid, ndevices);
-@@ -1176,11 +1790,12 @@ ck_seat_new_from_file (const char *sid,
+@@ -1176,11 +1791,12 @@ ck_seat_new_from_file (const char *sid,
                  g_strfreev (split);
          }
          g_strfreev (device_list);
@@ -2835,7 +2767,7 @@
  out:
  
          g_key_file_free (key_file);
-@@ -1370,3 +1985,24 @@ ck_seat_dump (CkSeat   *seat,
+@@ -1370,3 +1986,24 @@ ck_seat_dump (CkSeat   *seat,
  
          g_free (group_name);
  }
@@ -2960,7 +2892,7 @@
          { "unix-user",          add_param_int },
  };
 diff --git a/src/ck-session.c b/src/ck-session.c
-index d8db9dd..81c5252 100644
+index d8db9dd..477c19e 100644
 --- a/src/ck-session.c
 +++ b/src/ck-session.c
 @@ -41,6 +41,7 @@
@@ -2979,7 +2911,7 @@
          char            *login_session_id;
          char            *display_device;
          char            *x11_display_device;
-@@ -65,8 +67,15 @@ struct CkSessionPrivate
+@@ -65,8 +67,14 @@ struct CkSessionPrivate
          char            *remote_host_name;
          guint            uid;
  
@@ -2988,14 +2920,13 @@
 +
          gboolean         active;
          gboolean         is_local;
-+        gboolean         is_dynamic;
 +        gboolean         is_open;
 +        gboolean         ever_open;
 +        gboolean         under_request;
  
          GTimeVal         creation_time;
  
-@@ -75,6 +84,8 @@ struct CkSessionPrivate
+@@ -75,6 +83,8 @@ struct CkSessionPrivate
          gboolean         idle_hint;
          GTimeVal         idle_since_hint;
  
@@ -3004,7 +2935,7 @@
          DBusGConnection *connection;
          DBusGProxy      *bus_proxy;
  };
-@@ -92,17 +103,25 @@ enum {
+@@ -92,17 +102,24 @@ enum {
          PROP_0,
          PROP_ID,
          PROP_COOKIE,
@@ -3021,7 +2952,6 @@
          PROP_REMOTE_HOST_NAME,
          PROP_LOGIN_SESSION_ID,
          PROP_IS_LOCAL,
-+        PROP_IS_DYNAMIC,
 +        PROP_IS_OPEN,
 +        PROP_EVER_OPEN,
          PROP_ACTIVE,
@@ -3030,7 +2960,7 @@
  };
  
  static guint signals [LAST_SIGNAL] = { 0, };
-@@ -128,6 +147,7 @@ static gboolean
+@@ -128,6 +145,7 @@ static gboolean
  register_session (CkSession *session)
  {
          GError *error = NULL;
@@ -3038,7 +2968,7 @@
  
          error = NULL;
          session->priv->connection = dbus_g_bus_get (DBUS_BUS_SYSTEM, &error);
-@@ -144,6 +164,15 @@ register_session (CkSession *session)
+@@ -144,6 +162,15 @@ register_session (CkSession *session)
                                                                DBUS_PATH_DBUS,
                                                                DBUS_INTERFACE_DBUS);
  
@@ -3054,7 +2984,7 @@
          dbus_g_connection_register_g_object (session->priv->connection, session->priv->id, G_OBJECT (session));
  
          return TRUE;
-@@ -302,6 +331,35 @@ ck_session_set_idle_hint (CkSession             *session,
+@@ -302,6 +329,35 @@ ck_session_set_idle_hint (CkSession             *session,
  }
  
  gboolean
@@ -3090,24 +3020,10 @@
  ck_session_get_idle_hint (CkSession *session,
                            gboolean  *idle_hint,
                            GError   **error)
-@@ -420,6 +478,78 @@ ck_session_set_is_local (CkSession      *session,
+@@ -420,6 +476,64 @@ ck_session_set_is_local (CkSession      *session,
  }
  
  gboolean
-+ck_session_set_is_dynamic (CkSession    *session,
-+                           gboolean      is_dynamic,
-+                           GError      **error)
-+{
-+        g_return_val_if_fail (CK_IS_SESSION (session), FALSE);
-+
-+        if (session->priv->is_dynamic != is_dynamic) {
-+                session->priv->is_dynamic = is_dynamic;
-+        }
-+
-+        return TRUE;
-+}
-+
-+gboolean
 +ck_session_set_is_open (CkSession    *session,
 +                        gboolean      is_open,
 +                        GError      **error)
@@ -3169,7 +3085,7 @@
  ck_session_get_id (CkSession      *session,
                     char          **id,
                     GError        **error)
-@@ -555,6 +685,20 @@ ck_session_get_creation_time (CkSession      *session,
+@@ -555,6 +669,20 @@ ck_session_get_creation_time (CkSession      *session,
  }
  
  gboolean
@@ -3190,7 +3106,7 @@
  ck_session_get_session_type (CkSession      *session,
                               char          **type,
                               GError        **error)
-@@ -569,6 +713,20 @@ ck_session_get_session_type (CkSession      *session,
+@@ -569,6 +697,20 @@ ck_session_get_session_type (CkSession      *session,
  }
  
  gboolean
@@ -3211,24 +3127,10 @@
  ck_session_is_active (CkSession      *session,
                        gboolean       *active,
                        GError        **error)
-@@ -597,6 +755,62 @@ ck_session_is_local (CkSession      *session,
+@@ -597,6 +739,48 @@ ck_session_is_local (CkSession      *session,
  }
  
  gboolean
-+ck_session_is_dynamic (CkSession      *session,
-+                       gboolean       *dynamic,
-+                       GError        **error)
-+{
-+        g_return_val_if_fail (CK_IS_SESSION (session), FALSE);
-+
-+        if (dynamic != NULL) {
-+                *dynamic = session->priv->is_dynamic;
-+        }
-+
-+        return TRUE;
-+}
-+
-+gboolean
 +ck_session_is_open (CkSession      *session,
 +                    gboolean       *open,
 +                    GError        **error)
@@ -3274,7 +3176,7 @@
  ck_session_set_id (CkSession      *session,
                     const char     *id,
                     GError        **error)
-@@ -609,6 +823,21 @@ ck_session_set_id (CkSession      *session,
+@@ -609,6 +793,21 @@ ck_session_set_id (CkSession      *session,
          return TRUE;
  }
  
@@ -3296,7 +3198,7 @@
  gboolean
  ck_session_set_cookie (CkSession      *session,
                         const char     *cookie,
-@@ -725,6 +954,54 @@ ck_session_set_session_type (CkSession      *session,
+@@ -725,6 +924,54 @@ ck_session_set_session_type (CkSession      *session,
          return TRUE;
  }
  
@@ -3351,13 +3253,10 @@
  static void
  ck_session_set_property (GObject            *object,
                           guint               prop_id,
-@@ -742,15 +1019,36 @@ ck_session_set_property (GObject            *object,
+@@ -742,15 +989,33 @@ ck_session_set_property (GObject            *object,
          case PROP_IS_LOCAL:
                  ck_session_set_is_local (self, g_value_get_boolean (value), NULL);
                  break;
-+        case PROP_IS_DYNAMIC:
-+                ck_session_set_is_dynamic (self, g_value_get_boolean (value), NULL);
-+                break;
 +        case PROP_IS_OPEN:
 +                ck_session_set_is_open (self, g_value_get_boolean (value), NULL);
 +                break;
@@ -3388,7 +3287,7 @@
          case PROP_X11_DISPLAY:
                  ck_session_set_x11_display (self, g_value_get_string (value), NULL);
                  break;
-@@ -775,6 +1073,9 @@ ck_session_set_property (GObject            *object,
+@@ -775,6 +1040,9 @@ ck_session_set_property (GObject            *object,
          case PROP_IDLE_HINT:
                  session_set_idle_hint_internal (self, g_value_get_boolean (value));
                  break;
@@ -3398,13 +3297,10 @@
          default:
                  G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
                  break;
-@@ -798,15 +1099,36 @@ ck_session_get_property (GObject    *object,
+@@ -798,15 +1066,33 @@ ck_session_get_property (GObject    *object,
          case PROP_IS_LOCAL:
                  g_value_set_boolean (value, self->priv->is_local);
                  break;
-+        case PROP_IS_DYNAMIC:
-+                g_value_set_boolean (value, self->priv->is_dynamic);
-+                break;
 +        case PROP_IS_OPEN:
 +                g_value_set_boolean (value, self->priv->is_open);
 +                break;
@@ -3435,7 +3331,7 @@
          case PROP_X11_DISPLAY:
                  g_value_set_string (value, self->priv->x11_display);
                  break;
-@@ -831,6 +1153,9 @@ ck_session_get_property (GObject    *object,
+@@ -831,6 +1117,9 @@ ck_session_get_property (GObject    *object,
          case PROP_IDLE_HINT:
                  g_value_set_boolean (value, self->priv->idle_hint);
                  break;
@@ -3445,21 +3341,7 @@
          default:
                  G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
                  break;
-@@ -987,6 +1312,13 @@ ck_session_class_init (CkSessionClass *klass)
-                                                                TRUE,
-                                                                G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
-         g_object_class_install_property (object_class,
-+                                         PROP_IS_DYNAMIC,
-+                                         g_param_spec_boolean ("is-dynamic",
-+                                                               NULL,
-+                                                               NULL,
-+                                                               FALSE,
-+                                                               G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
-+        g_object_class_install_property (object_class,
-                                          PROP_ID,
-                                          g_param_spec_string ("id",
-                                                               "id",
-@@ -1000,6 +1332,13 @@ ck_session_class_init (CkSessionClass *klass)
+@@ -1000,6 +1289,13 @@ ck_session_class_init (CkSessionClass *klass)
                                                                "cookie",
                                                                NULL,
                                                                G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
@@ -3473,7 +3355,7 @@
  
          g_object_class_install_property (object_class,
                                           PROP_SESSION_TYPE,
-@@ -1009,6 +1348,27 @@ ck_session_class_init (CkSessionClass *klass)
+@@ -1009,6 +1305,27 @@ ck_session_class_init (CkSessionClass *klass)
                                                                NULL,
                                                                G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
          g_object_class_install_property (object_class,
@@ -3501,7 +3383,7 @@
                                           PROP_LOGIN_SESSION_ID,
                                           g_param_spec_string ("login-session-id",
                                                                "login-session-id",
-@@ -1070,6 +1430,13 @@ ck_session_class_init (CkSessionClass *klass)
+@@ -1070,6 +1387,13 @@ ck_session_class_init (CkSessionClass *klass)
                                                                 NULL,
                                                                 FALSE,
                                                                 G_PARAM_READWRITE));
@@ -3515,7 +3397,7 @@
  
          g_type_class_add_private (klass, sizeof (CkSessionPrivate));
  
-@@ -1081,6 +1448,11 @@ ck_session_init (CkSession *session)
+@@ -1081,6 +1405,11 @@ ck_session_init (CkSession *session)
  {
          session->priv = CK_SESSION_GET_PRIVATE (session);
  
@@ -3527,7 +3409,7 @@
          /* FIXME: should we have a property for this? */
          g_get_current_time (&session->priv->creation_time);
  }
-@@ -1105,6 +1477,7 @@ ck_session_finalize (GObject *object)
+@@ -1105,6 +1434,7 @@ ck_session_finalize (GObject *object)
          g_free (session->priv->cookie);
          g_free (session->priv->seat_id);
          g_free (session->priv->session_type);
@@ -3535,7 +3417,7 @@
          g_free (session->priv->x11_display);
          g_free (session->priv->display_device);
          g_free (session->priv->x11_display_device);
-@@ -1114,16 +1487,135 @@ ck_session_finalize (GObject *object)
+@@ -1114,16 +1444,135 @@ ck_session_finalize (GObject *object)
  }
  
  CkSession *
@@ -3673,7 +3555,7 @@
          res = register_session (CK_SESSION (object));
          if (! res) {
                  g_object_unref (object);
-@@ -1138,9 +1630,80 @@ ck_session_new (const char *ssid,
+@@ -1138,9 +1587,80 @@ ck_session_new (const char *ssid,
                                                            G_TYPE_VALUE, \
                                                            G_TYPE_INVALID))
  
@@ -3755,7 +3637,7 @@
                                  const GPtrArray *parameters)
  {
          GObject      *object;
-@@ -1169,12 +1732,6 @@ ck_session_new_with_parameters (const char      *ssid,
+@@ -1169,12 +1689,6 @@ ck_session_new_with_parameters (const char      *ssid,
          g_value_set_string (&params[n_params].value, ssid);
          n_params++;
  
@@ -3768,7 +3650,7 @@
          if (parameters != NULL) {
                  for (i = 0; i < parameters->len; i++) {
                          gboolean    res;
-@@ -1259,7 +1816,7 @@ ck_session_run_programs (CkSession  *session,
+@@ -1259,7 +1773,7 @@ ck_session_run_programs (CkSession  *session,
                           const char *action)
  {
          int   n;
@@ -3777,25 +3659,17 @@
  
          n = 0;
  
-@@ -1267,6 +1824,9 @@ ck_session_run_programs (CkSession  *session,
+@@ -1267,6 +1781,9 @@ ck_session_run_programs (CkSession  *session,
          if (session->priv->session_type != NULL) {
                  extra_env[n++] = g_strdup_printf ("CK_SESSION_TYPE=%s", session->priv->session_type);
          }
 +        if (session->priv->display_type != NULL) {
-+                extra_env[n++] = g_strdup_printf ("CK_DISPLAY_TYPE=%s", session->priv->display_type);
++                extra_env[n++] = g_strdup_printf ("CK_SESSION_DISPLAY_TYPE=%s", session->priv->display_type);
 +        }
          extra_env[n++] = g_strdup_printf ("CK_SESSION_SEAT_ID=%s", session->priv->seat_id);
          extra_env[n++] = g_strdup_printf ("CK_SESSION_USER_UID=%d", session->priv->uid);
          if (session->priv->display_device != NULL && strlen (session->priv->display_device) > 0) {
-@@ -1282,6 +1842,7 @@ ck_session_run_programs (CkSession  *session,
-         }
-         extra_env[n++] = g_strdup_printf ("CK_SESSION_IS_ACTIVE=%s", session->priv->active ? "true" : "false");
-         extra_env[n++] = g_strdup_printf ("CK_SESSION_IS_LOCAL=%s", session->priv->is_local ? "true" : "false");
-+        extra_env[n++] = g_strdup_printf ("CK_SESSION_IS_DYNAMIC=%s", session->priv->is_dynamic ? "true" : "false");
-         extra_env[n++] = NULL;
- 
-         g_assert(n <= G_N_ELEMENTS(extra_env));
-@@ -1301,6 +1862,10 @@ ck_session_dump (CkSession *session,
+@@ -1301,6 +1818,10 @@ ck_session_dump (CkSession *session,
          char *s;
          char *group_name;
  
@@ -3806,16 +3680,21 @@
          group_name = g_strdup_printf ("Session %s", session->priv->id);
          g_key_file_set_integer (key_file, group_name, "uid", session->priv->uid);
          g_key_file_set_string (key_file,
-@@ -1349,6 +1914,7 @@ ck_session_dump (CkSession *session,
-                                NONULL_STRING (session->priv->remote_host_name));
-         g_key_file_set_boolean (key_file, group_name, "is_active", session->priv->active);
-         g_key_file_set_boolean (key_file, group_name, "is_local", session->priv->is_local);
-+        g_key_file_set_boolean (key_file, group_name, "is_dynamic", session->priv->is_dynamic);
- 
-         s = g_time_val_to_iso8601 (&(session->priv->creation_time));
-         g_key_file_set_string (key_file,
+@@ -1313,6 +1834,12 @@ ck_session_dump (CkSession *session,
+                                        "type",
+                                        NONULL_STRING (session->priv->session_type));
+         }
++        if (session->priv->display_type != NULL) {
++                g_key_file_set_string (key_file,
++                                       group_name,
++                                       "display_type",
++                                       NONULL_STRING (session->priv->display_type));
++        }
+         if (session->priv->login_session_id != NULL && strlen (session->priv->login_session_id) > 0) {
+                 g_key_file_set_string (key_file,
+                                        group_name,
 diff --git a/src/ck-session.h b/src/ck-session.h
-index b6b565b..d0992ef 100644
+index b6b565b..a24d0a8 100644
 --- a/src/ck-session.h
 +++ b/src/ck-session.h
 @@ -25,6 +25,8 @@
@@ -3845,13 +3724,10 @@
                                                         const GPtrArray       *parameters);
  
  void                ck_session_dump                   (CkSession             *session,
-@@ -86,6 +93,18 @@ gboolean            ck_session_set_active             (CkSession             *se
+@@ -86,6 +93,15 @@ gboolean            ck_session_set_active             (CkSession             *se
  gboolean            ck_session_set_is_local           (CkSession             *session,
                                                         gboolean               is_local,
                                                         GError               **error);
-+gboolean            ck_session_set_is_dynamic         (CkSession             *session,
-+                                                       gboolean               is_dynamic,
-+                                                       GError               **error);
 +gboolean            ck_session_set_is_open            (CkSession             *session,
 +                                                       gboolean               is_open,
 +                                                       GError               **error);
@@ -3864,7 +3740,7 @@
  gboolean            ck_session_set_id                 (CkSession             *session,
                                                         const char            *ssid,
                                                         GError               **error);
-@@ -116,6 +135,11 @@ gboolean            ck_session_set_remote_host_name   (CkSession             *se
+@@ -116,6 +132,11 @@ gboolean            ck_session_set_remote_host_name   (CkSession             *se
  gboolean            ck_session_set_session_type       (CkSession             *session,
                                                         const char            *type,
                                                         GError               **error);
@@ -3876,13 +3752,10 @@
  
  /* Exported methods */
  
-@@ -132,6 +156,18 @@ gboolean            ck_session_is_active              (CkSession             *se
+@@ -132,6 +153,15 @@ gboolean            ck_session_is_active              (CkSession             *se
  gboolean            ck_session_is_local               (CkSession             *session,
                                                         gboolean              *local,
                                                         GError               **error);
-+gboolean            ck_session_is_dynamic             (CkSession             *session,
-+                                                       gboolean              *dynamic,
-+                                                       GError               **error);
 +gboolean            ck_session_is_open                (CkSession             *session,
 +                                                       gboolean              *open,
 +                                                       GError               **error);
@@ -3895,7 +3768,7 @@
  gboolean            ck_session_get_unix_user          (CkSession             *session,
                                                         guint                 *uid,
                                                         GError               **error);
-@@ -150,12 +186,18 @@ gboolean            ck_session_get_login_session_id   (CkSession             *se
+@@ -150,12 +180,18 @@ gboolean            ck_session_get_login_session_id   (CkSession             *se
  gboolean            ck_session_get_session_type       (CkSession             *session,
                                                         char                 **type,
                                                         GError               **error);
@@ -3914,7 +3787,7 @@
  /*deprecated*/
  gboolean            ck_session_get_user               (CkSession             *session,
                                                         guint                 *uid,
-@@ -171,6 +213,12 @@ gboolean            ck_session_get_idle_since_hint    (CkSession             *se
+@@ -171,6 +207,12 @@ gboolean            ck_session_get_idle_since_hint    (CkSession             *se
  gboolean            ck_session_set_idle_hint          (CkSession             *session,
                                                         gboolean               idle_hint,
                                                         DBusGMethodInvocation *context);
@@ -4163,7 +4036,7 @@
    </interface>
  </node>
 diff --git a/src/org.freedesktop.ConsoleKit.Session.xml b/src/org.freedesktop.ConsoleKit.Session.xml
-index b6e1cdb..31c8904 100644
+index b6e1cdb..2652058 100644
 --- a/src/org.freedesktop.ConsoleKit.Session.xml
 +++ b/src/org.freedesktop.ConsoleKit.Session.xml
 @@ -52,6 +52,19 @@
@@ -4186,22 +4059,10 @@
      <method name="GetUser">
        <arg name="uid" direction="out" type="u">
          <doc:doc>
-@@ -174,6 +187,30 @@
+@@ -174,6 +187,18 @@
          <doc:seealso><doc:ref type="property" to="Session:is-local">is-local</doc:ref></doc:seealso>
        </doc:doc>
      </method>
-+    <method name="IsDynamic">
-+      <arg name="dynamic" direction="out" type="b">
-+        <doc:doc>
-+          <doc:summary>TRUE if the session is dynamic, otherwise FALSE</doc:summary>
-+        </doc:doc>
-+      </arg>
-+      <doc:doc>
-+        <doc:description><doc:para>Returns whether the session is dynamic</doc:para>
-+        </doc:description>
-+        <doc:seealso><doc:ref type="property" to="Session:is-dynamic">is-dynamic</doc:ref></doc:seealso>
-+      </doc:doc>
-+    </method>
 +    <method name="IsOpen">
 +      <arg name="open" direction="out" type="b">
 +        <doc:doc>
@@ -4217,7 +4078,7 @@
      <method name="GetCreationTime">
        <arg name="iso8601_datetime" type="s" direction="out">
          <doc:doc>
-@@ -275,6 +312,21 @@
+@@ -275,6 +300,21 @@
          </doc:description>
        </doc:doc>
      </method>
@@ -4239,7 +4100,7 @@
  
      <signal name="ActiveChanged">
        <arg name="is_active" type="b">
-@@ -317,6 +369,19 @@
+@@ -317,6 +357,19 @@
        </doc:doc>
      </signal>
  
@@ -4259,7 +4120,7 @@
      <property name="unix-user" type="u" access="readwrite">
        <doc:doc>
          <doc:description>
-@@ -342,6 +407,16 @@
+@@ -342,6 +395,16 @@
          </doc:description>
        </doc:doc>
      </property>
@@ -4276,7 +4137,7 @@
      <property name="remote-host-name" type="s" access="readwrite">
        <doc:doc>
          <doc:description>
-@@ -396,6 +471,19 @@
+@@ -396,6 +459,19 @@
          </doc:description>
        </doc:doc>
      </property>
@@ -4296,7 +4157,7 @@
      <property name="is-local" type="b" access="readwrite">
        <doc:doc>
          <doc:description>
-@@ -408,6 +496,14 @@
+@@ -408,6 +484,14 @@
          </doc:description>
        </doc:doc>
      </property>
@@ -4311,7 +4172,7 @@
      <property name="idle-hint" type="b" access="readwrite">
        <doc:doc>
          <doc:description>
-@@ -430,6 +526,14 @@
+@@ -430,6 +514,14 @@
          </doc:description>
        </doc:doc>
      </property>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/patches/ConsoleKit-06-sol-xserver.diff	Thu Nov 05 07:08:02 2009 +0000
@@ -0,0 +1,10 @@
+diff --git a/data/displays.d/Local.display.in b/data/displays.d/Local.display.in
+index b845a7b..b65b3e4 100644
+--- a/data/displays.d/Local.display.in
++++ b/data/displays.d/Local.display.in
+@@ -2,4 +2,4 @@
+ Type=X11
+ 
+ [X11]
+-Exec=@X11_DIR@/Xorg $display -br -verbose -auth $auth -nolisten tcp $vt
++Exec=@X11_DIR@/Xserver $display -br -auth $auth $vt
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/patches/ConsoleKit-07-sol-vt-major.diff	Thu Nov 05 07:08:02 2009 +0000
@@ -0,0 +1,48 @@
+commit 42a909bbc8ede5c27e3d40606a98ab1251511dfc
+Author: Halton Huo <[email protected]>
+Date:   Tue Nov 3 11:42:07 2009 +0800
+
+    Identify major device number for vt rather than hard code as 15.
+    Fixes bug http://defect.opensolaris.org/bz/show_bug.cgi?id=12322
+    This is solaris only bug, won't affect other platform.
+
+diff --git a/src/ck-sysdeps-solaris.c b/src/ck-sysdeps-solaris.c
+index 607a3ae..335ab8b 100644
+--- a/src/ck-sysdeps-solaris.c
++++ b/src/ck-sysdeps-solaris.c
+@@ -124,6 +124,26 @@ ck_process_stat_get_tty (CkProcessStat *stat)
+         return g_strdup (stat->tty_text);
+ }
+ 
++#define VT0_FILE "/dev/vt/0"
++static int
++get_system_vt_major ()
++{
++        static      ret = -1;
++        struct stat st;
++        int         res;
++
++        if (ret >= 0)
++                return ret;
++
++        res = stat (VT0_FILE, &st);
++
++        if (res == 0) {
++                ret = major (st.st_rdev);
++        }
++        
++        return ret;
++}
++
+ /* return 1 if it works, or 0 for failure */
+ static gboolean
+ stat2proc (pid_t        pid,
+@@ -177,7 +197,7 @@ stat2proc (pid_t        pid,
+ 
+         snprintf (P->tty_text, sizeof P->tty_text, "%3d,%-3d", tty_maj, tty_min);
+ 
+-	if (tty_maj == 15) {
++	if (tty_maj == get_system_vt_major ()) {
+ 		snprintf (P->tty_text, sizeof P->tty_text, "/dev/vt/%u", tty_min);
+         }
+         if (P->tty == NO_TTY_VALUE) {
--- a/patches/gdm-04-dynamic-display.diff	Thu Nov 05 06:52:50 2009 +0000
+++ b/patches/gdm-04-dynamic-display.diff	Thu Nov 05 07:08:02 2009 +0000
@@ -8,10 +8,10 @@
  VOID:DOUBLE
 +VOID:STRING,STRING,STRING,POINTER,STRING,POINTER
 diff --git a/configure.ac b/configure.ac
-index 4470557..a3512e7 100644
+index 4fe4430..172409a 100644
 --- a/configure.ac
 +++ b/configure.ac
-@@ -268,7 +268,7 @@ AC_CHECK_TYPE(socklen_t,,
+@@ -289,7 +289,7 @@ AC_CHECK_TYPE(socklen_t,,
  #endif
  )
  AC_CHECK_HEADERS(sys/sockio.h)
@@ -21,10 +21,10 @@
  dnl checks needed for Darwin compatibility to linux **environ.
  AC_CHECK_HEADERS(crt_externs.h)
 diff --git a/daemon/Makefile.am b/daemon/Makefile.am
-index 3daf924..0a00016 100644
+index a122a15..86feddf 100644
 --- a/daemon/Makefile.am
 +++ b/daemon/Makefile.am
-@@ -296,6 +296,8 @@ gdm_binary_SOURCES = 			\
+@@ -297,6 +297,8 @@ gdm_binary_SOURCES = 			\
  	gdm-static-display.h		\
  	gdm-transient-display.c		\
  	gdm-transient-display.h		\
@@ -34,7 +34,7 @@
  	gdm-static-factory-display.h	\
  	gdm-product-display.c		\
 diff --git a/daemon/ck-connector.c b/daemon/ck-connector.c
-index 0117eb9..8f6a407 100644
+index 0117eb9..8609ccb 100644
 --- a/daemon/ck-connector.c
 +++ b/daemon/ck-connector.c
 @@ -65,6 +65,7 @@ struct _CkConnector
@@ -45,7 +45,7 @@
          dbus_bool_t     session_created;
          DBusConnection *connection;
  };
-@@ -76,9 +77,13 @@ static struct {
+@@ -76,8 +77,11 @@ static struct {
          { "display-device",     DBUS_TYPE_STRING },
          { "x11-display-device", DBUS_TYPE_STRING },
          { "x11-display",        DBUS_TYPE_STRING },
@@ -55,11 +55,9 @@
          { "session-type",       DBUS_TYPE_STRING },
 +        { "display-type",       DBUS_TYPE_STRING },
          { "is-local",           DBUS_TYPE_BOOLEAN },
-+        { "is-dynamic",         DBUS_TYPE_BOOLEAN },
          { "unix-user",          DBUS_TYPE_INT32 },
  };
- 
-@@ -181,6 +186,10 @@ _ck_connector_free (CkConnector *connector)
+@@ -181,6 +185,10 @@ _ck_connector_free (CkConnector *connector)
                  free (connector->cookie);
          }
  
@@ -70,7 +68,7 @@
          free (connector);
  }
  
-@@ -241,6 +250,7 @@ ck_connector_new (void)
+@@ -241,6 +249,7 @@ ck_connector_new (void)
          connector->refcount = 1;
          connector->connection = NULL;
          connector->cookie = NULL;
@@ -78,7 +76,7 @@
          connector->session_created = FALSE;
  oom:
          return connector;
-@@ -266,6 +276,7 @@ ck_connector_open_session (CkConnector *connector,
+@@ -266,6 +275,7 @@ ck_connector_open_session (CkConnector *connector,
          DBusMessage *reply;
          dbus_bool_t  ret;
          char        *cookie;
@@ -86,7 +84,7 @@
  
          _ck_return_val_if_fail (connector != NULL, FALSE);
          _ck_return_val_if_fail ((error) == NULL || !dbus_error_is_set ((error)), FALSE);
-@@ -334,10 +345,68 @@ ck_connector_open_session (CkConnector *connector,
+@@ -334,10 +344,68 @@ ck_connector_open_session (CkConnector *connector,
                  goto out;
          }
  
@@ -155,7 +153,7 @@
          if (reply != NULL) {
                  dbus_message_unref (reply);
          }
-@@ -362,6 +431,7 @@ ck_connector_open_session_with_parameters_valist (CkConnector *connector,
+@@ -362,6 +430,7 @@ ck_connector_open_session_with_parameters_valist (CkConnector *connector,
          DBusMessageIter iter_array;
          dbus_bool_t     ret;
          char           *cookie;
@@ -163,7 +161,7 @@
          const char     *name;
  
          _ck_return_val_if_fail (connector != NULL, FALSE);
-@@ -470,6 +540,57 @@ ck_connector_open_session_with_parameters_valist (CkConnector *connector,
+@@ -470,6 +539,57 @@ ck_connector_open_session_with_parameters_valist (CkConnector *connector,
                  goto out;
          }
  
@@ -221,7 +219,7 @@
          connector->session_created = TRUE;
          ret = TRUE;
  
-@@ -590,6 +711,73 @@ ck_connector_get_cookie (CkConnector *connector)
+@@ -590,6 +710,73 @@ ck_connector_get_cookie (CkConnector *connector)
  }
  
  /**
@@ -319,7 +317,7 @@
                                                           DBusError   *error);
  
 diff --git a/daemon/gdm-display.c b/daemon/gdm-display.c
-index 53f48f9..da60e5f 100644
+index abedc0b..4a94aab 100644
 --- a/daemon/gdm-display.c
 +++ b/daemon/gdm-display.c
 @@ -51,11 +51,14 @@ static guint32 display_serial = 1;
@@ -337,17 +335,16 @@
          int                   status;
          time_t                creation_time;
          GTimer               *slave_timer;
-@@ -66,6 +69,9 @@ struct GdmDisplayPrivate
+@@ -66,6 +69,8 @@ struct GdmDisplayPrivate
          GdmDisplayAccessFile *access_file;
  
          gboolean              is_local;
-+        gboolean              is_dynamic;
 +        gboolean              use_auth;
 +        gboolean              block_console_session_requests;
          guint                 finish_idle_id;
  
          GdmSlaveProxy        *slave_proxy;
-@@ -78,13 +84,19 @@ enum {
+@@ -78,13 +83,18 @@ enum {
          PROP_ID,
          PROP_STATUS,
          PROP_SEAT_ID,
@@ -360,14 +357,13 @@
          PROP_X11_COOKIE,
          PROP_X11_AUTHORITY_FILE,
          PROP_IS_LOCAL,
-+        PROP_IS_DYNAMIC,
 +        PROP_USE_AUTH,
          PROP_SLAVE_COMMAND,
 +        PROP_BLOCK_CONSOLE_SESSION_REQUESTS,
  };
  
  static void     gdm_display_class_init  (GdmDisplayClass *klass);
-@@ -490,6 +502,20 @@ gdm_display_get_seat_id (GdmDisplay *display,
+@@ -489,6 +499,20 @@ gdm_display_get_seat_id (GdmDisplay *display,
         return TRUE;
  }
  
@@ -388,7 +384,7 @@
  static gboolean
  finish_idle (GdmDisplay *display)
  {
-@@ -551,10 +577,12 @@ gdm_display_real_prepare (GdmDisplay *display)
+@@ -550,10 +574,12 @@ gdm_display_real_prepare (GdmDisplay *display)
  
          g_assert (display->priv->slave_proxy == NULL);
  
@@ -405,7 +401,7 @@
          }
  
          _gdm_display_set_status (display, GDM_DISPLAY_PREPARED);
-@@ -743,6 +771,20 @@ gdm_display_get_id (GdmDisplay         *display,
+@@ -742,6 +768,20 @@ gdm_display_get_id (GdmDisplay         *display,
  }
  
  gboolean
@@ -426,7 +422,7 @@
  gdm_display_get_x11_display_name (GdmDisplay   *display,
                                    char        **x11_display,
                                    GError      **error)
-@@ -757,6 +799,20 @@ gdm_display_get_x11_display_name (GdmDisplay   *display,
+@@ -756,6 +796,20 @@ gdm_display_get_x11_display_name (GdmDisplay   *display,
  }
  
  gboolean
@@ -447,25 +443,11 @@
  gdm_display_is_local (GdmDisplay *display,
                        gboolean   *local,
                        GError    **error)
-@@ -770,6 +826,34 @@ gdm_display_is_local (GdmDisplay *display,
+@@ -769,6 +823,20 @@ gdm_display_is_local (GdmDisplay *display,
          return TRUE;
  }
  
 +gboolean
-+gdm_display_is_dynamic (GdmDisplay *display,
-+                        gboolean   *dynamic,
-+                        GError    **error)
-+{
-+        g_return_val_if_fail (GDM_IS_DISPLAY (display), FALSE);
-+
-+        if (dynamic != NULL) {
-+                *dynamic = display->priv->is_dynamic;
-+        }
-+
-+        return TRUE;
-+}
-+
-+gboolean
 +gdm_display_use_auth (GdmDisplay *display,
 +                      gboolean   *use_auth,
 +                      GError    **error)
@@ -482,7 +464,7 @@
  static void
  _gdm_display_set_id (GdmDisplay     *display,
                       const char     *id)
-@@ -779,6 +863,14 @@ _gdm_display_set_id (GdmDisplay     *display,
+@@ -778,6 +846,14 @@ _gdm_display_set_id (GdmDisplay     *display,
  }
  
  static void
@@ -497,7 +479,7 @@
  _gdm_display_set_seat_id (GdmDisplay     *display,
                            const char     *seat_id)
  {
-@@ -787,6 +879,24 @@ _gdm_display_set_seat_id (GdmDisplay     *display,
+@@ -786,6 +862,24 @@ _gdm_display_set_seat_id (GdmDisplay     *display,
  }
  
  static void
@@ -522,7 +504,7 @@
  _gdm_display_set_remote_hostname (GdmDisplay     *display,
                                    const char     *hostname)
  {
-@@ -810,6 +920,14 @@ _gdm_display_set_x11_display_name (GdmDisplay     *display,
+@@ -809,6 +903,14 @@ _gdm_display_set_x11_display_name (GdmDisplay     *display,
  }
  
  static void
@@ -537,17 +519,10 @@
  _gdm_display_set_x11_cookie (GdmDisplay     *display,
                               const char     *x11_cookie)
  {
-@@ -825,6 +943,20 @@ _gdm_display_set_is_local (GdmDisplay     *display,
+@@ -824,6 +926,13 @@ _gdm_display_set_is_local (GdmDisplay     *display,
  }
  
  static void
-+_gdm_display_set_is_dynamic (GdmDisplay     *display,
-+                             gboolean        is_dynamic)
-+{
-+        display->priv->is_dynamic = is_dynamic;
-+}
-+
-+static void
 +_gdm_display_set_use_auth (GdmDisplay     *display,
 +                           gboolean        use_auth)
 +{
@@ -558,7 +533,7 @@
  _gdm_display_set_slave_command (GdmDisplay     *display,
                                  const char     *command)
  {
-@@ -833,6 +965,13 @@ _gdm_display_set_slave_command (GdmDisplay     *display,
+@@ -832,6 +941,13 @@ _gdm_display_set_slave_command (GdmDisplay     *display,
  }
  
  static void
@@ -572,7 +547,7 @@
  gdm_display_set_property (GObject        *object,
                            guint           prop_id,
                            const GValue   *value,
-@@ -846,12 +985,18 @@ gdm_display_set_property (GObject        *object,
+@@ -845,12 +961,18 @@ gdm_display_set_property (GObject        *object,
          case PROP_ID:
                  _gdm_display_set_id (self, g_value_get_string (value));
                  break;
@@ -591,7 +566,7 @@
          case PROP_REMOTE_HOSTNAME:
                  _gdm_display_set_remote_hostname (self, g_value_get_string (value));
                  break;
-@@ -861,15 +1006,27 @@ gdm_display_set_property (GObject        *object,
+@@ -860,15 +982,24 @@ gdm_display_set_property (GObject        *object,
          case PROP_X11_DISPLAY_NAME:
                  _gdm_display_set_x11_display_name (self, g_value_get_string (value));
                  break;
@@ -604,9 +579,6 @@
          case PROP_IS_LOCAL:
                  _gdm_display_set_is_local (self, g_value_get_boolean (value));
                  break;
-+        case PROP_IS_DYNAMIC:
-+                _gdm_display_set_is_dynamic (self, g_value_get_boolean (value));
-+                break;
 +        case PROP_USE_AUTH:
 +                _gdm_display_set_use_auth (self, g_value_get_boolean (value));
 +                break;
@@ -619,7 +591,7 @@
          default:
                  G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
                  break;
-@@ -890,12 +1047,18 @@ gdm_display_get_property (GObject        *object,
+@@ -889,12 +1020,18 @@ gdm_display_get_property (GObject        *object,
          case PROP_ID:
                  g_value_set_string (value, self->priv->id);
                  break;
@@ -638,7 +610,7 @@
          case PROP_REMOTE_HOSTNAME:
                  g_value_set_string (value, self->priv->remote_hostname);
                  break;
-@@ -905,6 +1068,9 @@ gdm_display_get_property (GObject        *object,
+@@ -904,6 +1041,9 @@ gdm_display_get_property (GObject        *object,
          case PROP_X11_DISPLAY_NAME:
                  g_value_set_string (value, self->priv->x11_display_name);
                  break;
@@ -648,13 +620,10 @@
          case PROP_X11_COOKIE:
                  g_value_set_string (value, self->priv->x11_cookie);
                  break;
-@@ -915,9 +1081,18 @@ gdm_display_get_property (GObject        *object,
+@@ -914,9 +1054,15 @@ gdm_display_get_property (GObject        *object,
          case PROP_IS_LOCAL:
                  g_value_set_boolean (value, self->priv->is_local);
                  break;
-+        case PROP_IS_DYNAMIC:
-+                g_value_set_boolean (value, self->priv->is_dynamic);
-+                break;
 +        case PROP_USE_AUTH:
 +                g_value_set_boolean (value, self->priv->use_auth);
 +                break;
@@ -667,7 +636,7 @@
          default:
                  G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
                  break;
-@@ -1034,6 +1209,13 @@ gdm_display_class_init (GdmDisplayClass *klass)
+@@ -1033,6 +1179,13 @@ gdm_display_class_init (GdmDisplayClass *klass)
                                                                NULL,
                                                                G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
          g_object_class_install_property (object_class,
@@ -681,7 +650,7 @@
                                           PROP_REMOTE_HOSTNAME,
                                           g_param_spec_string ("remote-hostname",
                                                                "remote-hostname",
-@@ -1057,6 +1239,13 @@ gdm_display_class_init (GdmDisplayClass *klass)
+@@ -1056,6 +1209,13 @@ gdm_display_class_init (GdmDisplayClass *klass)
                                                                NULL,
                                                                G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
          g_object_class_install_property (object_class,
@@ -695,7 +664,7 @@
                                           PROP_SEAT_ID,
                                           g_param_spec_string ("seat-id",
                                                                "seat id",
-@@ -1064,6 +1253,13 @@ gdm_display_class_init (GdmDisplayClass *klass)
+@@ -1063,6 +1223,13 @@ gdm_display_class_init (GdmDisplayClass *klass)
                                                                NULL,
                                                                G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
          g_object_class_install_property (object_class,
@@ -709,7 +678,7 @@
                                           PROP_X11_COOKIE,
                                           g_param_spec_string ("x11-cookie",
                                                                "cookie",
-@@ -1077,7 +1273,6 @@ gdm_display_class_init (GdmDisplayClass *klass)
+@@ -1076,7 +1243,6 @@ gdm_display_class_init (GdmDisplayClass *klass)
                                                                "authority file",
                                                                NULL,
                                                                G_PARAM_READABLE));
@@ -717,19 +686,12 @@
          g_object_class_install_property (object_class,
                                           PROP_IS_LOCAL,
                                           g_param_spec_boolean ("is-local",
-@@ -1085,7 +1280,20 @@ gdm_display_class_init (GdmDisplayClass *klass)
+@@ -1084,7 +1250,13 @@ gdm_display_class_init (GdmDisplayClass *klass)
                                                                 NULL,
                                                                 TRUE,
                                                                 G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
 -
 +        g_object_class_install_property (object_class,
-+                                         PROP_IS_DYNAMIC,
-+                                         g_param_spec_boolean ("is-dynamic",
-+                                                               NULL,
-+                                                               NULL,
-+                                                               FALSE,
-+                                                               G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
-+        g_object_class_install_property (object_class,
 +                                         PROP_USE_AUTH,
 +                                         g_param_spec_boolean ("use-auth",
 +                                                               NULL,
@@ -739,7 +701,7 @@
          g_object_class_install_property (object_class,
                                           PROP_SLAVE_COMMAND,
                                           g_param_spec_string ("slave-command",
-@@ -1094,6 +1302,13 @@ gdm_display_class_init (GdmDisplayClass *klass)
+@@ -1093,6 +1265,13 @@ gdm_display_class_init (GdmDisplayClass *klass)
                                                                DEFAULT_SLAVE_COMMAND,
                                                                G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
          g_object_class_install_property (object_class,
@@ -753,7 +715,7 @@
                                           PROP_STATUS,
                                           g_param_spec_int ("status",
                                                             "status",
-@@ -1132,9 +1347,12 @@ gdm_display_finalize (GObject *object)
+@@ -1131,9 +1310,12 @@ gdm_display_finalize (GObject *object)
  
          g_debug ("GdmDisplay: Finalizing display: %s", display->priv->id);
          g_free (display->priv->id);
@@ -766,7 +728,7 @@
          g_free (display->priv->x11_cookie);
          g_free (display->priv->slave_command);
  
-@@ -1152,3 +1370,25 @@ gdm_display_finalize (GObject *object)
+@@ -1151,3 +1333,25 @@ gdm_display_finalize (GObject *object)
  
          G_OBJECT_CLASS (gdm_display_parent_class)->finalize (object);
  }
@@ -793,7 +755,7 @@
 +        return TRUE;
 +}
 diff --git a/daemon/gdm-display.h b/daemon/gdm-display.h
-index 607ea1d..492aa5f 100644
+index 607ea1d..b50549b 100644
 --- a/daemon/gdm-display.h
 +++ b/daemon/gdm-display.h
 @@ -102,6 +102,9 @@ gboolean            gdm_display_unmanage                       (GdmDisplay *disp
@@ -806,7 +768,7 @@
  gboolean            gdm_display_get_remote_hostname            (GdmDisplay *display,
                                                                  char      **hostname,
                                                                  GError    **error);
-@@ -111,12 +114,24 @@ gboolean            gdm_display_get_x11_display_number         (GdmDisplay *disp
+@@ -111,12 +114,21 @@ gboolean            gdm_display_get_x11_display_number         (GdmDisplay *disp
  gboolean            gdm_display_get_x11_display_name           (GdmDisplay *display,
                                                                  char      **x11_display,
                                                                  GError    **error);
@@ -822,16 +784,13 @@
  gboolean            gdm_display_is_local                       (GdmDisplay *display,
                                                                  gboolean   *local,
                                                                  GError    **error);
-+gboolean            gdm_display_is_dynamic                     (GdmDisplay *display,
-+                                                                gboolean   *dynamic,
-+                                                                GError    **error);
 +gboolean            gdm_display_use_auth                       (GdmDisplay *display,
 +                                                                gboolean   *use_auth,
 +                                                                GError    **error);
  gboolean            gdm_display_get_timed_login_details        (GdmDisplay *display,
                                                                  gboolean   *enabled,
                                                                  char      **username,
-@@ -130,6 +145,9 @@ gboolean            gdm_display_get_x11_cookie                 (GdmDisplay *disp
+@@ -130,6 +142,9 @@ gboolean            gdm_display_get_x11_cookie                 (GdmDisplay *disp
  gboolean            gdm_display_get_x11_authority_file         (GdmDisplay *display,
                                                                  char      **filename,
                                                                  GError    **error);
@@ -841,7 +800,7 @@
  gboolean            gdm_display_add_user_authorization         (GdmDisplay *display,
                                                                  const char *username,
                                                                  char      **filename,
-@@ -140,6 +158,11 @@ gboolean            gdm_display_remove_user_authorization      (GdmDisplay *disp
+@@ -140,6 +155,11 @@ gboolean            gdm_display_remove_user_authorization      (GdmDisplay *disp
  gboolean            gdm_display_set_slave_bus_name             (GdmDisplay *display,
                                                                  const char *name,
                                                                  GError    **error);
@@ -854,7 +813,7 @@
  
  G_END_DECLS
 diff --git a/daemon/gdm-display.xml b/daemon/gdm-display.xml
-index a92e37f..945939a 100644
+index a92e37f..c4d0b35 100644
 --- a/daemon/gdm-display.xml
 +++ b/daemon/gdm-display.xml
 @@ -4,11 +4,17 @@
@@ -892,20 +851,17 @@
      </method>
      <method name="GetRemoteHostname">
        <arg name="hostname" direction="out" type="s"/>
-@@ -25,6 +38,12 @@
+@@ -25,6 +38,9 @@
      <method name="IsLocal">
        <arg name="local" direction="out" type="b"/>
      </method>
-+    <method name="IsDynamic">
-+      <arg name="dynamic" direction="out" type="b"/>
-+    </method>
 +    <method name="UseAuth">
-+      <arg name="dynamic" direction="out" type="b"/>
++      <arg name="use_auth" direction="out" type="b"/>
 +    </method>
      <method name="AddUserAuthorization">
        <arg name="username" direction="in" type="s"/>
        <arg name="filename" direction="out" type="s"/>
-@@ -32,6 +51,9 @@
+@@ -32,6 +48,9 @@
      <method name="RemoveUserAuthorization">
        <arg name="username" direction="in" type="s"/>
      </method>
@@ -917,10 +873,10 @@
      </method>
 diff --git a/daemon/gdm-dynamic-display.c b/daemon/gdm-dynamic-display.c
 new file mode 100644
-index 0000000..f9439f2
+index 0000000..c0beced
 --- /dev/null
 +++ b/daemon/gdm-dynamic-display.c
-@@ -0,0 +1,204 @@
+@@ -0,0 +1,203 @@
 +/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
 + *
 + * Authors: [email protected]
@@ -1119,7 +1075,6 @@
 +        object = g_object_new (GDM_TYPE_DYNAMIC_DISPLAY,
 +                               "x11-display-number", display_number,
 +                               "x11-display-name", x11_display,
-+                               "is-dynamic", TRUE,
 +                               NULL);
 +        g_free (x11_display);
 +
@@ -1191,14 +1146,11 @@
 +
 +#endif /* __GDM_DYNAMIC_DISPLAY_H */
 diff --git a/daemon/gdm-factory-slave.c b/daemon/gdm-factory-slave.c
-index d09c913..5cbcd74 100644
+index d09c913..5fe7753 100644
 --- a/daemon/gdm-factory-slave.c
 +++ b/daemon/gdm-factory-slave.c
-@@ -458,8 +458,11 @@ static void
- run_greeter (GdmFactorySlave *slave)
- {
+@@ -460,6 +460,8 @@ run_greeter (GdmFactorySlave *slave)
          gboolean       display_is_local;
-+        gboolean       display_is_dynamic;
          char          *display_id;
          char          *display_name;
 +        char          *seat_id;
@@ -1206,11 +1158,8 @@
          char          *display_device;
          char          *display_hostname;
          char          *auth_file;
-@@ -468,16 +471,22 @@ run_greeter (GdmFactorySlave *slave)
-         g_debug ("GdmFactorySlave: Running greeter");
- 
+@@ -470,6 +472,8 @@ run_greeter (GdmFactorySlave *slave)
          display_is_local = FALSE;
-+        display_is_dynamic = FALSE;
          display_id = NULL;
          display_name = NULL;
 +        seat_id = NULL;
@@ -1218,10 +1167,8 @@
          auth_file = NULL;
          display_device = NULL;
          display_hostname = NULL;
- 
-         g_object_get (slave,
+@@ -478,6 +482,8 @@ run_greeter (GdmFactorySlave *slave)
                        "display-is-local", &display_is_local,
-+                      "display-is-dynamic", &display_is_dynamic,
                        "display-id", &display_id,
                        "display-name", &display_name,
 +                      "seat-id", &seat_id,
@@ -1229,7 +1176,7 @@
                        "display-hostname", &display_hostname,
                        "display-x11-authority-file", &auth_file,
                        NULL);
-@@ -534,9 +543,12 @@ run_greeter (GdmFactorySlave *slave)
+@@ -534,6 +540,8 @@ run_greeter (GdmFactorySlave *slave)
  
          g_debug ("GdmFactorySlave: Creating greeter on %s %s", display_name, display_device);
          slave->priv->greeter = gdm_greeter_session_new (display_name,
@@ -1237,13 +1184,8 @@
 +                                                        session_id,
                                                          display_device,
                                                          display_hostname,
--                                                        display_is_local);
-+                                                        display_is_local,
-+                                                        display_is_dynamic);
-         g_signal_connect (slave->priv->greeter,
-                           "started",
-                           G_CALLBACK (on_greeter_session_start),
-@@ -563,6 +575,7 @@ run_greeter (GdmFactorySlave *slave)
+                                                         display_is_local);
+@@ -563,6 +571,7 @@ run_greeter (GdmFactorySlave *slave)
  
          g_free (display_id);
          g_free (display_name);
@@ -1251,7 +1193,7 @@
          g_free (display_device);
          g_free (display_hostname);
          g_free (auth_file);
-@@ -628,14 +641,12 @@ on_server_died (GdmServer       *server,
+@@ -628,14 +637,12 @@ on_server_died (GdmServer       *server,
  static gboolean
  gdm_factory_slave_run (GdmFactorySlave *slave)
  {
@@ -1268,7 +1210,7 @@
                        NULL);
  
          /* if this is local display start a server if one doesn't
-@@ -643,7 +654,7 @@ gdm_factory_slave_run (GdmFactorySlave *slave)
+@@ -643,7 +650,7 @@ gdm_factory_slave_run (GdmFactorySlave *slave)
          if (display_is_local) {
                  gboolean res;
  
@@ -1277,7 +1219,7 @@
                  g_signal_connect (slave->priv->server,
                                    "exited",
                                    G_CALLBACK (on_server_exited),
-@@ -675,8 +686,7 @@ gdm_factory_slave_run (GdmFactorySlave *slave)
+@@ -675,8 +682,7 @@ gdm_factory_slave_run (GdmFactorySlave *slave)
                  g_timeout_add (500, (GSourceFunc)idle_connect_to_display, slave);
          }
  
@@ -1288,10 +1230,10 @@
          return TRUE;
  }
 diff --git a/daemon/gdm-greeter-session.c b/daemon/gdm-greeter-session.c
-index aae1928..073994b 100644
+index aae1928..95a0e6f 100644
 --- a/daemon/gdm-greeter-session.c
 +++ b/daemon/gdm-greeter-session.c
-@@ -140,9 +140,12 @@ gdm_greeter_session_finalize (GObject *object)
+@@ -140,6 +140,8 @@ gdm_greeter_session_finalize (GObject *object)
  
  GdmGreeterSession *
  gdm_greeter_session_new (const char *display_name,
@@ -1299,13 +1241,8 @@
 +                         const char *session_id,
                           const char *display_device,
                           const char *display_hostname,
--                         gboolean    display_is_local)
-+                         gboolean    display_is_local,
-+                         gboolean    display_is_dynamic)
- {
-         GObject *object;
- 
-@@ -153,9 +156,12 @@ gdm_greeter_session_new (const char *display_name,
+                          gboolean    display_is_local)
+@@ -153,6 +155,8 @@ gdm_greeter_session_new (const char *display_name,
                                 "server-env-var-name", "GDM_GREETER_DBUS_ADDRESS",
                                 "register-ck-session", TRUE,
                                 "x11-display-name", display_name,
@@ -1314,15 +1251,11 @@
                                 "x11-display-device", display_device,
                                 "x11-display-hostname", display_hostname,
                                 "x11-display-is-local", display_is_local,
-+                               "x11-display-is-dynamic", display_is_dynamic,
-                                NULL);
- 
-         return GDM_GREETER_SESSION (object);
 diff --git a/daemon/gdm-greeter-session.h b/daemon/gdm-greeter-session.h
-index 0a171c9..aa11188 100644
+index 0a171c9..c3c3506 100644
 --- a/daemon/gdm-greeter-session.h
 +++ b/daemon/gdm-greeter-session.h
-@@ -50,9 +50,12 @@ typedef struct
+@@ -50,6 +50,8 @@ typedef struct
  
  GType                 gdm_greeter_session_get_type           (void);
  GdmGreeterSession *   gdm_greeter_session_new                (const char        *display_name,
@@ -1330,12 +1263,7 @@
 +                                                              const char        *session_id,
                                                                const char        *display_device,
                                                                const char        *display_hostname,
--                                                              gboolean           display_is_local);
-+                                                              gboolean           display_is_local,
-+                                                              gboolean           display_is_dynamic);
- 
- G_END_DECLS
- 
+                                                               gboolean           display_is_local);
 diff --git a/daemon/gdm-local-display-factory.c b/daemon/gdm-local-display-factory.c
 index 3984ada..6512f9b 100644
 --- a/daemon/gdm-local-display-factory.c
@@ -2407,7 +2335,7 @@
  gboolean            gdm_server_stop      (GdmServer   *server);
  char *              gdm_server_get_display_device (GdmServer *server);
 diff --git a/daemon/gdm-session-direct.c b/daemon/gdm-session-direct.c
-index e1ea8a0..d6ca385 100644
+index 8eadf4d..c5c59bd 100644
 --- a/daemon/gdm-session-direct.c
 +++ b/daemon/gdm-session-direct.c
 @@ -53,6 +53,8 @@
@@ -2419,7 +2347,7 @@
  #define GDM_SESSION_DBUS_PATH         "/org/gnome/DisplayManager/Session"
  #define GDM_SESSION_DBUS_INTERFACE    "org.gnome.DisplayManager.Session"
  #define GDM_SESSION_DBUS_ERROR_CANCEL "org.gnome.DisplayManager.Session.Error.Cancel"
-@@ -88,11 +90,15 @@ struct _GdmSessionDirectPrivate
+@@ -87,11 +89,15 @@ struct _GdmSessionDirectPrivate
          char                *display_hostname;
          char                *display_device;
          char                *display_x11_authority_file;
@@ -2435,7 +2363,7 @@
          DBusGConnection     *connection;
  };
  
-@@ -104,7 +110,10 @@ enum {
+@@ -103,7 +109,10 @@ enum {
          PROP_DISPLAY_IS_LOCAL,
          PROP_DISPLAY_DEVICE,
          PROP_DISPLAY_X11_AUTHORITY_FILE,
@@ -2446,7 +2374,7 @@
  };
  
  static void     gdm_session_iface_init          (GdmSessionIface      *iface);
-@@ -732,6 +741,34 @@ gdm_session_direct_handle_username_changed (GdmSessionDirect *session,
+@@ -730,6 +739,34 @@ gdm_session_direct_handle_username_changed (GdmSessionDirect *session,
          return DBUS_HANDLER_RESULT_HANDLED;
  }
  
@@ -2481,7 +2409,7 @@
  static void
  cancel_pending_query (GdmSessionDirect *session)
  {
-@@ -1162,6 +1199,8 @@ session_worker_message (DBusConnection *connection,
+@@ -1160,6 +1197,8 @@ session_worker_message (DBusConnection *connection,
                  return gdm_session_direct_handle_accreditation_failed (session, connection, message);
          } else if (dbus_message_is_method_call (message, GDM_SESSION_DBUS_INTERFACE, "UsernameChanged")) {
                  return gdm_session_direct_handle_username_changed (session, connection, message);
@@ -2490,7 +2418,7 @@
          } else if (dbus_message_is_method_call (message, GDM_SESSION_DBUS_INTERFACE, "SessionStarted")) {
                  return gdm_session_direct_handle_session_started (session, connection, message);
          } else if (dbus_message_is_method_call (message, GDM_SESSION_DBUS_INTERFACE, "StartFailed")) {
-@@ -1266,6 +1305,8 @@ do_introspect (DBusConnection *connection,
+@@ -1264,6 +1303,8 @@ do_introspect (DBusConnection *connection,
                                 "    <signal name=\"Setup\">\n"
                                 "      <arg name=\"service_name\" type=\"s\"/>\n"
                                 "      <arg name=\"x11_display_name\" type=\"s\"/>\n"
@@ -2499,7 +2427,7 @@
                                 "      <arg name=\"display_device\" type=\"s\"/>\n"
                                 "      <arg name=\"hostname\" type=\"s\"/>\n"
                                 "      <arg name=\"x11_authority_file\" type=\"s\"/>\n"
-@@ -1273,6 +1314,8 @@ do_introspect (DBusConnection *connection,
+@@ -1271,6 +1312,8 @@ do_introspect (DBusConnection *connection,
                                 "    <signal name=\"SetupForUser\">\n"
                                 "      <arg name=\"service_name\" type=\"s\"/>\n"
                                 "      <arg name=\"x11_display_name\" type=\"s\"/>\n"
@@ -2508,7 +2436,7 @@
                                 "      <arg name=\"display_device\" type=\"s\"/>\n"
                                 "      <arg name=\"hostname\" type=\"s\"/>\n"
                                 "      <arg name=\"x11_authority_file\" type=\"s\"/>\n"
-@@ -1655,6 +1698,8 @@ send_setup (GdmSessionDirect *session,
+@@ -1635,6 +1678,8 @@ send_setup (GdmSessionDirect *session,
          DBusMessage    *message;
          DBusMessageIter iter;
          const char     *display_name;
@@ -2517,7 +2445,7 @@
          const char     *display_device;
          const char     *display_hostname;
          const char     *display_x11_authority_file;
-@@ -1666,6 +1711,16 @@ send_setup (GdmSessionDirect *session,
+@@ -1646,6 +1691,16 @@ send_setup (GdmSessionDirect *session,
          } else {
                  display_name = "";
          }
@@ -2534,7 +2462,7 @@
          if (session->priv->display_hostname != NULL) {
                  display_hostname = session->priv->display_hostname;
          } else {
-@@ -1691,6 +1746,8 @@ send_setup (GdmSessionDirect *session,
+@@ -1671,6 +1726,8 @@ send_setup (GdmSessionDirect *session,
          dbus_message_iter_init_append (message, &iter);
          dbus_message_iter_append_basic (&iter, DBUS_TYPE_STRING, &service_name);
          dbus_message_iter_append_basic (&iter, DBUS_TYPE_STRING, &display_name);
@@ -2543,7 +2471,7 @@
          dbus_message_iter_append_basic (&iter, DBUS_TYPE_STRING, &display_device);
          dbus_message_iter_append_basic (&iter, DBUS_TYPE_STRING, &display_hostname);
          dbus_message_iter_append_basic (&iter, DBUS_TYPE_STRING, &display_x11_authority_file);
-@@ -1709,6 +1766,8 @@ send_setup_for_user (GdmSessionDirect *session,
+@@ -1689,6 +1746,8 @@ send_setup_for_user (GdmSessionDirect *session,
          DBusMessage    *message;
          DBusMessageIter iter;
          const char     *display_name;
@@ -2552,7 +2480,7 @@
          const char     *display_device;
          const char     *display_hostname;
          const char     *display_x11_authority_file;
-@@ -1721,6 +1780,16 @@ send_setup_for_user (GdmSessionDirect *session,
+@@ -1701,6 +1760,16 @@ send_setup_for_user (GdmSessionDirect *session,
          } else {
                  display_name = "";
          }
@@ -2569,7 +2497,7 @@
          if (session->priv->display_hostname != NULL) {
                  display_hostname = session->priv->display_hostname;
          } else {
-@@ -1751,6 +1820,8 @@ send_setup_for_user (GdmSessionDirect *session,
+@@ -1731,6 +1800,8 @@ send_setup_for_user (GdmSessionDirect *session,
          dbus_message_iter_init_append (message, &iter);
          dbus_message_iter_append_basic (&iter, DBUS_TYPE_STRING, &service_name);
          dbus_message_iter_append_basic (&iter, DBUS_TYPE_STRING, &display_name);
@@ -2578,7 +2506,7 @@
          dbus_message_iter_append_basic (&iter, DBUS_TYPE_STRING, &display_device);
          dbus_message_iter_append_basic (&iter, DBUS_TYPE_STRING, &display_hostname);
          dbus_message_iter_append_basic (&iter, DBUS_TYPE_STRING, &display_x11_authority_file);
-@@ -2189,6 +2260,30 @@ _gdm_session_direct_set_display_x11_authority_file (GdmSessionDirect *session,
+@@ -2168,6 +2239,30 @@ _gdm_session_direct_set_display_x11_authority_file (GdmSessionDirect *session,
  }
  
  static void
@@ -2609,7 +2537,7 @@
  _gdm_session_direct_set_display_is_local (GdmSessionDirect *session,
                                            gboolean          is)
  {
-@@ -2224,9 +2319,18 @@ gdm_session_direct_set_property (GObject      *object,
+@@ -2203,9 +2298,18 @@ gdm_session_direct_set_property (GObject      *object,
          case PROP_DISPLAY_X11_AUTHORITY_FILE:
                  _gdm_session_direct_set_display_x11_authority_file (self, g_value_get_string (value));
                  break;
@@ -2628,7 +2556,7 @@
          default:
                  G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
                  break;
-@@ -2262,9 +2366,18 @@ gdm_session_direct_get_property (GObject    *object,
+@@ -2241,9 +2345,18 @@ gdm_session_direct_get_property (GObject    *object,
          case PROP_DISPLAY_X11_AUTHORITY_FILE:
                  g_value_set_string (value, self->priv->display_x11_authority_file);
                  break;
@@ -2647,7 +2575,7 @@
          default:
                  G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
                  break;
-@@ -2300,6 +2413,12 @@ gdm_session_direct_dispose (GObject *object)
+@@ -2279,6 +2392,12 @@ gdm_session_direct_dispose (GObject *object)
          g_free (session->priv->server_address);
          session->priv->server_address = NULL;
  
@@ -2660,7 +2588,7 @@
          if (session->priv->server != NULL) {
                  dbus_server_disconnect (session->priv->server);
                  dbus_server_unref (session->priv->server);
-@@ -2311,6 +2430,11 @@ gdm_session_direct_dispose (GObject *object)
+@@ -2290,6 +2409,11 @@ gdm_session_direct_dispose (GObject *object)
                  session->priv->environment = NULL;
          }
  
@@ -2672,7 +2600,7 @@
          G_OBJECT_CLASS (gdm_session_direct_parent_class)->dispose (object);
  }
  
-@@ -2460,6 +2584,14 @@ gdm_session_direct_class_init (GdmSessionDirectClass *session_class)
+@@ -2439,6 +2563,14 @@ gdm_session_direct_class_init (GdmSessionDirectClass *session_class)
                                                                "display x11 authority file",
                                                                NULL,
                                                                G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
@@ -2687,7 +2615,7 @@
          /* not construct only */
          g_object_class_install_property (object_class,
                                           PROP_USER_X11_AUTHORITY_FILE,
-@@ -2475,11 +2607,140 @@ gdm_session_direct_class_init (GdmSessionDirectClass *session_class)
+@@ -2454,11 +2586,140 @@ gdm_session_direct_class_init (GdmSessionDirectClass *session_class)
                                                                "display device",
                                                                NULL,
                                                                G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
@@ -2828,7 +2756,7 @@
  GdmSessionDirect *
  gdm_session_direct_new (const char *display_id,
                          const char *display_name,
-@@ -2499,6 +2760,8 @@ gdm_session_direct_new (const char *display_id,
+@@ -2478,6 +2739,8 @@ gdm_session_direct_new (const char *display_id,
                                  "display-is-local", display_is_local,
                                  NULL);
  
@@ -2838,10 +2766,10 @@
  }
  
 diff --git a/daemon/gdm-session-worker.c b/daemon/gdm-session-worker.c
-index c1331df..a5522b1 100644
+index 47a5c08..2ab53a0 100644
 --- a/daemon/gdm-session-worker.c
 +++ b/daemon/gdm-session-worker.c
-@@ -112,6 +112,8 @@ struct GdmSessionWorkerPrivate
+@@ -119,6 +119,8 @@ struct GdmSessionWorkerPrivate
          /* from Setup */
          char             *service;
          char             *x11_display_name;
@@ -2850,7 +2778,7 @@
          char             *x11_authority_file;
          char             *display_device;
          char             *hostname;
-@@ -171,6 +173,8 @@ open_ck_session (GdmSessionWorker  *worker)
+@@ -179,6 +181,8 @@ open_ck_session (GdmSessionWorker  *worker)
          int            res;
          DBusError      error;
          const char     *display_name;
@@ -2859,7 +2787,7 @@
          const char     *display_device;
          const char     *display_hostname;
          gboolean        is_local;
-@@ -180,6 +184,16 @@ open_ck_session (GdmSessionWorker  *worker)
+@@ -190,6 +194,16 @@ open_ck_session (GdmSessionWorker  *worker)
          } else {
                  display_name = "";
          }
@@ -2876,7 +2804,7 @@
          if (worker->priv->hostname != NULL) {
                  display_hostname = worker->priv->hostname;
          } else {
-@@ -216,6 +230,8 @@ open_ck_session (GdmSessionWorker  *worker)
+@@ -226,6 +240,8 @@ open_ck_session (GdmSessionWorker  *worker)
          dbus_error_init (&error);
          res = ck_connector_open_session_with_parameters (worker->priv->ckc,
                                                           &error,
@@ -2885,7 +2813,7 @@
                                                           "unix-user", &pwent->pw_uid,
                                                           "x11-display", &display_name,
                                                           "x11-display-device", &display_device,
-@@ -1569,6 +1585,7 @@ static void
+@@ -1781,6 +1797,7 @@ static void
  register_ck_session (GdmSessionWorker *worker)
  {
          const char *session_cookie;
@@ -2893,7 +2821,7 @@
          gboolean    res;
  
          session_cookie = NULL;
-@@ -1581,6 +1598,12 @@ register_ck_session (GdmSessionWorker *worker)
+@@ -1793,6 +1810,12 @@ register_ck_session (GdmSessionWorker *worker)
                                                               "XDG_SESSION_COOKIE",
                                                               session_cookie);
          }
@@ -2906,7 +2834,7 @@
  }
  
  static void
-@@ -1600,19 +1623,24 @@ session_worker_child_watch (GPid              pid,
+@@ -1812,19 +1835,24 @@ session_worker_child_watch (GPid              pid,
          if (WIFEXITED (status)) {
                  int code = WEXITSTATUS (status);
  
@@ -2932,7 +2860,7 @@
                  ck_connector_unref (worker->priv->ckc);
                  worker->priv->ckc = NULL;
          }
-@@ -2360,6 +2388,8 @@ on_setup (GdmSessionWorker *worker,
+@@ -2605,6 +2633,8 @@ on_setup (GdmSessionWorker *worker,
          DBusError   error;
          const char *service;
          const char *x11_display_name;
@@ -2941,7 +2869,7 @@
          const char *x11_authority_file;
          const char *console;
          const char *hostname;
-@@ -2375,6 +2405,8 @@ on_setup (GdmSessionWorker *worker,
+@@ -2620,6 +2650,8 @@ on_setup (GdmSessionWorker *worker,
                                       &error,
                                       DBUS_TYPE_STRING, &service,
                                       DBUS_TYPE_STRING, &x11_display_name,
@@ -2950,7 +2878,7 @@
                                       DBUS_TYPE_STRING, &console,
                                       DBUS_TYPE_STRING, &hostname,
                                       DBUS_TYPE_STRING, &x11_authority_file,
-@@ -2382,6 +2414,8 @@ on_setup (GdmSessionWorker *worker,
+@@ -2627,6 +2659,8 @@ on_setup (GdmSessionWorker *worker,
          if (res) {
                  worker->priv->service = g_strdup (service);
                  worker->priv->x11_display_name = g_strdup (x11_display_name);
@@ -2959,7 +2887,7 @@
                  worker->priv->x11_authority_file = g_strdup (x11_authority_file);
                  worker->priv->display_device = g_strdup (console);
                  worker->priv->hostname = g_strdup (hostname);
-@@ -2402,6 +2436,8 @@ on_setup_for_user (GdmSessionWorker *worker,
+@@ -2647,6 +2681,8 @@ on_setup_for_user (GdmSessionWorker *worker,
          DBusError   error;
          const char *service;
          const char *x11_display_name;
@@ -2968,7 +2896,7 @@
          const char *x11_authority_file;
          const char *console;
          const char *hostname;
-@@ -2418,6 +2454,8 @@ on_setup_for_user (GdmSessionWorker *worker,
+@@ -2663,6 +2699,8 @@ on_setup_for_user (GdmSessionWorker *worker,
                                       &error,
                                       DBUS_TYPE_STRING, &service,
                                       DBUS_TYPE_STRING, &x11_display_name,
@@ -2977,7 +2905,7 @@
                                       DBUS_TYPE_STRING, &console,
                                       DBUS_TYPE_STRING, &hostname,
                                       DBUS_TYPE_STRING, &x11_authority_file,
-@@ -2426,6 +2464,8 @@ on_setup_for_user (GdmSessionWorker *worker,
+@@ -2671,6 +2709,8 @@ on_setup_for_user (GdmSessionWorker *worker,
          if (res) {
                  worker->priv->service = g_strdup (service);
                  worker->priv->x11_display_name = g_strdup (x11_display_name);
@@ -2986,7 +2914,7 @@
                  worker->priv->x11_authority_file = g_strdup (x11_authority_file);
                  worker->priv->display_device = g_strdup (console);
                  worker->priv->hostname = g_strdup (hostname);
-@@ -2700,6 +2740,21 @@ gdm_session_worker_finalize (GObject *object)
+@@ -2945,6 +2985,21 @@ gdm_session_worker_finalize (GObject *object)
  
          gdm_session_worker_unwatch_child (worker);
  
@@ -3009,7 +2937,7 @@
                  g_free (worker->priv->username);
                  worker->priv->username = NULL;
 diff --git a/daemon/gdm-simple-slave.c b/daemon/gdm-simple-slave.c
-index 8b161bb..15850a9 100644
+index 8b161bb..610483c 100644
 --- a/daemon/gdm-simple-slave.c
 +++ b/daemon/gdm-simple-slave.c
 @@ -374,6 +374,10 @@ start_session_timeout (GdmSimpleSlave *slave)
@@ -3068,11 +2996,8 @@
  }
  
  static void
-@@ -865,8 +886,11 @@ static void
- start_greeter (GdmSimpleSlave *slave)
- {
+@@ -867,6 +888,8 @@ start_greeter (GdmSimpleSlave *slave)
          gboolean       display_is_local;
-+        gboolean       display_is_dynamic;
          char          *display_id;
          char          *display_name;
 +        char          *seat_id;
@@ -3080,11 +3005,8 @@
          char          *display_device;
          char          *display_hostname;
          char          *auth_file;
-@@ -876,8 +900,11 @@ start_greeter (GdmSimpleSlave *slave)
-         g_debug ("GdmSimpleSlave: Running greeter");
- 
+@@ -878,6 +901,8 @@ start_greeter (GdmSimpleSlave *slave)
          display_is_local = FALSE;
-+        display_is_dynamic = FALSE;
          display_id = NULL;
          display_name = NULL;
 +        seat_id = NULL;
@@ -3092,18 +3014,16 @@
          auth_file = NULL;
          display_device = NULL;
          display_hostname = NULL;
-@@ -885,7 +912,10 @@ start_greeter (GdmSimpleSlave *slave)
-         g_object_get (slave,
+@@ -886,6 +911,8 @@ start_greeter (GdmSimpleSlave *slave)
                        "display-id", &display_id,
                        "display-is-local", &display_is_local,
-+                      "display-is-dynamic", &display_is_dynamic,
                        "display-name", &display_name,
 +                      "display-seat-id", &seat_id,
 +                      "display-session-id", &session_id,
                        "display-hostname", &display_hostname,
                        "display-x11-authority-file", &auth_file,
                        NULL);
-@@ -967,9 +997,12 @@ start_greeter (GdmSimpleSlave *slave)
+@@ -967,6 +994,8 @@ start_greeter (GdmSimpleSlave *slave)
  
          g_debug ("GdmSimpleSlave: Creating greeter on %s %s %s", display_name, display_device, display_hostname);
          slave->priv->greeter = gdm_greeter_session_new (display_name,
@@ -3111,13 +3031,8 @@
 +                                                        session_id,
                                                          display_device,
                                                          display_hostname,
--                                                        display_is_local);
-+                                                        display_is_local,
-+                                                        display_is_dynamic);
-         g_signal_connect (slave->priv->greeter,
-                           "started",
-                           G_CALLBACK (on_greeter_session_start),
-@@ -994,6 +1027,7 @@ start_greeter (GdmSimpleSlave *slave)
+                                                         display_is_local);
+@@ -994,6 +1023,7 @@ start_greeter (GdmSimpleSlave *slave)
  
          g_free (display_id);
          g_free (display_name);
@@ -3125,7 +3040,7 @@
          g_free (display_device);
          g_free (display_hostname);
          g_free (auth_file);
-@@ -1067,14 +1101,12 @@ on_server_died (GdmServer      *server,
+@@ -1067,14 +1097,12 @@ on_server_died (GdmServer      *server,
  static gboolean
  gdm_simple_slave_run (GdmSimpleSlave *slave)
  {
@@ -3142,7 +3057,7 @@
                        NULL);
  
          /* if this is local display start a server if one doesn't
-@@ -1083,7 +1115,7 @@ gdm_simple_slave_run (GdmSimpleSlave *slave)
+@@ -1083,7 +1111,7 @@ gdm_simple_slave_run (GdmSimpleSlave *slave)
                  gboolean res;
                  gboolean disable_tcp;
  
@@ -3151,7 +3066,7 @@
  
                  disable_tcp = TRUE;
                  if (gdm_settings_client_get_boolean (GDM_KEY_DISALLOW_TCP,
-@@ -1124,8 +1156,7 @@ gdm_simple_slave_run (GdmSimpleSlave *slave)
+@@ -1124,8 +1152,7 @@ gdm_simple_slave_run (GdmSimpleSlave *slave)
                  g_timeout_add (500, (GSourceFunc)idle_connect_to_display, slave);
          }
  
@@ -3162,10 +3077,10 @@
          return TRUE;
  }
 diff --git a/daemon/gdm-slave.c b/daemon/gdm-slave.c
-index 477b42d..47b1419 100644
+index e11e16c..9e93d6d 100644
 --- a/daemon/gdm-slave.c
 +++ b/daemon/gdm-slave.c
-@@ -79,11 +79,14 @@ struct GdmSlavePrivate
+@@ -79,11 +79,13 @@ struct GdmSlavePrivate
          /* cached display values */
          char            *display_id;
          char            *display_name;
@@ -3173,14 +3088,13 @@
          int              display_number;
          char            *display_hostname;
          gboolean         display_is_local;
-+        gboolean         display_is_dynamic;
          gboolean         display_is_parented;
          char            *display_seat_id;
 +        char            *display_session_id;
          char            *display_x11_authority_file;
          char            *parent_display_name;
          char            *parent_display_x11_authority_file;
-@@ -98,10 +101,13 @@ enum {
+@@ -98,10 +100,12 @@ enum {
          PROP_0,
          PROP_DISPLAY_ID,
          PROP_DISPLAY_NAME,
@@ -3188,38 +3102,12 @@
          PROP_DISPLAY_NUMBER,
          PROP_DISPLAY_HOSTNAME,
          PROP_DISPLAY_IS_LOCAL,
-+        PROP_DISPLAY_IS_DYNAMIC,
          PROP_DISPLAY_SEAT_ID,
 +        PROP_DISPLAY_SESSION_ID,
          PROP_DISPLAY_X11_AUTHORITY_FILE
  };
  
-@@ -548,6 +554,24 @@ gdm_slave_real_start (GdmSlave *slave)
- 
-         error = NULL;
-         res = dbus_g_proxy_call (slave->priv->display_proxy,
-+                                 "IsDynamic",
-+                                 &error,
-+                                 G_TYPE_INVALID,
-+                                 G_TYPE_BOOLEAN, &slave->priv->display_is_dynamic,
-+                                 G_TYPE_INVALID);
-+        if (! res) {
-+                if (error != NULL) {
-+                        g_warning ("Failed to get value: %s", error->message);
-+                        g_error_free (error);
-+                } else {
-+                        g_warning ("Failed to get value");
-+                }
-+
-+                return FALSE;
-+        }
-+
-+        error = NULL;
-+        res = dbus_g_proxy_call (slave->priv->display_proxy,
-                                  "GetX11DisplayName",
-                                  &error,
-                                  G_TYPE_INVALID,
-@@ -566,6 +590,24 @@ gdm_slave_real_start (GdmSlave *slave)
+@@ -577,6 +581,24 @@ gdm_slave_real_start (GdmSlave *slave)
  
          error = NULL;
          res = dbus_g_proxy_call (slave->priv->display_proxy,
@@ -3244,7 +3132,7 @@
                                   "GetX11DisplayNumber",
                                   &error,
                                   G_TYPE_INVALID,
-@@ -655,6 +697,24 @@ gdm_slave_real_start (GdmSlave *slave)
+@@ -666,6 +688,24 @@ gdm_slave_real_start (GdmSlave *slave)
                  return FALSE;
          }
  
@@ -3269,7 +3157,7 @@
          return TRUE;
  }
  
-@@ -710,6 +770,34 @@ gdm_slave_stopped (GdmSlave *slave)
+@@ -721,6 +761,34 @@ gdm_slave_stopped (GdmSlave *slave)
          g_signal_emit (slave, signals [STOPPED], 0);
  }
  
@@ -3304,7 +3192,7 @@
  gboolean
  gdm_slave_add_user_authorization (GdmSlave   *slave,
                                    const char *username,
-@@ -1163,6 +1251,59 @@ gdm_slave_switch_to_user_session (GdmSlave   *slave,
+@@ -1277,6 +1345,59 @@ gdm_slave_switch_to_user_session (GdmSlave   *slave,
          return ret;
  }
  
@@ -3364,7 +3252,7 @@
  static void
  _gdm_slave_set_display_id (GdmSlave   *slave,
                             const char *id)
-@@ -1179,6 +1320,15 @@ _gdm_slave_set_display_name (GdmSlave   *slave,
+@@ -1293,6 +1414,15 @@ _gdm_slave_set_display_name (GdmSlave   *slave,
          slave->priv->display_name = g_strdup (name);
  }
  
@@ -3380,7 +3268,7 @@
  static void
  _gdm_slave_set_display_number (GdmSlave   *slave,
                                 int         number)
-@@ -1211,6 +1361,14 @@ _gdm_slave_set_display_seat_id (GdmSlave   *slave,
+@@ -1325,6 +1455,14 @@ _gdm_slave_set_display_seat_id (GdmSlave   *slave,
  }
  
  static void
@@ -3395,21 +3283,7 @@
  _gdm_slave_set_display_is_local (GdmSlave   *slave,
                                   gboolean    is)
  {
-@@ -1218,6 +1376,13 @@ _gdm_slave_set_display_is_local (GdmSlave   *slave,
- }
- 
- static void
-+_gdm_slave_set_display_is_dynamic (GdmSlave   *slave,
-+                                   gboolean    is)
-+{
-+        slave->priv->display_is_dynamic = is;
-+}
-+
-+static void
- gdm_slave_set_property (GObject      *object,
-                         guint         prop_id,
-                         const GValue *value,
-@@ -1234,6 +1399,9 @@ gdm_slave_set_property (GObject      *object,
+@@ -1348,6 +1486,9 @@ gdm_slave_set_property (GObject      *object,
          case PROP_DISPLAY_NAME:
                  _gdm_slave_set_display_name (self, g_value_get_string (value));
                  break;
@@ -3419,7 +3293,7 @@
          case PROP_DISPLAY_NUMBER:
                  _gdm_slave_set_display_number (self, g_value_get_int (value));
                  break;
-@@ -1243,12 +1411,18 @@ gdm_slave_set_property (GObject      *object,
+@@ -1357,6 +1498,9 @@ gdm_slave_set_property (GObject      *object,
          case PROP_DISPLAY_SEAT_ID:
                  _gdm_slave_set_display_seat_id (self, g_value_get_string (value));
                  break;
@@ -3429,16 +3303,7 @@
          case PROP_DISPLAY_X11_AUTHORITY_FILE:
                  _gdm_slave_set_display_x11_authority_file (self, g_value_get_string (value));
                  break;
-         case PROP_DISPLAY_IS_LOCAL:
-                 _gdm_slave_set_display_is_local (self, g_value_get_boolean (value));
-                 break;
-+        case PROP_DISPLAY_IS_DYNAMIC:
-+                _gdm_slave_set_display_is_dynamic (self, g_value_get_boolean (value));
-+                break;
-         default:
-                 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
-                 break;
-@@ -1272,6 +1446,9 @@ gdm_slave_get_property (GObject    *object,
+@@ -1386,6 +1530,9 @@ gdm_slave_get_property (GObject    *object,
          case PROP_DISPLAY_NAME:
                  g_value_set_string (value, self->priv->display_name);
                  break;
@@ -3448,7 +3313,7 @@
          case PROP_DISPLAY_NUMBER:
                  g_value_set_int (value, self->priv->display_number);
                  break;
-@@ -1281,12 +1458,18 @@ gdm_slave_get_property (GObject    *object,
+@@ -1395,6 +1542,9 @@ gdm_slave_get_property (GObject    *object,
          case PROP_DISPLAY_SEAT_ID:
                  g_value_set_string (value, self->priv->display_seat_id);
                  break;
@@ -3458,16 +3323,7 @@
          case PROP_DISPLAY_X11_AUTHORITY_FILE:
                  g_value_set_string (value, self->priv->display_x11_authority_file);
                  break;
-         case PROP_DISPLAY_IS_LOCAL:
-                 g_value_set_boolean (value, self->priv->display_is_local);
-                 break;
-+        case PROP_DISPLAY_IS_DYNAMIC:
-+                g_value_set_boolean (value, self->priv->display_is_dynamic);
-+                break;
-         default:
-                 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
-                 break;
-@@ -1375,6 +1558,13 @@ gdm_slave_class_init (GdmSlaveClass *klass)
+@@ -1489,6 +1639,13 @@ gdm_slave_class_init (GdmSlaveClass *klass)
                                                                NULL,
                                                                G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
          g_object_class_install_property (object_class,
@@ -3481,7 +3337,7 @@
                                           PROP_DISPLAY_NUMBER,
                                           g_param_spec_int ("display-number",
                                                             "display number",
-@@ -1398,6 +1588,13 @@ gdm_slave_class_init (GdmSlaveClass *klass)
+@@ -1512,6 +1669,13 @@ gdm_slave_class_init (GdmSlaveClass *klass)
                                                                NULL,
                                                                G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
          g_object_class_install_property (object_class,
@@ -3495,21 +3351,7 @@
                                           PROP_DISPLAY_X11_AUTHORITY_FILE,
                                           g_param_spec_string ("display-x11-authority-file",
                                                                "",
-@@ -1411,6 +1608,13 @@ gdm_slave_class_init (GdmSlaveClass *klass)
-                                                                "display is local",
-                                                                TRUE,
-                                                                G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
-+        g_object_class_install_property (object_class,
-+                                         PROP_DISPLAY_IS_DYNAMIC,
-+                                         g_param_spec_boolean ("display-is-dynamic",
-+                                                               "display is dynamic",
-+                                                               "display is dynamic",
-+                                                               FALSE,
-+                                                               G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
- 
-         signals [STOPPED] =
-                 g_signal_new ("stopped",
-@@ -1452,6 +1656,7 @@ gdm_slave_finalize (GObject *object)
+@@ -1566,6 +1730,7 @@ gdm_slave_finalize (GObject *object)
          g_free (slave->priv->id);
          g_free (slave->priv->display_id);
          g_free (slave->priv->display_name);
@@ -3540,23 +3382,11 @@
  G_END_DECLS
  
  #endif /* __GDM_SLAVE_H */
-diff --git a/daemon/gdm-static-display.c b/daemon/gdm-static-display.c
-index a747ee3..9e5874a 100644
---- a/daemon/gdm-static-display.c
-+++ b/daemon/gdm-static-display.c
-@@ -224,6 +224,7 @@ gdm_static_display_new (int display_number)
-         object = g_object_new (GDM_TYPE_STATIC_DISPLAY,
-                                "x11-display-number", display_number,
-                                "x11-display-name", x11_display,
-+                               "is-dynamic", FALSE,
-                                NULL);
-         g_free (x11_display);
- 
 diff --git a/daemon/gdm-welcome-session.c b/daemon/gdm-welcome-session.c
-index b58e855..f8f5216 100644
+index b58e855..3a30911 100644
 --- a/daemon/gdm-welcome-session.c
 +++ b/daemon/gdm-welcome-session.c
-@@ -65,10 +65,13 @@ struct GdmWelcomeSessionPrivate
+@@ -65,6 +65,8 @@ struct GdmWelcomeSessionPrivate
          char           *group_name;
  
          char           *x11_display_name;
@@ -3565,12 +3395,7 @@
          char           *x11_display_device;
          char           *x11_display_hostname;
          char           *x11_authority_file;
-         gboolean        x11_display_is_local;
-+        gboolean        x11_display_is_dynamic;
- 
-         guint           child_watch_id;
- 
-@@ -85,10 +88,13 @@ struct GdmWelcomeSessionPrivate
+@@ -85,6 +87,8 @@ struct GdmWelcomeSessionPrivate
  enum {
          PROP_0,
          PROP_X11_DISPLAY_NAME,
@@ -3579,12 +3404,7 @@
          PROP_X11_DISPLAY_DEVICE,
          PROP_X11_DISPLAY_HOSTNAME,
          PROP_X11_AUTHORITY_FILE,
-         PROP_X11_DISPLAY_IS_LOCAL,
-+        PROP_X11_DISPLAY_IS_DYNAMIC,
-         PROP_USER_NAME,
-         PROP_GROUP_NAME,
-         PROP_SERVER_ADDRESS,
-@@ -133,6 +139,8 @@ open_welcome_session (GdmWelcomeSession *welcome_session)
+@@ -133,6 +137,8 @@ open_welcome_session (GdmWelcomeSession *welcome_session)
          const char    *session_type;
          const char    *hostname;
          const char    *x11_display_device;
@@ -3593,11 +3413,10 @@
          int            res;
          gboolean       ret;
          DBusError      error;
-@@ -168,12 +176,25 @@ open_welcome_session (GdmWelcomeSession *welcome_session)
+@@ -168,6 +174,18 @@ open_welcome_session (GdmWelcomeSession *welcome_session)
                  x11_display_device = "";
          }
  
--        g_debug ("GdmWelcomeSession: Opening ConsoleKit session for user:%d x11-display:'%s' x11-display-device:'%s' remote-host-name:'%s' is-local:%d",
 +        if (welcome_session->priv->x11_display_seat_id != NULL) {
 +                seat_id = welcome_session->priv->x11_display_seat_id;
 +        } else {
@@ -3610,18 +3429,10 @@
 +                session_id = "";
 +        }
 +
-+        g_debug ("GdmWelcomeSession: Opening ConsoleKit session for user:%d x11-display:'%s' x11-display-device:'%s' remote-host-name:'%s' is-local:%d is-dynamic:%d",
+         g_debug ("GdmWelcomeSession: Opening ConsoleKit session for user:%d x11-display:'%s' x11-display-device:'%s' remote-host-name:'%s' is-local:%d",
                   pwent->pw_uid,
                   welcome_session->priv->x11_display_name,
-                  x11_display_device,
-                  hostname,
--                 welcome_session->priv->x11_display_is_local);
-+                 welcome_session->priv->x11_display_is_local,
-+                 welcome_session->priv->x11_display_is_dynamic);
- 
-         dbus_error_init (&error);
-         res = ck_connector_open_session_with_parameters (welcome_session->priv->ckc,
-@@ -181,9 +202,12 @@ open_welcome_session (GdmWelcomeSession *welcome_session)
+@@ -181,6 +199,8 @@ open_welcome_session (GdmWelcomeSession *welcome_session)
                                                           "unix-user", &pwent->pw_uid,
                                                           "session-type", &session_type,
                                                           "x11-display", &welcome_session->priv->x11_display_name,
@@ -3630,11 +3441,7 @@
                                                           "x11-display-device", &x11_display_device,
                                                           "remote-host-name", &hostname,
                                                           "is-local", &welcome_session->priv->x11_display_is_local,
-+                                                         "is-dynamic", &welcome_session->priv->x11_display_is_dynamic,
-                                                          NULL);
-         if (! res) {
-                 if (dbus_error_is_set (&error)) {
-@@ -880,6 +904,22 @@ _gdm_welcome_session_set_x11_display_name (GdmWelcomeSession *welcome_session,
+@@ -880,6 +900,22 @@ _gdm_welcome_session_set_x11_display_name (GdmWelcomeSession *welcome_session,
  }
  
  static void
@@ -3657,20 +3464,15 @@
  _gdm_welcome_session_set_x11_display_hostname (GdmWelcomeSession *welcome_session,
                                                 const char        *name)
  {
-@@ -902,6 +942,12 @@ _gdm_welcome_session_set_x11_display_is_local (GdmWelcomeSession *welcome_sessio
+@@ -902,7 +938,6 @@ _gdm_welcome_session_set_x11_display_is_local (GdmWelcomeSession *welcome_sessio
          welcome_session->priv->x11_display_is_local = is_local;
  }
  
-+static void
-+_gdm_welcome_session_set_x11_display_is_dynamic (GdmWelcomeSession *welcome_session,
-+                                                 gboolean           is_dynamic)
-+{
-+        welcome_session->priv->x11_display_is_dynamic = is_dynamic;
-+}
- 
+-
  static void
  _gdm_welcome_session_set_x11_authority_file (GdmWelcomeSession *welcome_session,
-@@ -980,6 +1026,12 @@ gdm_welcome_session_set_property (GObject      *object,
+                                              const char        *file)
+@@ -980,6 +1015,12 @@ gdm_welcome_session_set_property (GObject      *object,
          case PROP_X11_DISPLAY_NAME:
                  _gdm_welcome_session_set_x11_display_name (self, g_value_get_string (value));
                  break;
@@ -3683,17 +3485,7 @@
          case PROP_X11_DISPLAY_HOSTNAME:
                  _gdm_welcome_session_set_x11_display_hostname (self, g_value_get_string (value));
                  break;
-@@ -989,6 +1041,9 @@ gdm_welcome_session_set_property (GObject      *object,
-         case PROP_X11_DISPLAY_IS_LOCAL:
-                 _gdm_welcome_session_set_x11_display_is_local (self, g_value_get_boolean (value));
-                 break;
-+        case PROP_X11_DISPLAY_IS_DYNAMIC:
-+                _gdm_welcome_session_set_x11_display_is_dynamic (self, g_value_get_boolean (value));
-+                break;
-         case PROP_X11_AUTHORITY_FILE:
-                 _gdm_welcome_session_set_x11_authority_file (self, g_value_get_string (value));
-                 break;
-@@ -1036,6 +1091,12 @@ gdm_welcome_session_get_property (GObject    *object,
+@@ -1036,6 +1077,12 @@ gdm_welcome_session_get_property (GObject    *object,
          case PROP_X11_DISPLAY_NAME:
                  g_value_set_string (value, self->priv->x11_display_name);
                  break;
@@ -3706,17 +3498,7 @@
          case PROP_X11_DISPLAY_HOSTNAME:
                  g_value_set_string (value, self->priv->x11_display_hostname);
                  break;
-@@ -1045,6 +1106,9 @@ gdm_welcome_session_get_property (GObject    *object,
-         case PROP_X11_DISPLAY_IS_LOCAL:
-                 g_value_set_boolean (value, self->priv->x11_display_is_local);
-                 break;
-+        case PROP_X11_DISPLAY_IS_DYNAMIC:
-+                g_value_set_boolean (value, self->priv->x11_display_is_dynamic);
-+                break;
-         case PROP_X11_AUTHORITY_FILE:
-                 g_value_set_string (value, self->priv->x11_authority_file);
-                 break;
-@@ -1112,6 +1176,20 @@ gdm_welcome_session_class_init (GdmWelcomeSessionClass *klass)
+@@ -1112,6 +1159,20 @@ gdm_welcome_session_class_init (GdmWelcomeSessionClass *klass)
                                                                NULL,
                                                                G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
          g_object_class_install_property (object_class,
@@ -3737,21 +3519,7 @@
                                           PROP_X11_DISPLAY_HOSTNAME,
                                           g_param_spec_string ("x11-display-hostname",
                                                                "hostname",
-@@ -1133,6 +1211,13 @@ gdm_welcome_session_class_init (GdmWelcomeSessionClass *klass)
-                                                                FALSE,
-                                                                G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
-         g_object_class_install_property (object_class,
-+                                         PROP_X11_DISPLAY_IS_DYNAMIC,
-+                                         g_param_spec_boolean ("x11-display-is-dynamic",
-+                                                               "is dynamic",
-+                                                               "is dynamic",
-+                                                               FALSE,
-+                                                               G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
-+        g_object_class_install_property (object_class,
-                                          PROP_X11_AUTHORITY_FILE,
-                                          g_param_spec_string ("x11-authority-file",
-                                                               "authority file",
-@@ -1268,6 +1353,7 @@ gdm_welcome_session_finalize (GObject *object)
+@@ -1268,6 +1329,7 @@ gdm_welcome_session_finalize (GObject *object)
          g_free (welcome_session->priv->user_name);
          g_free (welcome_session->priv->group_name);
          g_free (welcome_session->priv->x11_display_name);