}
static gboolean
-switch_to_user (DisplayManager *manager, const gchar *username, gboolean start_new_greeter)
+switch_to_user (DisplayManager *manager, const gchar *username)
{
GList *link;
Display *display;
+ XServer *xserver;
for (link = manager->priv->displays; link; link = link->next)
{
}
}
- if (start_new_greeter)
- {
- XServer *xserver;
+ if (username)
+ g_debug ("Starting new display for user %s", username);
+ else
+ g_debug ("Starting new display for greeter");
- if (username)
- g_debug ("Starting new display for user %s", username);
- else
- g_debug ("Starting new display for greeter");
+ xserver = make_xserver (manager, NULL);
+ display = add_display (manager, xserver);
+ // FIXME: Add selected user hint
+ g_object_unref (xserver);
- xserver = make_xserver (manager, NULL);
- display = add_display (manager, xserver);
- // FIXME: Add selected user hint
- g_object_unref (xserver);
- display_start (display);
+ /* Guest account should log in immediately */
+ if (username && g_strcmp0 (username, guest_account_get_username ()) == 0)
+ display_set_default_user (display, username);
- return TRUE;
- }
+ display_start (display);
return FALSE;
}
g_return_if_fail (manager != NULL);
g_debug ("Showing greeter");
- switch_to_user (manager, NULL, TRUE);
+ switch_to_user (manager, NULL);
}
gboolean
-display_manager_switch_to_user (DisplayManager *manager, const gchar *username, gboolean start_greeter)
+display_manager_switch_to_user (DisplayManager *manager, const gchar *username)
{
g_return_val_if_fail (manager != NULL, FALSE);
g_return_val_if_fail (username != NULL, FALSE);
g_debug ("Switching to user %s", username);
- return switch_to_user (manager, username, start_greeter);
+ return switch_to_user (manager, username);
}
gboolean
-display_manager_switch_to_guest (DisplayManager *manager, gboolean start_greeter)
+display_manager_switch_to_guest (DisplayManager *manager)
{
g_return_val_if_fail (manager != NULL, FALSE);
return FALSE;
g_debug ("Switching to guest account");
- return switch_to_user (manager, guest_account_get_username (), start_greeter);
+ return switch_to_user (manager, guest_account_get_username ());
}
static gboolean
void display_manager_show_greeter (DisplayManager *manager);
-gboolean display_manager_switch_to_user (DisplayManager *manager, const gchar *username, gboolean start_greeter);
+gboolean display_manager_switch_to_user (DisplayManager *manager, const gchar *username);
-gboolean display_manager_switch_to_guest (DisplayManager *manager, gboolean start_greeter);
+gboolean display_manager_switch_to_guest (DisplayManager *manager);
void display_manager_start (DisplayManager *manager);
result = session_start (display->priv->user_session, FALSE);
- /* If a guest account, remove the account on exit */
+ /* Create guest account */
if (result && g_strcmp0 (user_get_name (session_get_user (display->priv->user_session)), guest_account_get_username ()) == 0)
guest_account_ref ();
static gboolean
start_autologin_session (Display *display, GError **error)
{
+ /* Open guest account if necessary */
+ if (g_strcmp0 (display->priv->default_user, guest_account_get_username ()) == 0)
+ guest_account_ref ();
+
/* Run using autologin PAM session, abort if get asked any questions */
if (display->priv->user_pam_session)
pam_session_end (display->priv->user_pam_session);
return;
g_variant_get (parameters, "(s)", &username);
- display_manager_switch_to_user (display_manager, username, TRUE);
+ display_manager_switch_to_user (display_manager, username);
g_dbus_method_invocation_return_value (invocation, NULL);
g_free (username);
}
if (!g_variant_is_of_type (parameters, G_VARIANT_TYPE ("()")))
return;
- display_manager_switch_to_guest (display_manager, TRUE);
+ display_manager_switch_to_guest (display_manager);
g_dbus_method_invocation_return_value (invocation, NULL);
}
}
--- /dev/null
+[LightDM]
+
+[GuestAccount]
+enabled=true
+setup-script=test-setup-guest
+cleanup-script=test-cleanup-guest
+
+[test-greeter-config]
+login-guest=true
--- /dev/null
+RUNNER DAEMON-START
+*WAIT
+
+# Switch to guest, should automatically log in
+*SWITCH-TO-GUEST
+RUNNER SWITCH-TO-GUEST
+XSERVER :.* START
+XSERVER :.* INDICATE-READY
+XSERVER :.* ACCEPT-CONNECT
+SESSION START USER=guest
+XSERVER :.* ACCEPT-CONNECT
+SESSION CONNECT-XSERVER
+
+# Switch again, should not do anything as guest already running
+*SWITCH-TO-GUEST
+RUNNER SWITCH-TO-GUEST
+*WAIT
+
+# Show a new greeter
+*SHOW-GREETER
+RUNNER SHOW-GREETER
+XSERVER :.* START
+XSERVER :.* INDICATE-READY
+XSERVER :.* ACCEPT-CONNECT
+GREETER START
+XSERVER :.* ACCEPT-CONNECT
+GREETER CONNECT-XSERVER :.*
+GREETER CONNECT-TO-DAEMON
+GREETER CONNECTED-TO-DAEMON
+
+# Log in as guest
+GREETER LOGIN-GUEST
+GREETER AUTHENTICATION-COMPLETE AUTHENTICATED=TRUE
+
+# New display should quit, and first session should be actived
+(GREETER TERMINATE SIGNAL=15|XSERVER :.* TERMINATE SIGNAL=15)
+(GREETER TERMINATE SIGNAL=15|XSERVER :.* TERMINATE SIGNAL=15)
+*WAIT
+
+# Cleanup
+*STOP-DAEMON
+# Don't know what order they will terminate
+(SESSION TERMINATE SIGNAL=15|XSERVER :.* TERMINATE SIGNAL=15)
+(SESSION TERMINATE SIGNAL=15|XSERVER :.* TERMINATE SIGNAL=15)
+RUNNER DAEMON-EXIT STATUS=0
check_status (status_text);
g_free (status_text);
}
+ else if (strcmp (name, "SWITCH-TO-GUEST") == 0)
+ {
+ g_dbus_connection_call_sync (g_bus_get_sync (G_BUS_TYPE_SESSION, NULL, NULL),
+ "org.freedesktop.DisplayManager",
+ "/org/freedesktop/DisplayManager",
+ "org.freedesktop.DisplayManager",
+ "SwitchToGuest",
+ g_variant_new ("()"),
+ G_VARIANT_TYPE ("()"),
+ G_DBUS_CALL_FLAGS_NONE,
+ 1000,
+ NULL,
+ NULL);
+ check_status ("RUNNER SWITCH-TO-GUEST");
+ }
else if (strcmp (name, "STOP-DAEMON") == 0)
{
expect_exit = TRUE;
--- /dev/null
+#!/bin/sh
+./src/test-runner switch-to-guest