summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--configure.ac13
-rw-r--r--src/Makefile.am1
-rw-r--r--src/ck-seat.c26
3 files changed, 39 insertions, 1 deletions
diff --git a/configure.ac b/configure.ac
index 117d788..8619f31 100644
--- a/configure.ac
+++ b/configure.ac
@@ -320,6 +320,19 @@ fi
AC_SUBST(RBAC_LIBS)
dnl ---------------------------------------------------------------------------
+dnl check for SCF (Only avail on solaris)
+dnl ---------------------------------------------------------------------------
+
+AC_CHECK_LIB(scf, smf_get_state,
+ [SCF_LIBS=-lscf
+ AC_DEFINE(HAVE_SCF,1,[Define to 1 if the libscf library is present.])],
+ [AC_MSG_WARN([[
+***
+*** libscf was not found.
+]])])
+AC_SUBST(SCF_LIBS)
+
+dnl ---------------------------------------------------------------------------
dnl Finish
dnl ---------------------------------------------------------------------------
diff --git a/src/Makefile.am b/src/Makefile.am
index 6ab05c8..4788fe1 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -139,6 +139,7 @@ console_kit_daemon_LDADD = \
$(CONSOLE_KIT_LIBS) \
$(POLKIT_LIBS) \
$(RBAC_LIBS) \
+ $(SCF_LIBS) \
libck.la \
libck-event-log.la \
$(NULL)
diff --git a/src/ck-seat.c b/src/ck-seat.c
index af7db59..b2e5628 100644
--- a/src/ck-seat.c
+++ b/src/ck-seat.c
@@ -25,6 +25,9 @@
#include <fcntl.h>
#include <unistd.h>
#include <string.h>
+#ifdef HAVE_SCF
+#include <libscf.h>
+#endif
#include <glib.h>
#include <glib/gi18n.h>
@@ -661,6 +664,26 @@ ck_seat_add_session (CkSeat *seat,
return TRUE;
}
+is_VT_enabled ()
+{
+#ifdef HAVE_SYS_VT_H
+ char *state = NULL;
+ gboolean vt_enabled;
+
+ state = smf_get_state ("svc:/system/vtdaemon:default");
+ if (state && g_str_equal (state, SCF_STATE_STRING_ONLINE)) {
+ vt_enabled = TRUE;
+ } else {
+ vt_enabled = FALSE;
+ }
+
+ g_free (state);
+ return vt_enabled;
+#else
+ return FALSE;
+#endif /* HAVE_SYS_VT_H */
+}
+
gboolean
ck_seat_can_activate_sessions (CkSeat *seat,
gboolean *can_activate,
@@ -669,7 +692,8 @@ ck_seat_can_activate_sessions (CkSeat *seat,
g_return_val_if_fail (CK_IS_SEAT (seat), FALSE);
if (can_activate != NULL) {
- *can_activate = (seat->priv->kind == CK_SEAT_KIND_STATIC);
+ *can_activate = (seat->priv->kind == CK_SEAT_KIND_STATIC)
+ && is_VT_enabled ();
}
return TRUE;