* gnu/packages/patches/lightdm-vncserver-check.patch: New patch. * gnu/local.mk (dist_patch_DATA): Register it. * gnu/packages/display-managers.scm (lightdm): Apply it.
		
			
				
	
	
		
			66 lines
		
	
	
	
		
			2.9 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
			
		
		
	
	
			66 lines
		
	
	
	
		
			2.9 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
Honor the Xvnc command specified in the config instead of using a hard-coded
 | 
						|
default.
 | 
						|
 | 
						|
Submitted upstream at: https://github.com/canonical/lightdm/pull/265
 | 
						|
 | 
						|
diff --git a/src/lightdm.c b/src/lightdm.c
 | 
						|
index 74f9ff2d..0ccfcd78 100644
 | 
						|
--- a/src/lightdm.c
 | 
						|
+++ b/src/lightdm.c
 | 
						|
@@ -349,27 +349,42 @@ start_display_manager (void)
 | 
						|
     /* Start the VNC server */
 | 
						|
     if (config_get_boolean (config_get_instance (), "VNCServer", "enabled"))
 | 
						|
     {
 | 
						|
-        g_autofree gchar *path = g_find_program_in_path ("Xvnc");
 | 
						|
-        if (path)
 | 
						|
+        /* Validate that a the VNC command is available. */
 | 
						|
+        g_autofree gchar *command = config_get_string (config_get_instance (), "VNCServer", "command");
 | 
						|
+        if (command)
 | 
						|
         {
 | 
						|
-            vnc_server = vnc_server_new ();
 | 
						|
-            if (config_has_key (config_get_instance (), "VNCServer", "port"))
 | 
						|
+            g_auto(GStrv) tokens = g_strsplit (command, " ", 2);
 | 
						|
+            if (!g_find_program_in_path (tokens[0]))
 | 
						|
             {
 | 
						|
-                gint port = config_get_integer (config_get_instance (), "VNCServer", "port");
 | 
						|
-                if (port > 0)
 | 
						|
-                    vnc_server_set_port (vnc_server, port);
 | 
						|
+                g_warning ("Can't start VNC server; command '%s' not found", tokens[0]);
 | 
						|
+                return;
 | 
						|
             }
 | 
						|
-            g_autofree gchar *listen_address = config_get_string (config_get_instance (), "VNCServer", "listen-address");
 | 
						|
-            vnc_server_set_listen_address (vnc_server, 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);
 | 
						|
         }
 | 
						|
         else
 | 
						|
-            g_warning ("Can't start VNC server, Xvnc is not in the path");
 | 
						|
+        {
 | 
						|
+            /* Fallback to 'Xvnc'. */
 | 
						|
+            if (!g_find_program_in_path ("Xvnc")) {
 | 
						|
+                g_warning ("Can't start VNC server; 'Xvnc' command not found");
 | 
						|
+                return;
 | 
						|
+            }
 | 
						|
+        }
 | 
						|
+
 | 
						|
+        vnc_server = vnc_server_new ();
 | 
						|
+        if (config_has_key (config_get_instance (), "VNCServer", "port"))
 | 
						|
+        {
 | 
						|
+            gint port = config_get_integer (config_get_instance (), "VNCServer", "port");
 | 
						|
+            if (port > 0)
 | 
						|
+                vnc_server_set_port (vnc_server, port);
 | 
						|
+        }
 | 
						|
+        g_autofree gchar *listen_address = config_get_string (config_get_instance (), "VNCServer", "listen-address");
 | 
						|
+        vnc_server_set_listen_address (vnc_server, 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);
 | 
						|
     }
 | 
						|
 }
 | 
						|
+
 | 
						|
 static void
 | 
						|
 service_ready_cb (DisplayManagerService *service)
 | 
						|
 {
 |