Subject: bug#35484: GDM failing to start stumpwm after merge

From: Timothy Sample <[email-masked]>
Date: Mon, 29 Apr 2019 15:08:16 -0400

Hi Brett,

[email-masked] writes:

> On 29.04.2019 18:05, Timothy Sample wrote:
>>
>> After doing some testing in a VM, it looks like this is an issue
>> with my
>> recent commit: 8caa458953eeac783c73a0e5aaa72842fe3914c9.
>>
>> I added a placeholder desktop entry file, and even though I did my best
>> to make it invisible, GDM is still selecting it.  (I tested GNOME and
>> XFCE, but I guess they were preferred by GDM over the placeholder,
>> whereas StumpWM is not.  Maybe the has to do with how the names are
>> sorted.)

This is exactly the problem.  To find a default session, it sorts the
names of all the “.desktop” files it can find (using “g_strcmp0”), and
picks the first.  Since we have “GNOME” < “XFCE” < “Fail” < “stumpwm”,
my tests did not catch this error.

I can think of two options for a fix before 1.0 (which is supposed to be
tomorrow!).  The cute one is to just rename “Fail” to “~Fail”, on the
expectation that this will come after most other names when sorted.  The
ugly one is to patch GDM to exclude the placeholder file when looking
for “.desktop” files, and then to select it instead of raising an error
when it can’t find anything.

My preference is for the ugly one, because the cute one feels like
putting a silly hack on top of silly hack – it’s just a bit too much.
I’ve attached a patch.  Thoughts?  (If I don’t hear anything, I will
push it – it’s important that this works for 1.0).

>From 6b78b1d9c9a4c5ecb55dcd973248310fbbea3a33 Mon Sep 17 00:00:00 2001
From: Timothy Sample <[email-masked]>
Date: Mon, 29 Apr 2019 14:49:42 -0400
Subject: [PATCH] gnu: gdm: Avoid selecting the placeholder session.

This fixes <https://bugs.gnu.org/35484>.

* gnu/packages/gnome.scm (gdm)[arguments]: Modify the pre-configure phase to
patch GDM to only select the placeholder session if there are no others.
---
 gnu/packages/gnome.scm | 12 +++++++++++-
 1 file changed, 11 insertions(+), 1 deletion(-)

diff --git a/gnu/packages/gnome.scm b/gnu/packages/gnome.scm
index 17dc2fd102..f19b1836d3 100644
--- a/gnu/packages/gnome.scm
+++ b/gnu/packages/gnome.scm
@@ -5597,7 +5597,7 @@ libxml2.")
        (modify-phases %standard-phases
          (add-before
           'configure 'pre-configure
-          (lambda* (#:key inputs #:allow-other-keys)
+          (lambda* (#:key inputs outputs #:allow-other-keys)
             ;; We don't have <systemd/sd-daemon.h>.
             (substitute* '("common/gdm-log.c"
                            "daemon/gdm-server.c"
@@ -5665,6 +5665,16 @@ libxml2.")
               (("\"gnome-session\"")
                (string-append "\"" (assoc-ref inputs "gnome-session")
                               "/bin/gnome-session\"")))
+            ;; Do not automatically select the placeholder session.
+            (substitute* "daemon/gdm-session.c"
+              (("!g_str_has_suffix [(]base_name, \"\\.desktop\"[)]")
+               (string-append "!g_str_has_suffix (base_name, \".desktop\") || "
+                              "(g_strcmp0(search_dirs[i], \""
+                              (assoc-ref outputs "out") "/share/gdm/BuiltInSessions/"
+                              "\") == 0 && "
+                              "g_strcmp0(base_name, \"fail.desktop\") == 0)"))
+              (("g_error [(]\"GdmSession: no session desktop files installed, aborting\\.\\.\\.\"[)];")
+               "{ self->priv->fallback_session_name = g_strdup(\"fail\"); goto out; }"))
             #t))
          ;; GDM requires that there be at least one desktop entry
          ;; file.  This phase installs a hidden one that simply
-- 
2.21.0

In the future, we should find a way to make GDM errors less
catastrophic, but I doubt we could do that in a day (I certainly
couldn’t)!

> Thank you for looking into this Tim! I have gone back to SLiM for the
> time being until it is fixed :).
>
> If anybody else is having this issue, going back to SLiM is really
> easy, check out my commit for reference.
>
> https://github.com/brettgilio/guix-system/commit/64d389db13c2f78ee5c58af28c1639b098113c93

Thanks for providing this.  Hopefully it helps anybody else having
problems.

-- Tim