]> rtime.felk.cvut.cz Git - sojka/lightdm.git/commitdiff
DBus-activate logind
authorMichael Terry <michael.terry@canonical.com>
Wed, 14 May 2014 18:27:06 +0000 (14:27 -0400)
committerMichael Terry <michael.terry@canonical.com>
Wed, 14 May 2014 18:27:06 +0000 (14:27 -0400)
src/login1.c

index 7f858d6344c9757e6bc4b593150a36b11c8c8522..60eec45781f41bba46a25f7d4f4a4a0fb18df532 100644 (file)
 
 #include "login1.h"
 
+static gboolean
+start_login1 (void)
+{
+    GDBusConnection *bus;
+    GVariant *result;
+    guint32 success;
+
+    bus = g_bus_get_sync (G_BUS_TYPE_SYSTEM, NULL, NULL);
+    if (!bus)
+        return FALSE;
+
+    result = g_dbus_connection_call_sync (bus,
+                                          "org.freedesktop.DBus",
+                                          "/org/freedesktop/DBus",
+                                          "org.freedesktop.DBus",
+                                          "StartServiceByName",
+                                          g_variant_new ("(su)",
+                                                         "org.freedesktop.login1",
+                                                         0),
+                                          G_VARIANT_TYPE ("(u)"),
+                                          G_DBUS_CALL_FLAGS_NONE,
+                                          -1,
+                                          NULL,
+                                          NULL);
+    g_object_unref (bus);
+    if (!result)
+        return FALSE;
+
+    g_variant_get (result, "(u)", &success);
+    g_variant_unref (result);
+
+    return success == 1 || success == 2; // started or already existed
+}
+
 gboolean
 login1_is_running (void)
 {
-    return access ("/run/systemd/seats/", F_OK) >= 0;
+    static gboolean have_checked = FALSE;
+    static gboolean is_running = FALSE;
+
+    if (!have_checked)
+    {
+        have_checked = TRUE;
+        is_running = start_login1();
+    }
+
+    return is_running;
 }
 
 gchar *