1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
|
diff -u -Nr gnome-control-center-3.3.91/configure.ac gnome-control-center-3.3.91-systemd-fallback/configure.ac
--- gnome-control-center-3.3.91/configure.ac 2012-03-05 20:30:32.000000000 +0100
+++ gnome-control-center-3.3.91-systemd-fallback/configure.ac 2012-03-07 00:06:01.752988448 +0100
@@ -56,7 +56,7 @@
[with_systemd=$enableval],
[with_systemd=no])
if test "$with_systemd" = "yes" ; then
- SYSTEMD=libsystemd-login
+ SYSTEMD="libsystemd-login libsystemd-daemon"
AC_DEFINE(HAVE_SYSTEMD, 1, [Define to 1 if systemd is available])
else
SYSTEMD=
diff -u -Nr gnome-control-center-3.3.91/panels/user-accounts/um-user.c gnome-control-center-3.3.91-systemd-fallback/panels/user-accounts/um-user.c
--- gnome-control-center-3.3.91/panels/user-accounts/um-user.c 2012-03-05 15:04:55.000000000 +0100
+++ gnome-control-center-3.3.91-systemd-fallback/panels/user-accounts/um-user.c 2012-03-07 00:13:13.002755560 +0100
@@ -37,6 +37,11 @@
#include <gio/gunixoutputstream.h>
+#ifdef HAVE_SYSTEMD
+# include <systemd/sd-login.h>
+# include <systemd/sd-daemon.h>
+#endif
+
#include "um-user.h"
#include "um-account-type.h"
#include "um-utils.h"
@@ -1003,57 +1008,50 @@
}
}
-#ifdef HAVE_SYSTEMD
-
-#include <systemd/sd-login.h>
-
gboolean
um_user_is_logged_in (UmUser *user)
{
- int n_sessions;
-
- n_sessions = sd_uid_get_sessions (um_user_get_uid (user), 0, NULL) > 0;
-
- return n_sessions > 0;
-}
+#ifdef HAVE_SYSTEMD
+ if (sd_booted () > 0) {
+ int n_sessions;
-#else
+ n_sessions = sd_uid_get_sessions (um_user_get_uid (user), 0, NULL) > 0;
-gboolean
-um_user_is_logged_in (UmUser *user)
-{
- GVariant *result;
- GVariantIter *iter;
- gint n_sessions;
- GError *error = NULL;
+ return n_sessions > 0;
+ } else
+#endif
+ {
+ GVariant *result;
+ GVariantIter *iter;
+ gint n_sessions;
+ GError *error = NULL;
+
+ result = g_dbus_connection_call_sync (user->bus,
+ "org.freedesktop.ConsoleKit",
+ "/org/freedesktop/ConsoleKit/Manager",
+ "org.freedesktop.ConsoleKit.Manager",
+ "GetSessionsForUnixUser",
+ g_variant_new ("(u)", um_user_get_uid (user)),
+ G_VARIANT_TYPE ("(ao)"),
+ G_DBUS_CALL_FLAGS_NONE,
+ -1,
+ NULL,
+ &error);
+ if (!result) {
+ g_warning ("GetSessionsForUnixUser failed: %s", error->message);
+ g_error_free (error);
+ return FALSE;
+ }
+
+ g_variant_get (result, "(ao)", &iter);
+ n_sessions = g_variant_iter_n_children (iter);
+ g_variant_iter_free (iter);
+ g_variant_unref (result);
- result = g_dbus_connection_call_sync (user->bus,
- "org.freedesktop.ConsoleKit",
- "/org/freedesktop/ConsoleKit/Manager",
- "org.freedesktop.ConsoleKit.Manager",
- "GetSessionsForUnixUser",
- g_variant_new ("(u)", um_user_get_uid (user)),
- G_VARIANT_TYPE ("(ao)"),
- G_DBUS_CALL_FLAGS_NONE,
- -1,
- NULL,
- &error);
- if (!result) {
- g_warning ("GetSessionsForUnixUser failed: %s", error->message);
- g_error_free (error);
- return FALSE;
+ return n_sessions > 0;
}
-
- g_variant_get (result, "(ao)", &iter);
- n_sessions = g_variant_iter_n_children (iter);
- g_variant_iter_free (iter);
- g_variant_unref (result);
-
- return n_sessions > 0;
}
-#endif
-
void
um_user_set_automatic_login (UmUser *user,
gboolean enabled)
|