From: Michael Terry Date: Wed, 14 May 2014 18:27:06 +0000 (-0400) Subject: DBus-activate logind X-Git-Url: http://rtime.felk.cvut.cz/gitweb/sojka/lightdm.git/commitdiff_plain/084b21ee0ab9c6df25b1ca114f54766052cbc7c8 DBus-activate logind --- diff --git a/src/login1.c b/src/login1.c index 7f858d63..60eec457 100644 --- a/src/login1.c +++ b/src/login1.c @@ -14,10 +14,53 @@ #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 *