#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;
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++)
/* Connection to bus service is running on */
GDBusConnection *connection;
+ /* TRUE if have connected to service */
+ gboolean connected;
+
/* Seats the service is reporting */
GList *seats;
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)
{
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);
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)
{
G_BEGIN_DECLS
-gboolean login1_is_running (void);
-
gchar *login1_get_session_id (void);
void login1_lock_session (const gchar *session_path);
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);
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)));
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);