diff options
author | Robert Ancell <robert.ancell@canonical.com> | 2016-12-01 11:13:55 +1300 |
---|---|---|
committer | Robert Ancell <robert.ancell@canonical.com> | 2016-12-01 11:13:55 +1300 |
commit | ce8011ae61acd90079e774e8910384fe41679c11 (patch) | |
tree | e8b86c20340c06166c31b0d96cc34b2e1e990d18 | |
parent | d9eafc4596f9b1812ee6752442970c97c00eb724 (diff) | |
download | lightdm-git-ce8011ae61acd90079e774e8910384fe41679c11.tar.gz |
.
-rw-r--r-- | src/lightdm.c | 203 |
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 |