summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobert Ancell <robert.ancell@canonical.com>2016-12-01 11:13:55 +1300
committerRobert Ancell <robert.ancell@canonical.com>2016-12-01 11:13:55 +1300
commitce8011ae61acd90079e774e8910384fe41679c11 (patch)
treee8b86c20340c06166c31b0d96cc34b2e1e990d18
parentd9eafc4596f9b1812ee6752442970c97c00eb724 (diff)
downloadlightdm-git-ce8011ae61acd90079e774e8910384fe41679c11.tar.gz
.
-rw-r--r--src/lightdm.c203
1 files changed, 105 insertions, 98 deletions
diff --git a/src/lightdm.c b/src/lightdm.c
index b6355777..943ec94c 100644
--- a/src/lightdm.c
+++ b/src/lightdm.c
@@ -793,6 +793,109 @@ vnc_connection_cb (VNCServer *server, GSocket *connection)
}
static void
+start_display_manager (void)
+{
+ display_manager_start (display_manager);
+
+ /* Start the XDMCP server */
+ if (config_get_boolean (config_get_instance (), "XDMCPServer", "enabled"))
+ {
+ gchar *key_name, *key = NULL, *listen_address, *hostname;
+
+ xdmcp_server = xdmcp_server_new ();
+ if (config_has_key (config_get_instance (), "XDMCPServer", "port"))
+ {
+ gint port;
+ port = config_get_integer (config_get_instance (), "XDMCPServer", "port");
+ if (port > 0)
+ xdmcp_server_set_port (xdmcp_server, port);
+ }
+ listen_address = config_get_string (config_get_instance (), "XDMCPServer", "listen-address");
+ xdmcp_server_set_listen_address (xdmcp_server, listen_address);
+ g_free (listen_address);
+ hostname = config_get_string (config_get_instance (), "XDMCPServer", "hostname");
+ xdmcp_server_set_hostname (xdmcp_server, hostname);
+ g_free (hostname);
+ g_signal_connect (xdmcp_server, XDMCP_SERVER_SIGNAL_NEW_SESSION, G_CALLBACK (xdmcp_session_cb), NULL);
+
+ key_name = config_get_string (config_get_instance (), "XDMCPServer", "key");
+ if (key_name)
+ {
+ gchar *path;
+ GKeyFile *keys;
+ gboolean result;
+ GError *error = NULL;
+
+ path = g_build_filename (config_get_directory (config_get_instance ()), "keys.conf", NULL);
+
+ keys = g_key_file_new ();
+ result = g_key_file_load_from_file (keys, path, G_KEY_FILE_NONE, &error);
+ if (error)
+ g_warning ("Unable to load keys from %s: %s", path, error->message);
+ g_clear_error (&error);
+
+ if (result)
+ {
+ if (g_key_file_has_key (keys, "keyring", key_name, NULL))
+ key = g_key_file_get_string (keys, "keyring", key_name, NULL);
+ else
+ g_warning ("Key %s not defined", key_name);
+ }
+ g_free (path);
+ g_key_file_free (keys);
+ }
+ if (key)
+ xdmcp_server_set_key (xdmcp_server, key);
+ g_free (key_name);
+ g_free (key);
+
+ if (key_name && !key)
+ {
+ exit_code = EXIT_FAILURE;
+ display_manager_stop (display_manager);
+ return;
+ }
+ else
+ {
+ g_debug ("Starting XDMCP server on UDP/IP port %d", xdmcp_server_get_port (xdmcp_server));
+ xdmcp_server_start (xdmcp_server);
+ }
+ }
+
+ /* Start the VNC server */
+ if (config_get_boolean (config_get_instance (), "VNCServer", "enabled"))
+ {
+ gchar *path;
+
+ path = g_find_program_in_path ("Xvnc");
+ if (path)
+ {
+ gchar *listen_address;
+
+ vnc_server = vnc_server_new ();
+ if (config_has_key (config_get_instance (), "VNCServer", "port"))
+ {
+ gint port;
+ port = config_get_integer (config_get_instance (), "VNCServer", "port");
+ if (port > 0)
+ vnc_server_set_port (vnc_server, port);
+ }
+ listen_address = config_get_string (config_get_instance (), "VNCServer", "listen-address");
+ vnc_server_set_listen_address (vnc_server, listen_address);
+ g_free (listen_address);
+ g_signal_connect (vnc_server, VNC_SERVER_SIGNAL_NEW_CONNECTION, G_CALLBACK (vnc_connection_cb), NULL);
+
+ g_debug ("Starting VNC server on TCP/IP port %d", vnc_server_get_port (vnc_server));
+ vnc_server_start (vnc_server);
+
+ g_free (path);
+ }
+ else
+ g_warning ("Can't start VNC server, Xvnc is not in the path");
+ }
+}
+
+static void
bus_acquired_cb (GDBusConnection *connection,
const gchar *name,
gpointer user_data)
@@ -890,109 +993,13 @@ bus_acquired_cb (GDBusConnection *connection,
seat_bus_entries = g_hash_table_new_full (g_direct_hash, g_direct_equal, g_object_unref, seat_bus_entry_free);
session_bus_entries = g_hash_table_new_full (g_direct_hash, g_direct_equal, g_object_unref, session_bus_entry_free);
+ /* Add objects for existing seats and listen to new ones */
g_signal_connect (display_manager, DISPLAY_MANAGER_SIGNAL_SEAT_ADDED, G_CALLBACK (seat_added_cb), NULL);
g_signal_connect (display_manager, DISPLAY_MANAGER_SIGNAL_SEAT_REMOVED, G_CALLBACK (seat_removed_cb), NULL);
for (link = display_manager_get_seats (display_manager); link; link = link->next)
seat_added_cb (display_manager, (Seat *) link->data);
- display_manager_start (display_manager);
-
- /* Start the XDMCP server */
- if (config_get_boolean (config_get_instance (), "XDMCPServer", "enabled"))
- {
- gchar *key_name, *key = NULL, *listen_address, *hostname;
-
- xdmcp_server = xdmcp_server_new ();
- if (config_has_key (config_get_instance (), "XDMCPServer", "port"))
- {
- gint port;
- port = config_get_integer (config_get_instance (), "XDMCPServer", "port");
- if (port > 0)
- xdmcp_server_set_port (xdmcp_server, port);
- }
- listen_address = config_get_string (config_get_instance (), "XDMCPServer", "listen-address");
- xdmcp_server_set_listen_address (xdmcp_server, listen_address);
- g_free (listen_address);
- hostname = config_get_string (config_get_instance (), "XDMCPServer", "hostname");
- xdmcp_server_set_hostname (xdmcp_server, hostname);
- g_free (hostname);
- g_signal_connect (xdmcp_server, XDMCP_SERVER_SIGNAL_NEW_SESSION, G_CALLBACK (xdmcp_session_cb), NULL);
-
- key_name = config_get_string (config_get_instance (), "XDMCPServer", "key");
- if (key_name)
- {
- gchar *path;
- GKeyFile *keys;
- gboolean result;
- GError *error = NULL;
-
- path = g_build_filename (config_get_directory (config_get_instance ()), "keys.conf", NULL);
-
- keys = g_key_file_new ();
- result = g_key_file_load_from_file (keys, path, G_KEY_FILE_NONE, &error);
- if (error)
- g_warning ("Unable to load keys from %s: %s", path, error->message);
- g_clear_error (&error);
-
- if (result)
- {
- if (g_key_file_has_key (keys, "keyring", key_name, NULL))
- key = g_key_file_get_string (keys, "keyring", key_name, NULL);
- else
- g_warning ("Key %s not defined", key_name);
- }
- g_free (path);
- g_key_file_free (keys);
- }
- if (key)
- xdmcp_server_set_key (xdmcp_server, key);
- g_free (key_name);
- g_free (key);
-
- if (key_name && !key)
- {
- exit_code = EXIT_FAILURE;
- display_manager_stop (display_manager);
- return;
- }
- else
- {
- g_debug ("Starting XDMCP server on UDP/IP port %d", xdmcp_server_get_port (xdmcp_server));
- xdmcp_server_start (xdmcp_server);
- }
- }
-
- /* Start the VNC server */
- if (config_get_boolean (config_get_instance (), "VNCServer", "enabled"))
- {
- gchar *path;
-
- path = g_find_program_in_path ("Xvnc");
- if (path)
- {
- gchar *listen_address;
-
- vnc_server = vnc_server_new ();
- if (config_has_key (config_get_instance (), "VNCServer", "port"))
- {
- gint port;
- port = config_get_integer (config_get_instance (), "VNCServer", "port");
- if (port > 0)
- vnc_server_set_port (vnc_server, port);
- }
- listen_address = config_get_string (config_get_instance (), "VNCServer", "listen-address");
- vnc_server_set_listen_address (vnc_server, listen_address);
- g_free (listen_address);
- g_signal_connect (vnc_server, VNC_SERVER_SIGNAL_NEW_CONNECTION, G_CALLBACK (vnc_connection_cb), NULL);
-
- g_debug ("Starting VNC server on TCP/IP port %d", vnc_server_get_port (vnc_server));
- vnc_server_start (vnc_server);
-
- g_free (path);
- }
- else
- g_warning ("Can't start VNC server, Xvnc is not in the path");
- }
+ start_display_manager ();
}
static void