#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 *