1 /* -*- Mode: C; indent-tabs-mode: nil; tab-width: 4 -*- */
11 static LightDMGreeter *greeter;
12 static xcb_connection_t *connection = NULL;
13 static GKeyFile *config;
16 show_message_cb (LightDMGreeter *greeter, const gchar *text, LightDMMessageType type)
18 status_notify ("GREETER %s SHOW-MESSAGE TEXT=\"%s\"", getenv ("DISPLAY"), text);
22 show_prompt_cb (LightDMGreeter *greeter, const gchar *text, LightDMPromptType type)
24 status_notify ("GREETER %s SHOW-PROMPT TEXT=\"%s\"", getenv ("DISPLAY"), text);
28 authentication_complete_cb (LightDMGreeter *greeter)
30 if (lightdm_greeter_get_authentication_user (greeter))
31 status_notify ("GREETER %s AUTHENTICATION-COMPLETE USERNAME=%s AUTHENTICATED=%s",
33 lightdm_greeter_get_authentication_user (greeter),
34 lightdm_greeter_get_is_authenticated (greeter) ? "TRUE" : "FALSE");
36 status_notify ("GREETER %s AUTHENTICATION-COMPLETE AUTHENTICATED=%s",
38 lightdm_greeter_get_is_authenticated (greeter) ? "TRUE" : "FALSE");
42 signal_cb (int signum)
44 status_notify ("GREETER %s TERMINATE SIGNAL=%d", getenv ("DISPLAY"), signum);
49 request_cb (const gchar *request)
53 r = g_strdup_printf ("GREETER %s AUTHENTICATE", getenv ("DISPLAY"));
54 if (strcmp (request, r) == 0)
55 lightdm_greeter_authenticate (greeter, NULL);
58 r = g_strdup_printf ("GREETER %s AUTHENTICATE USERNAME=", getenv ("DISPLAY"));
59 if (g_str_has_prefix (request, r))
60 lightdm_greeter_authenticate (greeter, request + strlen (r));
63 r = g_strdup_printf ("GREETER %s AUTHENTICATE-GUEST", getenv ("DISPLAY"));
64 if (strcmp (request, r) == 0)
65 lightdm_greeter_authenticate_as_guest (greeter);
68 r = g_strdup_printf ("GREETER %s RESPOND TEXT=\"", getenv ("DISPLAY"));
69 if (g_str_has_prefix (request, r))
71 gchar *text = g_strdup (request + strlen (r));
72 text[strlen (text) - 1] = '\0';
73 lightdm_greeter_respond (greeter, text);
78 r = g_strdup_printf ("GREETER %s START-SESSION", getenv ("DISPLAY"));
79 if (strcmp (request, r) == 0)
81 if (!lightdm_greeter_start_session_sync (greeter, NULL, NULL))
82 status_notify ("GREETER %s SESSION-FAILED", getenv ("DISPLAY"));
86 r = g_strdup_printf ("GREETER %s START-SESSION SESSION=", getenv ("DISPLAY"));
87 if (g_str_has_prefix (request, r))
89 if (!lightdm_greeter_start_session_sync (greeter, request + strlen (r), NULL))
90 status_notify ("GREETER %s SESSION-FAILED", getenv ("DISPLAY"));
94 r = g_strdup_printf ("GREETER %s LOG-LAYOUT USERNAME=", getenv ("DISPLAY"));
95 if (g_str_has_prefix (request, r))
98 const gchar *username, *layout;
100 username = request + strlen (r);
102 if (g_strcmp0 (username, "%DEFAULT%") == 0) /* Grab system default layout */
103 layout = lightdm_layout_get_name (lightdm_get_layout ());
106 user = lightdm_user_list_get_user_by_name (lightdm_user_list_get_instance (), username);
107 layout = lightdm_user_get_layout (user);
110 status_notify ("GREETER %s LOG-LAYOUT USERNAME=%s LAYOUT='%s'", getenv ("DISPLAY"), username, layout ? layout : "");
114 r = g_strdup_printf ("GREETER %s LOG-VARIANTS LAYOUT=", getenv ("DISPLAY"));
115 if (g_str_has_prefix (request, r))
117 GList *layouts, *iter;
118 gchar *layout_prefix;
120 layout_prefix = request + strlen (r);
121 layouts = lightdm_get_layouts ();
123 for (iter = layouts; iter; iter = iter->next)
125 LightDMLayout *layout;
128 layout = (LightDMLayout *) iter->data;
129 name = lightdm_layout_get_name (layout);
131 if (g_str_has_prefix (name, layout_prefix))
132 status_notify ("GREETER %s LOG-VARIANTS LAYOUT='%s'", getenv ("DISPLAY"), name);
137 r = g_strdup_printf ("GREETER %s LOG-LANGUAGE USERNAME=", getenv ("DISPLAY"));
138 if (g_str_has_prefix (request, r))
141 const gchar *username, *language;
143 username = request + strlen (r);
144 user = lightdm_user_list_get_user_by_name (lightdm_user_list_get_instance (), username);
145 language = lightdm_user_get_language (user);
147 status_notify ("GREETER %s LOG-LANGUAGE USERNAME=%s LANGUAGE=%s", getenv ("DISPLAY"), username, language ? language : "");
153 main (int argc, char **argv)
155 GMainLoop *main_loop;
157 signal (SIGINT, signal_cb);
158 signal (SIGTERM, signal_cb);
162 main_loop = g_main_loop_new (NULL, FALSE);
164 status_connect (request_cb);
166 status_notify ("GREETER %s START", getenv ("DISPLAY"));
168 config = g_key_file_new ();
169 if (g_getenv ("LIGHTDM_TEST_CONFIG"))
170 g_key_file_load_from_file (config, g_getenv ("LIGHTDM_TEST_CONFIG"), G_KEY_FILE_NONE, NULL);
172 if (g_key_file_has_key (config, "test-greeter-config", "return-value", NULL))
174 int return_value = g_key_file_get_integer (config, "test-greeter-config", "return-value", NULL);
175 status_notify ("GREETER %s EXIT CODE=%d", getenv ("DISPLAY"), return_value);
179 connection = xcb_connect (NULL, NULL);
181 if (xcb_connection_has_error (connection))
183 status_notify ("GREETER %s FAIL-CONNECT-XSERVER", getenv ("DISPLAY"));
187 status_notify ("GREETER %s CONNECT-XSERVER", getenv ("DISPLAY"));
189 greeter = lightdm_greeter_new ();
190 g_signal_connect (greeter, "show-message", G_CALLBACK (show_message_cb), NULL);
191 g_signal_connect (greeter, "show-prompt", G_CALLBACK (show_prompt_cb), NULL);
192 g_signal_connect (greeter, "authentication-complete", G_CALLBACK (authentication_complete_cb), NULL);
194 status_notify ("GREETER %s CONNECT-TO-DAEMON", getenv ("DISPLAY"));
195 if (!lightdm_greeter_connect_sync (greeter, NULL))
197 status_notify ("GREETER %s FAIL-CONNECT-DAEMON", getenv ("DISPLAY"));
201 status_notify ("GREETER %s CONNECTED-TO-DAEMON", getenv ("DISPLAY"));
203 if (lightdm_greeter_get_select_user_hint (greeter))
204 status_notify ("GREETER %s SELECT-USER-HINT USERNAME=%s", getenv ("DISPLAY"), lightdm_greeter_get_select_user_hint (greeter));
205 if (lightdm_greeter_get_lock_hint (greeter))
206 status_notify ("GREETER %s LOCK-HINT", getenv ("DISPLAY"));
208 g_main_loop_run (main_loop);