# Autologin timer expires
#?GREETER-X-0 AUTOLOGIN-TIMER-EXPIRED
-# Trigger autologin and switch to existing session
+# Trigger autologin
#?*GREETER-X-0 AUTHENTICATE-AUTOLOGIN
#?GREETER-X-0 AUTHENTICATION-COMPLETE USERNAME=have-password1 AUTHENTICATED=TRUE
#?*GREETER-X-0 START-SESSION
+
+# Switch to existing session
+#?VT ACTIVATE VT=8
+
+# Quit greeter
#?GREETER-X-0 TERMINATE SIGNAL=15
# Cleanup
#?GREETER-X-1 CONNECTED-TO-DAEMON
#?GREETER-X-1 LOCK-HINT
+# Switch to greeter
+#?VT ACTIVATE VT=8
# Login as existing user
#?*GREETER-X-1 AUTHENTICATE USERNAME=have-password1
#?GREETER-X-1 AUTHENTICATION-COMPLETE USERNAME=have-password1 AUTHENTICATED=TRUE
#?*GREETER-X-1 START-SESSION
+# Return to session
+#?VT ACTIVATE VT=7
+
# Greeter and X server stop
#?GREETER-X-1 TERMINATE SIGNAL=15
#?XSERVER-1 TERMINATE SIGNAL=15
#?GREETER-X-1 CONNECTED-TO-DAEMON
#?GREETER-X-1 LOCK-HINT
+# Switch to greeter
+#?VT ACTIVATE VT=8
+
# Cleanup
#?*STOP-DAEMON
#?SESSION-X-0 TERMINATE SIGNAL=15
#?GREETER-X-1 SELECT-USER-HINT USERNAME=no-password1
#?GREETER-X-1 LOCK-HINT
+# Switch to greeter
+#?VT ACTIVATE VT=8
+
# Cleanup
#?*STOP-DAEMON
#?SESSION-X-0 TERMINATE SIGNAL=15
#?GREETER-X-1 SELECT-USER-HINT USERNAME=have-password1
#?GREETER-X-1 LOCK-HINT
+# Switch to greeter
+#?VT ACTIVATE VT=8
+
# Login as existing user
#?*GREETER-X-1 AUTHENTICATE USERNAME=have-password1
#?GREETER-X-1 SHOW-PROMPT TEXT="Password:"
#?GREETER-X-1 AUTHENTICATION-COMPLETE USERNAME=have-password1 AUTHENTICATED=TRUE
#?*GREETER-X-1 START-SESSION
+# Return to session
+#?VT ACTIVATE VT=7
+
# Greeter and X server stop
#?GREETER-X-1 TERMINATE SIGNAL=15
#?XSERVER-1 TERMINATE SIGNAL=15
#?GREETER-X-1 SELECT-USER-HINT USERNAME=have-password1
#?GREETER-X-1 LOCK-HINT
+# Switch to greeter
+#?VT ACTIVATE VT=8
+
# Cleanup
#?*STOP-DAEMON
#?SESSION-X-0 TERMINATE SIGNAL=15
#?GREETER-X-1 CONNECT-TO-DAEMON
#?GREETER-X-1 CONNECTED-TO-DAEMON
+# Switch to greeter
+#?VT ACTIVATE VT=8
+
# Login
#?*GREETER-X-1 AUTHENTICATE USERNAME=have-password2
#?GREETER-X-1 SHOW-PROMPT TEXT="Password:"
#?GREETER-X-1 CONNECT-TO-DAEMON
#?GREETER-X-1 CONNECTED-TO-DAEMON
+# Switch to greeter
+#?VT ACTIVATE VT=8
+
# Login
#?*GREETER-X-1 AUTHENTICATE USERNAME=have-password2
#?GREETER-X-1 SHOW-PROMPT TEXT="Password:"
#?GREETER-X-0 CONNECT-TO-DAEMON
#?GREETER-X-0 CONNECTED-TO-DAEMON
+# Switch to greeter
+#?VT ACTIVATE VT=7
+
# Cleanup
#?*STOP-DAEMON
#?GREETER-X-0 TERMINATE SIGNAL=15
#?GREETER-X-1 CONNECT-TO-DAEMON
#?GREETER-X-1 CONNECTED-TO-DAEMON
+# Switch to greeter
+#?VT ACTIVATE VT=8
+
# Login
#?*GREETER-X-1 AUTHENTICATE USERNAME=have-password2
#?GREETER-X-1 SHOW-PROMPT TEXT="Password:"
#?GREETER-X-1 CONNECT-TO-DAEMON
#?GREETER-X-1 CONNECTED-TO-DAEMON
+# Switch to greeter
+#?VT ACTIVATE VT=8
+
# Login as existing user
#?*GREETER-X-1 AUTHENTICATE USERNAME=have-password1
#?GREETER-X-1 SHOW-PROMPT TEXT="Password:"
#?GREETER-X-1 AUTHENTICATION-COMPLETE USERNAME=have-password1 AUTHENTICATED=TRUE
#?*GREETER-X-1 START-SESSION
+# Switch to session
+#?VT ACTIVATE VT=7
+
# Greeter and X server stop
#?GREETER-X-1 TERMINATE SIGNAL=15
#?XSERVER-1 TERMINATE SIGNAL=15
#?GREETER-X-1 CONNECT-TO-DAEMON
#?GREETER-X-1 CONNECTED-TO-DAEMON
+# Switch to greeter
+#?VT ACTIVATE VT=8
+
# Login as existing user
#?*GREETER-X-1 AUTHENTICATE USERNAME=have-password1
#?GREETER-X-1 SHOW-PROMPT TEXT="Password:"
#?GREETER-X-1 AUTHENTICATION-COMPLETE USERNAME=have-password1 AUTHENTICATED=TRUE
#?*GREETER-X-1 START-SESSION
+# Switch to session
+#?VT ACTIVATE VT=7
+
# Greeter and X server stop
#?GREETER-X-1 TERMINATE SIGNAL=15
#?XSERVER-1 TERMINATE SIGNAL=15
#?GREETER-X-1 CONNECT-TO-DAEMON
#?GREETER-X-1 CONNECTED-TO-DAEMON
+# Switch to greeter
+#?VT ACTIVATE VT=8
+
# Cleanup
#?*STOP-DAEMON
#?SESSION-X-0 TERMINATE SIGNAL=15
#?XSERVER-1 INDICATE-READY
#?XSERVER-1 ACCEPT-CONNECT
+# Switch to session
+#?VT ACTIVATE VT=8
+
# Guest account created
#?GUEST-ACCOUNT ADD USERNAME=guest-.*
#?XSERVER-1 INDICATE-READY
#?XSERVER-1 ACCEPT-CONNECT
+# Switch to session
+#?VT ACTIVATE VT=8
+
# New session starts
#?SESSION-X-1 START USER=no-password1
#?XSERVER-1 ACCEPT-CONNECT
#?XSERVER-1 INDICATE-READY
#?XSERVER-1 ACCEPT-CONNECT
+# Switch to session
+#?VT ACTIVATE VT=8
+
# New session starts
#?SESSION-X-1 START USER=no-password1
#?XSERVER-1 ACCEPT-CONNECT
#?GREETER-X-1 CONNECT-TO-DAEMON
#?GREETER-X-1 CONNECTED-TO-DAEMON
+# Switch to greeter
+#?VT ACTIVATE VT=8
+
# Requested user is automatically selected
#?GREETER-X-1 SELECT-USER-HINT USERNAME=have-password1
#?*GREETER-X-1 AUTHENTICATE USERNAME=have-password1
#?XSERVER-1 INDICATE-READY
#?XSERVER-1 ACCEPT-CONNECT
+# Switch to session
+#?VT ACTIVATE VT=8
+
# New session starts
#?SESSION-X-1 START USER=no-password1
#?XSERVER-1 ACCEPT-CONNECT
#?XSERVER-2 INDICATE-READY
#?XSERVER-2 ACCEPT-CONNECT
+# Switch to session
+#?VT ACTIVATE VT=9
+
# New session starts
#?SESSION-X-2 START USER=no-password2
#?XSERVER-2 ACCEPT-CONNECT
#?XSERVER-1 ACCEPT-CONNECT
#?SESSION-X-1 CONNECT-XSERVER
+# Switch to session
+#?VT ACTIVATE VT=8
+
# Greeter stops
#?GREETER-X-0 TERMINATE SIGNAL=15
#?XSERVER-0 TERMINATE SIGNAL=15
test-python-greeter
noinst_LTLIBRARIES = libsystem.la
-libsystem_la_SOURCES = libsystem.c
+libsystem_la_SOURCES = libsystem.c status.c status.h
libsystem_la_CFLAGS = \
$(GLIB_CFLAGS) \
$(GIO_UNIX_CFLAGS) \
static int active_vt = 7;
+static gboolean status_connected = FALSE;
+
struct pam_handle
{
char *service_name;
{
struct vt_stat *console_state;
int *n;
+ int vt;
switch (request)
{
console_state->v_active = active_vt;
break;
case VT_ACTIVATE:
- active_vt = GPOINTER_TO_INT (data);
+ vt = GPOINTER_TO_INT (data);
+ if (vt != active_vt)
+ {
+ active_vt = vt;
+ if (!status_connected)
+ status_connected = status_connect (NULL);
+ status_notify ("VT ACTIVATE VT=%d", active_vt);
+ }
break;
case VT_WAITACTIVE:
break;
return TRUE;
}
-void
+gboolean
status_connect (StatusRequestFunc request_cb)
{
gchar *path;
g_printerr ("Unable to open socket for status: %s\n", error->message);
g_clear_error (&error);
if (!status_socket)
- return;
+ return FALSE;
path = g_build_filename (g_getenv ("LIGHTDM_TEST_ROOT"), ".s", NULL);
address = g_unix_socket_address_new (path);
g_clear_error (&error);
g_free (path);
if (!result)
- return;
+ return FALSE;
source = g_socket_create_source (status_socket, G_IO_IN, NULL);
g_source_set_callback (source, (GSourceFunc) status_request_cb, NULL, NULL);
- g_source_attach (source, NULL);
+ g_source_attach (source, NULL);
+
+ return TRUE;
}
void
typedef void (*StatusRequestFunc)(const gchar *message);
-void status_connect (StatusRequestFunc message_cb);
+gboolean status_connect (StatusRequestFunc message_cb);
void status_notify (const gchar *format, ...);