1 /* -*- Mode: C; indent-tabs-mode: nil; tab-width: 4 -*-
3 * Copyright (C) 2010-2011 Robert Ancell.
4 * Author: Robert Ancell <robert.ancell@canonical.com>
6 * This program is free software: you can redistribute it and/or modify it under
7 * the terms of the GNU General Public License as published by the Free Software
8 * Foundation, either version 3 of the License, or (at your option) any later
9 * version. See http://www.gnu.org/copyleft/gpl.html the full text of the
24 proxy = g_dbus_proxy_new_for_bus_sync (G_BUS_TYPE_SYSTEM,
25 G_DBUS_PROXY_FLAGS_DO_NOT_LOAD_PROPERTIES,
27 "org.freedesktop.login1",
28 "/org/freedesktop/login1",
29 "org.freedesktop.login1.Manager",
35 owner = g_dbus_proxy_get_name_owner (proxy);
36 g_object_unref (proxy);
38 success = (owner != NULL);
45 login1_is_running (void)
47 static gboolean have_checked = FALSE;
48 static gboolean is_running = FALSE;
53 is_running = check_login1();
60 login1_get_session_id (void)
67 bus = g_bus_get_sync (G_BUS_TYPE_SYSTEM, NULL, &error);
69 g_warning ("Failed to get system bus: %s", error->message);
70 g_clear_error (&error);
73 result = g_dbus_connection_call_sync (bus,
74 "org.freedesktop.login1",
75 "/org/freedesktop/login1",
76 "org.freedesktop.login1.Manager",
78 g_variant_new ("(u)", getpid()),
79 G_VARIANT_TYPE ("(o)"),
80 G_DBUS_CALL_FLAGS_NONE,
87 g_warning ("Failed to open login1 session: %s", error->message);
88 g_clear_error (&error);
92 g_variant_get (result, "(o)", &session_path);
93 g_variant_unref (result);
94 g_debug ("Got login1 session id: %s", session_path);
100 login1_lock_session (const gchar *session_path)
102 GDBusConnection *bus;
103 GError *error = NULL;
105 g_return_if_fail (session_path != NULL);
107 g_debug ("Locking login1 session %s", session_path);
109 bus = g_bus_get_sync (G_BUS_TYPE_SYSTEM, NULL, &error);
111 g_warning ("Failed to get system bus: %s", error->message);
112 g_clear_error (&error);
120 result = g_dbus_connection_call_sync (bus,
121 "org.freedesktop.login1",
123 "org.freedesktop.login1.Session",
125 g_variant_new ("()"),
126 G_VARIANT_TYPE ("()"),
127 G_DBUS_CALL_FLAGS_NONE,
132 g_warning ("Error locking login1 session: %s", error->message);
133 g_clear_error (&error);
135 g_variant_unref (result);
137 g_object_unref (bus);
141 login1_unlock_session (const gchar *session_path)
143 GDBusConnection *bus;
144 GError *error = NULL;
146 g_return_if_fail (session_path != NULL);
148 g_debug ("Unlocking login1 session %s", session_path);
150 bus = g_bus_get_sync (G_BUS_TYPE_SYSTEM, NULL, &error);
152 g_warning ("Failed to get system bus: %s", error->message);
153 g_clear_error (&error);
161 result = g_dbus_connection_call_sync (bus,
162 "org.freedesktop.login1",
164 "org.freedesktop.login1.Session",
166 g_variant_new ("()"),
167 G_VARIANT_TYPE ("()"),
168 G_DBUS_CALL_FLAGS_NONE,
173 g_warning ("Error unlocking login1 session: %s", error->message);
174 g_clear_error (&error);
176 g_variant_unref (result);
178 g_object_unref (bus);
182 login1_activate_session (const gchar *session_path)
184 GDBusConnection *bus;
185 GError *error = NULL;
187 g_return_if_fail (session_path != NULL);
189 g_debug ("Activating login1 session %s", session_path);
191 bus = g_bus_get_sync (G_BUS_TYPE_SYSTEM, NULL, &error);
193 g_warning ("Failed to get system bus: %s", error->message);
194 g_clear_error (&error);
202 result = g_dbus_connection_call_sync (bus,
203 "org.freedesktop.login1",
205 "org.freedesktop.login1.Session",
207 g_variant_new ("()"),
208 G_VARIANT_TYPE ("()"),
209 G_DBUS_CALL_FLAGS_NONE,
214 g_warning ("Error activating login1 session: %s", error->message);
215 g_clear_error (&error);
217 g_variant_unref (result);
219 g_object_unref (bus);