1 /* -*- Mode: C; indent-tabs-mode: nil; tab-width: 4 -*- */
11 static GMainLoop *loop;
12 static LightDMGreeter *greeter;
13 static xcb_connection_t *connection = NULL;
14 static GKeyFile *config;
17 show_message_cb (LightDMGreeter *greeter, const gchar *text, LightDMMessageType type)
19 status_notify ("GREETER %s SHOW-MESSAGE TEXT=\"%s\"", getenv ("DISPLAY"), text);
23 show_prompt_cb (LightDMGreeter *greeter, const gchar *text, LightDMPromptType type)
25 status_notify ("GREETER %s SHOW-PROMPT TEXT=\"%s\"", getenv ("DISPLAY"), text);
29 authentication_complete_cb (LightDMGreeter *greeter)
31 if (lightdm_greeter_get_authentication_user (greeter))
32 status_notify ("GREETER %s AUTHENTICATION-COMPLETE USERNAME=%s AUTHENTICATED=%s",
34 lightdm_greeter_get_authentication_user (greeter),
35 lightdm_greeter_get_is_authenticated (greeter) ? "TRUE" : "FALSE");
37 status_notify ("GREETER %s AUTHENTICATION-COMPLETE AUTHENTICATED=%s",
39 lightdm_greeter_get_is_authenticated (greeter) ? "TRUE" : "FALSE");
43 autologin_timer_expired_cb (LightDMGreeter *greeter)
45 status_notify ("GREETER %s AUTOLOGIN-TIMER-EXPIRED", getenv ("DISPLAY"));
49 signal_cb (int signum)
51 status_notify ("GREETER %s TERMINATE SIGNAL=%d", getenv ("DISPLAY"), signum);
56 request_cb (const gchar *request)
62 g_main_loop_quit (loop);
66 r = g_strdup_printf ("GREETER %s AUTHENTICATE", getenv ("DISPLAY"));
67 if (strcmp (request, r) == 0)
68 lightdm_greeter_authenticate (greeter, NULL);
71 r = g_strdup_printf ("GREETER %s AUTHENTICATE USERNAME=", getenv ("DISPLAY"));
72 if (g_str_has_prefix (request, r))
73 lightdm_greeter_authenticate (greeter, request + strlen (r));
76 r = g_strdup_printf ("GREETER %s AUTHENTICATE-GUEST", getenv ("DISPLAY"));
77 if (strcmp (request, r) == 0)
78 lightdm_greeter_authenticate_as_guest (greeter);
81 r = g_strdup_printf ("GREETER %s AUTHENTICATE-AUTOLOGIN", getenv ("DISPLAY"));
82 if (strcmp (request, r) == 0)
83 lightdm_greeter_authenticate_autologin (greeter);
86 r = g_strdup_printf ("GREETER %s AUTHENTICATE-REMOTE SESSION=", getenv ("DISPLAY"));
87 if (g_str_has_prefix (request, r))
88 lightdm_greeter_authenticate_remote (greeter, request + strlen (r), NULL);
91 r = g_strdup_printf ("GREETER %s RESPOND TEXT=\"", getenv ("DISPLAY"));
92 if (g_str_has_prefix (request, r))
94 gchar *text = g_strdup (request + strlen (r));
95 text[strlen (text) - 1] = '\0';
96 lightdm_greeter_respond (greeter, text);
101 r = g_strdup_printf ("GREETER %s CANCEL-AUTHENTICATION", getenv ("DISPLAY"));
102 if (strcmp (request, r) == 0)
103 lightdm_greeter_cancel_authentication (greeter);
106 r = g_strdup_printf ("GREETER %s START-SESSION", getenv ("DISPLAY"));
107 if (strcmp (request, r) == 0)
109 if (!lightdm_greeter_start_session_sync (greeter, NULL, NULL))
110 status_notify ("GREETER %s SESSION-FAILED", getenv ("DISPLAY"));
114 r = g_strdup_printf ("GREETER %s START-SESSION SESSION=", getenv ("DISPLAY"));
115 if (g_str_has_prefix (request, r))
117 if (!lightdm_greeter_start_session_sync (greeter, request + strlen (r), NULL))
118 status_notify ("GREETER %s SESSION-FAILED", getenv ("DISPLAY"));
122 r = g_strdup_printf ("GREETER %s LOG-LAYOUT", getenv ("DISPLAY"));
123 if (strcmp (request, r) == 0)
126 layout = lightdm_layout_get_name (lightdm_get_layout ());
127 status_notify ("GREETER %s LOG-LAYOUT LAYOUT='%s'", getenv ("DISPLAY"), layout ? layout : "");
130 r = g_strdup_printf ("GREETER %s LOG-LAYOUT USERNAME=", getenv ("DISPLAY"));
131 if (g_str_has_prefix (request, r))
134 const gchar *username, *layout;
136 username = request + strlen (r);
137 user = lightdm_user_list_get_user_by_name (lightdm_user_list_get_instance (), username);
138 layout = lightdm_user_get_layout (user);
140 status_notify ("GREETER %s LOG-LAYOUT USERNAME=%s LAYOUT='%s'", getenv ("DISPLAY"), username, layout ? layout : "");
144 r = g_strdup_printf ("GREETER %s LOG-LAYOUTS USERNAME=", getenv ("DISPLAY"));
145 if (g_str_has_prefix (request, r))
148 const gchar *username;
149 const gchar * const *layouts;
152 username = request + strlen (r);
153 user = lightdm_user_list_get_user_by_name (lightdm_user_list_get_instance (), username);
154 layouts = lightdm_user_get_layouts (user);
156 for (i = 0; layouts[i]; i++)
157 status_notify ("GREETER %s LOG-LAYOUTS USERNAME=%s LAYOUT='%s'", getenv ("DISPLAY"), username, layouts[i]);
161 r = g_strdup_printf ("GREETER %s LOG-VARIANTS LAYOUT=", getenv ("DISPLAY"));
162 if (g_str_has_prefix (request, r))
164 GList *layouts, *iter;
165 const gchar *layout_prefix;
167 layout_prefix = request + strlen (r);
168 layouts = lightdm_get_layouts ();
170 for (iter = layouts; iter; iter = iter->next)
172 LightDMLayout *layout;
175 layout = (LightDMLayout *) iter->data;
176 name = lightdm_layout_get_name (layout);
178 if (g_str_has_prefix (name, layout_prefix))
179 status_notify ("GREETER %s LOG-VARIANTS LAYOUT='%s'", getenv ("DISPLAY"), name);
184 r = g_strdup_printf ("GREETER %s LOG-LANGUAGE USERNAME=", getenv ("DISPLAY"));
185 if (g_str_has_prefix (request, r))
188 const gchar *username, *language;
190 username = request + strlen (r);
191 user = lightdm_user_list_get_user_by_name (lightdm_user_list_get_instance (), username);
192 language = lightdm_user_get_language (user);
194 status_notify ("GREETER %s LOG-LANGUAGE USERNAME=%s LANGUAGE=%s", getenv ("DISPLAY"), username, language ? language : "");
200 main (int argc, char **argv)
202 signal (SIGINT, signal_cb);
203 signal (SIGTERM, signal_cb);
205 #if !defined(GLIB_VERSION_2_36)
209 loop = g_main_loop_new (NULL, FALSE);
211 status_connect (request_cb);
213 status_notify ("GREETER %s START", getenv ("DISPLAY"));
215 config = g_key_file_new ();
216 g_key_file_load_from_file (config, g_build_filename (g_getenv ("LIGHTDM_TEST_ROOT"), "script", NULL), G_KEY_FILE_NONE, NULL);
218 if (g_key_file_has_key (config, "test-greeter-config", "return-value", NULL))
220 int return_value = g_key_file_get_integer (config, "test-greeter-config", "return-value", NULL);
221 status_notify ("GREETER %s EXIT CODE=%d", getenv ("DISPLAY"), return_value);
225 connection = xcb_connect (NULL, NULL);
227 if (xcb_connection_has_error (connection))
229 status_notify ("GREETER %s FAIL-CONNECT-XSERVER", getenv ("DISPLAY"));
233 status_notify ("GREETER %s CONNECT-XSERVER", getenv ("DISPLAY"));
235 greeter = lightdm_greeter_new ();
236 g_signal_connect (greeter, "show-message", G_CALLBACK (show_message_cb), NULL);
237 g_signal_connect (greeter, "show-prompt", G_CALLBACK (show_prompt_cb), NULL);
238 g_signal_connect (greeter, "authentication-complete", G_CALLBACK (authentication_complete_cb), NULL);
239 g_signal_connect (greeter, "autologin-timer-expired", G_CALLBACK (autologin_timer_expired_cb), NULL);
241 status_notify ("GREETER %s CONNECT-TO-DAEMON", getenv ("DISPLAY"));
242 if (!lightdm_greeter_connect_sync (greeter, NULL))
244 status_notify ("GREETER %s FAIL-CONNECT-DAEMON", getenv ("DISPLAY"));
248 status_notify ("GREETER %s CONNECTED-TO-DAEMON", getenv ("DISPLAY"));
250 if (lightdm_greeter_get_select_user_hint (greeter))
251 status_notify ("GREETER %s SELECT-USER-HINT USERNAME=%s", getenv ("DISPLAY"), lightdm_greeter_get_select_user_hint (greeter));
252 if (lightdm_greeter_get_lock_hint (greeter))
253 status_notify ("GREETER %s LOCK-HINT", getenv ("DISPLAY"));
255 g_main_loop_run (loop);