]> rtime.felk.cvut.cz Git - sojka/lightdm.git/commitdiff
Connect to logind on startup
authorRobert Ancell <robert.ancell@canonical.com>
Fri, 22 Aug 2014 01:35:29 +0000 (13:35 +1200)
committerRobert Ancell <robert.ancell@canonical.com>
Fri, 22 Aug 2014 01:35:29 +0000 (13:35 +1200)
src/lightdm.c
src/login1.c
src/login1.h
src/session-child.c
src/session.c

index 013a879ae23e0375f4b5108225359bcfe79be26e..d854864ca7667e6ca3958082bc15a04400830bf2 100644 (file)
@@ -32,6 +32,7 @@
 #include "session-child.h"
 #include "shared-data-manager.h"
 #include "user-list.h"
+#include "login1.h"
 
 static gchar *config_path = NULL;
 static GMainLoop *loop = NULL;
@@ -1232,6 +1233,9 @@ main (int argc, char **argv)
 
     shared_data_manager_start (shared_data_manager_get_instance ());
 
+    /* Connect to logind */
+    login1_service_connect (login1_service_get_instance ());
+
     /* Load the static display entries */
     groups = config_get_groups (config_get_instance ());
     for (i = groups; *i; i++)
index f5d5a798bf1caa9e0c65fc486b37da87ea43cae9..144fa46b6bc4e565c781154dcda4e7185d826d03 100644 (file)
@@ -29,6 +29,9 @@ struct Login1ServicePrivate
     /* Connection to bus service is running on */
     GDBusConnection *connection;
 
+    /* TRUE if have connected to service */
+    gboolean connected;
+
     /* Seats the service is reporting */
     GList *seats;
 
@@ -50,48 +53,6 @@ G_DEFINE_TYPE (Login1Seat, login1_seat, G_TYPE_OBJECT);
 
 static Login1Service *singleton = NULL;
 
-static gboolean
-check_login1 (void)
-{
-    GDBusProxy *proxy;
-    gchar *owner;
-    gboolean success;
-
-    proxy = g_dbus_proxy_new_for_bus_sync (G_BUS_TYPE_SYSTEM,
-                                           G_DBUS_PROXY_FLAGS_DO_NOT_LOAD_PROPERTIES,
-                                           NULL,
-                                           LOGIN1_SERVICE_NAME,
-                                           "/org/freedesktop/login1",
-                                           "org.freedesktop.login1.Manager",
-                                           NULL,
-                                           NULL);
-    if (!proxy)
-        return FALSE;
-
-    owner = g_dbus_proxy_get_name_owner (proxy);
-    g_object_unref (proxy);
-
-    success = (owner != NULL);
-    g_free (owner);
-
-    return success;
-}
-
-gboolean
-login1_is_running (void)
-{
-    static gboolean have_checked = FALSE;
-    static gboolean is_running = FALSE;
-
-    if (!have_checked)
-    {
-        have_checked = TRUE;
-        is_running = check_login1 ();
-    }
-
-    return is_running;
-}
-
 gchar *
 login1_get_session_id (void)
 {
@@ -326,6 +287,9 @@ login1_service_connect (Login1Service *service)
 
     g_return_val_if_fail (service != NULL, FALSE);
 
+    if (service->priv->connected)
+        return TRUE;
+
     service->priv->connection = g_bus_get_sync (G_BUS_TYPE_SYSTEM, NULL, &error);
     if (error)
         g_warning ("Failed to get system bus: %s", error->message);
@@ -367,9 +331,18 @@ login1_service_connect (Login1Service *service)
     g_variant_iter_free (seat_iter);
     g_variant_unref (result);
 
+    service->priv->connected = TRUE;
+
     return TRUE;
 }
 
+gboolean
+login1_service_get_is_connected (Login1Service *service)
+{
+    g_return_val_if_fail (service != NULL, FALSE);
+    return service->priv->connected;
+}
+
 GList *
 login1_service_get_seats (Login1Service *service)
 {
index 9161becf22e26e2170c8c3b390294a302fec5699..9cdfca7d2b11861221b1beef68ff98a690a1cff2 100644 (file)
@@ -16,8 +16,6 @@
 
 G_BEGIN_DECLS
 
-gboolean login1_is_running (void);
-
 gchar *login1_get_session_id (void);
 
 void login1_lock_session (const gchar *session_path);
@@ -68,6 +66,8 @@ Login1Service *login1_service_get_instance (void);
 
 gboolean login1_service_connect (Login1Service *service);
 
+gboolean login1_service_get_is_connected (Login1Service *service);
+
 GList *login1_service_get_seats (Login1Service *service);
 
 Login1Seat *login1_service_get_seat (Login1Service *service, const gchar *id);
index 220d4860402bdce2d93d5a6a60f33fa37f676473..f8fd3eaf3abd3a6189074be6db184f6659827007 100644 (file)
@@ -544,15 +544,12 @@ session_child_run (int argc, char **argv)
         return EXIT_FAILURE;
     }
 
-    if (login1_is_running ())
-    {
-        login1_session = login1_get_session_id ();
+    /* Check what logind session we are, or fallback to ConsoleKit */
+    login1_session = login1_get_session_id ();
+    if (login1_session)
         write_string (login1_session);
-    }
-
-    if (!login1_session)
+    else
     {
-        /* Open a Console Kit session */
         g_variant_builder_init (&ck_parameters, G_VARIANT_TYPE ("(a(sv))"));
         g_variant_builder_open (&ck_parameters, G_VARIANT_TYPE ("a(sv)"));
         g_variant_builder_add (&ck_parameters, "(sv)", "unix-user", g_variant_new_int32 (user_get_uid (user)));
index c0cbc1408d271394d8e92c2f80f7e554addba503..bc26870dd502628767e26f0d1612163d9ca5fd3c 100644 (file)
@@ -796,7 +796,7 @@ session_real_run (Session *session)
     for (i = 0; i < argc; i++)
         write_string (session, session->priv->argv[i]);
 
-    if (login1_is_running ())
+    if (login1_service_get_is_connected (login1_service_get_instance ()))
         session->priv->login1_session = read_string_from_child (session);
     if (!session->priv->login1_session)
         session->priv->console_kit_cookie = read_string_from_child (session);