5 #include <lightdm/greeter.h>
9 static xcb_connection_t *connection = NULL;
10 static GKeyFile *config;
13 show_message_cb (LightDMGreeter *greeter, const gchar *text, LightDMMessageType type)
15 notify_status ("GREETER SHOW-MESSAGE TEXT=\"%s\"", text);
19 show_prompt_cb (LightDMGreeter *greeter, const gchar *text, LightDMPromptType type)
21 gchar *username, *password, *response = NULL;
23 notify_status ("GREETER SHOW-PROMPT TEXT=\"%s\"", text);
25 username = g_key_file_get_string (config, "test-greeter-config", "username", NULL);
26 password = g_key_file_get_string (config, "test-greeter-config", "password", NULL);
28 if (g_key_file_get_boolean (config, "test-greeter-config", "prompt-username", NULL))
30 g_key_file_set_boolean (config, "test-greeter-config", "prompt-username", FALSE);
38 notify_status ("GREETER RESPOND TEXT=\"%s\"", response);
39 lightdm_greeter_respond (greeter, response);
47 authentication_complete_cb (LightDMGreeter *greeter)
49 notify_status ("GREETER AUTHENTICATION-COMPLETE AUTHENTICATED=%s", lightdm_greeter_get_is_authenticated (greeter) ? "TRUE" : "FALSE");
50 if (!lightdm_greeter_get_is_authenticated (greeter))
53 if (lightdm_greeter_start_session_sync (greeter, NULL))
55 notify_status ("GREETER QUIT");
59 notify_status ("GREETER SESSION-FAILED");
63 signal_cb (int signum)
65 notify_status ("GREETER TERMINATE SIGNAL=%d", signum);
70 main (int argc, char **argv)
73 LightDMGreeter *greeter;
75 signal (SIGINT, signal_cb);
76 signal (SIGTERM, signal_cb);
78 notify_status ("GREETER START");
80 config = g_key_file_new ();
81 if (g_getenv ("LIGHTDM_TEST_CONFIG"))
82 g_key_file_load_from_file (config, g_getenv ("LIGHTDM_TEST_CONFIG"), G_KEY_FILE_NONE, NULL);
85 main_loop = g_main_loop_new (NULL, FALSE);
87 connection = xcb_connect (NULL, NULL);
89 if (xcb_connection_has_error (connection))
91 fprintf (stderr, "Error connecting to X server\n");
95 notify_status ("GREETER CONNECT-XSERVER %s", getenv ("DISPLAY"));
97 greeter = lightdm_greeter_new ();
98 g_signal_connect (greeter, "show-message", G_CALLBACK (show_message_cb), NULL);
99 g_signal_connect (greeter, "show-prompt", G_CALLBACK (show_prompt_cb), NULL);
100 g_signal_connect (greeter, "authentication-complete", G_CALLBACK (authentication_complete_cb), NULL);
102 notify_status ("GREETER CONNECT-TO-DAEMON");
103 if (!lightdm_greeter_connect_sync (greeter))
106 notify_status ("GREETER CONNECTED-TO-DAEMON");
108 if (g_key_file_get_boolean (config, "test-greeter-config", "crash-xserver", NULL))
110 const gchar *name = "SIGSEGV";
111 notify_status ("GREETER CRASH-XSERVER");
112 xcb_intern_atom (connection, FALSE, strlen (name), name);
113 xcb_flush (connection);
116 /* Automatically log in as requested user */
117 if (lightdm_greeter_get_select_user_hint (greeter))
119 notify_status ("GREETER AUTHENTICATE-SELECTED USERNAME=%s", lightdm_greeter_get_select_user_hint (greeter));
120 lightdm_greeter_authenticate (greeter, lightdm_greeter_get_select_user_hint (greeter));
127 login_lock = g_build_filename (g_getenv ("LIGHTDM_TEST_HOME_DIR"), ".greeter-logged-in", NULL);
128 f = fopen (login_lock, "r");
131 if (g_key_file_get_boolean (config, "test-greeter-config", "login-guest", NULL))
133 notify_status ("GREETER AUTHENTICATE-GUEST");
134 lightdm_greeter_authenticate_as_guest (greeter);
136 else if (g_key_file_get_boolean (config, "test-greeter-config", "prompt-username", NULL))
138 notify_status ("GREETER AUTHENTICATE");
139 lightdm_greeter_authenticate (greeter, NULL);
145 username = g_key_file_get_string (config, "test-greeter-config", "username", NULL);
148 notify_status ("GREETER AUTHENTICATE USERNAME=%s", username);
149 lightdm_greeter_authenticate (greeter, username);
154 /* Write lock to stop repeatedly logging in */
155 f = fopen (login_lock, "w");
160 g_debug ("Not logging in, lock file detected %s", login_lock);
165 g_main_loop_run (main_loop);