~ruther/guix-local

a4fd1840ab16086d6b9c4001b510d73ef5727222 — Maxim Cournoyer 3 years ago da3c784
gnu: lightdm: Apply patch to allow using VNC options.

* gnu/packages/patches/lightdm-arguments-ordering.patch: New patch.
* gnu/local.mk (dist_patch_DATA): Register it.
* gnu/packages/display-managers.scm (lightdm): Apply it.
M gnu/local.mk => gnu/local.mk +1 -0
@@ 1360,6 1360,7 @@ dist_patch_DATA =						\
  %D%/packages/patches/librime-fix-build-with-gcc10.patch	\
  %D%/packages/patches/libvirt-add-install-prefix.patch	\
  %D%/packages/patches/libziparchive-add-includes.patch		\
  %D%/packages/patches/lightdm-arguments-ordering.patch		\
  %D%/packages/patches/lightdm-vncserver-check.patch		\
  %D%/packages/patches/localed-xorg-keyboard.patch		\
  %D%/packages/patches/kdiagram-Fix-missing-link-libraries.patch \

M gnu/packages/display-managers.scm => gnu/packages/display-managers.scm +2 -1
@@ 269,7 269,8 @@ experience for your users, your family and yourself")
              (sha256
               (base32
                "1wr60c946p8jz9kb8zi4cd8d4mkcy7infbvlfzwajiglc22nblxn"))
              (patches (search-patches "lightdm-vncserver-check.patch"))))
              (patches (search-patches "lightdm-arguments-ordering.patch"
                                       "lightdm-vncserver-check.patch"))))
    (build-system gnu-build-system)
    (arguments
     '(#:parallel-tests? #f             ; fails when run in parallel

A gnu/packages/patches/lightdm-arguments-ordering.patch => gnu/packages/patches/lightdm-arguments-ordering.patch +54 -0
@@ 0,0 1,54 @@
When providing the VNCServer command as 'Xvnc -SecurityTypes None',
the formatted command line used would look like:

  Xvnc  -SecurityTypes None :1 -auth /var/run/lightdm/root/:1

which is invalid (the display number must appear first).

Submitted upstream at: https://github.com/canonical/lightdm/pull/265

 src/x-server-local.c | 14 +++++++++++++-
 1 file changed, 13 insertions(+), 1 deletion(-)

diff --git a/src/x-server-local.c b/src/x-server-local.c
index 7c4ab870..6c540d18 100644
--- a/src/x-server-local.c
+++ b/src/x-server-local.c
@@ -463,14 +463,20 @@ x_server_local_start (DisplayServer *display_server)
     l_debug (display_server, "Logging to %s", log_file);
 
     g_autofree gchar *absolute_command = get_absolute_command (priv->command);
+    g_auto(GStrv) tokens = g_strsplit (absolute_command, " ", 2);
+    const gchar* binary = tokens[0];
+    const gchar *extra_options = tokens[1];
+
     if (!absolute_command)
     {
         l_debug (display_server, "Can't launch X server %s, not found in path", priv->command);
         stopped_cb (priv->x_server_process, X_SERVER_LOCAL (server));
         return FALSE;
     }
-    g_autoptr(GString) command = g_string_new (absolute_command);
+    g_autoptr(GString) command = g_string_new (binary);
 
+    /* The display argument must be given first when the X server used
+     * is Xvnc. */
     g_string_append_printf (command, " :%d", priv->display_number);
 
     if (priv->config_file)
@@ -513,6 +519,12 @@ x_server_local_start (DisplayServer *display_server)
     if (X_SERVER_LOCAL_GET_CLASS (server)->add_args)
         X_SERVER_LOCAL_GET_CLASS (server)->add_args (server, command);
 
+    /* Any extra user options provided via the VNCServer 'command'
+     * config option are appended last, so the user can override any
+     * of the above. */
+    if (extra_options)
+        g_string_append_printf (command, " %s", extra_options);
+
     process_set_command (priv->x_server_process, command->str);
 
     l_debug (display_server, "Launching X Server");
-- 
2.36.1