[gdm/wip/xserver-in-session: 6/9] session: start login screen using gdm-x-session wrapper



commit 395d260afd0135925e615bec7c85335526f3610b
Author: Ray Strode <rstrode redhat com>
Date:   Fri Jan 23 13:59:14 2015 -0500

    session: start login screen using gdm-x-session wrapper
    
    Since we have the wrapper, let's use it for the login screen
    to and get rid of GdmServer.

 daemon/gdm-local-display.c |  101 +-------------------------------------------
 daemon/gdm-session.c       |   18 ++++++--
 2 files changed, 15 insertions(+), 104 deletions(-)
---
diff --git a/daemon/gdm-local-display.c b/daemon/gdm-local-display.c
index 05fa4a8..a761cf8 100644
--- a/daemon/gdm-local-display.c
+++ b/daemon/gdm-local-display.c
@@ -50,8 +50,6 @@
 struct GdmLocalDisplayPrivate
 {
         GdmDBusLocalDisplay *skeleton;
-
-        GdmServer           *server;
 };
 
 static void     gdm_local_display_class_init   (GdmLocalDisplayClass *klass);
@@ -84,7 +82,6 @@ gdm_local_display_finalize (GObject *object)
         GdmLocalDisplay *display = GDM_LOCAL_DISPLAY (object);
 
         g_clear_object (&display->priv->skeleton);
-        g_clear_object (&display->priv->server);
 
         G_OBJECT_CLASS (gdm_local_display_parent_class)->finalize (object);
 }
@@ -117,103 +114,9 @@ gdm_local_display_prepare (GdmDisplay *display)
 }
 
 static void
-on_server_ready (GdmServer       *server,
-                 GdmLocalDisplay *self)
-{
-        gboolean ret;
-
-        ret = gdm_display_connect (GDM_DISPLAY (self));
-
-        if (!ret) {
-                g_debug ("GdmDisplay: could not connect to display");
-                gdm_display_unmanage (GDM_DISPLAY (self));
-        } else {
-                g_debug ("GdmDisplay: connected to display");
-                g_object_set (G_OBJECT (self), "status", GDM_DISPLAY_MANAGED, NULL);
-        }
-}
-
-static void
-on_server_exited (GdmServer  *server,
-                  int         exit_code,
-                  GdmDisplay *self)
-{
-        g_debug ("GdmDisplay: server exited with code %d\n", exit_code);
-
-        gdm_display_unmanage (GDM_DISPLAY (self));
-}
-
-static void
-on_server_died (GdmServer  *server,
-                int         signal_number,
-                GdmDisplay *self)
+gdm_local_display_start_server (GdmDisplay *self)
 {
-        g_debug ("GdmDisplay: server died with signal %d, (%s)",
-                 signal_number,
-                 g_strsignal (signal_number));
-
-        gdm_display_unmanage (GDM_DISPLAY (self));
-}
-
-static void
-gdm_local_display_start_server (GdmDisplay *display)
-{
-        GdmLocalDisplay *self = GDM_LOCAL_DISPLAY (display);
-        char            *display_name;
-        char            *auth_file;
-        char            *seat_id;
-        gboolean         is_initial;
-        gboolean         res;
-        gboolean         disable_tcp;
-
-        g_object_get (G_OBJECT (self),
-                      "x11-display-name", &display_name,
-                      "x11-authority-file", &auth_file,
-                      "seat-id", &seat_id,
-                      "is-initial", &is_initial,
-                      NULL);
-
-        self->priv->server = gdm_server_new (display_name, seat_id, auth_file, is_initial);
-
-        g_free (display_name);
-        g_free (auth_file);
-        g_free (seat_id);
-
-        disable_tcp = TRUE;
-        if (gdm_settings_direct_get_boolean (GDM_KEY_DISALLOW_TCP, &disable_tcp)) {
-                g_object_set (self->priv->server,
-                              "disable-tcp", disable_tcp,
-                              NULL);
-        }
-
-        g_signal_connect (self->priv->server,
-                          "exited",
-                          G_CALLBACK (on_server_exited),
-                          self);
-        g_signal_connect (self->priv->server,
-                          "died",
-                          G_CALLBACK (on_server_died),
-                          self);
-        g_signal_connect (self->priv->server,
-                          "ready",
-                          G_CALLBACK (on_server_ready),
-                          self);
-
-        res = gdm_server_start (self->priv->server);
-        if (! res) {
-                g_warning (_("Could not start the X "
-                             "server (your graphical environment) "
-                             "due to an internal error. "
-                             "Please contact your system administrator "
-                             "or check your syslog to diagnose. "
-                             "In the meantime this display will be "
-                             "disabled.  Please restart GDM when "
-                             "the problem is corrected."));
-                gdm_display_unmanage (GDM_DISPLAY (self));
-        }
-
-        g_debug ("GdmDisplay: Started X server");
-
+        g_object_set (G_OBJECT (self), "status", GDM_DISPLAY_MANAGED, NULL);
 }
 
 static void
diff --git a/daemon/gdm-session.c b/daemon/gdm-session.c
index fb1e0f0..93be389 100644
--- a/daemon/gdm-session.c
+++ b/daemon/gdm-session.c
@@ -2650,7 +2650,16 @@ gdm_session_start_session (GdmSession *self,
 
                 g_free (command);
         } else {
-                program = g_strdup (self->priv->selected_program);
+                GdmSessionDisplayMode display_mode;
+
+                display_mode = gdm_session_get_display_mode (self);
+
+                if (display_mode == GDM_SESSION_DISPLAY_MODE_LOGIND_MANAGED) {
+                        program = g_strdup_printf (LIBEXECDIR "/gdm-x-session \"%s\"",
+                                                   self->priv->selected_program);
+                } else {
+                        program = g_strdup (self->priv->selected_program);
+                }
         }
 
         set_up_session_environment (self);
@@ -2950,12 +2959,11 @@ gdm_session_get_display_mode (GdmSession *self)
                 return GDM_SESSION_DISPLAY_MODE_REUSE_VT;
         }
 
-        /* The X session used for the login screen uses the
-         * X server started up by the slave, so it should be
-         * reuse VT
+        /* The X session used for the login screen is created
+         * implicitly now and managed by logind.
          */
         if (self->priv->is_program_session) {
-                return GDM_SESSION_DISPLAY_MODE_REUSE_VT;
+                return GDM_SESSION_DISPLAY_MODE_LOGIND_MANAGED;
         }
 
         /* user based X sessions start on a new VT now and are managed


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]