Subject: bug#75460: herd status hangs forever

From: Ludovic Courtès <[email-masked]>
Date: Sun, 12 Jan 2025 15:12:56 +0100

Hello,

Simen Endsjø <[email-masked]> skribis:

>> Then please check precisely what hangs and what doesn’t.  You say “herd
>> status” hangs; what about “herd status X”, where X is a service defined
>> for your user shepherd?
>
> Not sure how I can find out precicely what hangs. Operations on
> individual services seems to work fine:
>
> $ herd status emacs-daemon
> ● Status of emacs-daemon:
>   It is running since Sat 11 Jan 2025 07:35:36 PM CET (13 hours ago).
>   # (... snip ...)

Can you try something like:

--8<---------------cut here---------------start------------->8---
for s in xss-lock volctl unclutter redshift picom \
  network-manager-applet dunst cbatticon blueman-applet \
  emacs-daemon ssh-agent dbus x11-display
do
  echo "trying $s"; herd status "$s"
done
--8<---------------cut here---------------end--------------->8---

to try and determine whether one of these is hanging?

If you don’t mind, could you share ~/.local/state/shepherd/shepherd.log,
privately if you prefer?  (Preferably remove everything that comes
before its last boot.)

>> Last, could you share the config file of your user shepherd, or maybe
>> the Guix Home config if that’s what you’re using?
>
> https://git.sr.ht/~simendsjo/dotfiles/tree/main/item/sijo/home/simendsjo/home-environment.scm

[...]

>          (xss-lock volctl unclutter redshift picom network-manager-applet dunst cbatticon blueman-applet emacs-daemon ssh-agent dbus x11-display))))

I checked these and the only one that looks fishy is ‘unclutter’, which
I would change like this:

diff --git a/gnu/home/services/desktop.scm b/gnu/home/services/desktop.scm
index fc96ce9295..859dba776a 100644
--- a/gnu/home/services/desktop.scm
+++ b/gnu/home/services/desktop.scm
@@ -353,7 +353,6 @@ (define (home-unclutter-shepherd-service config)
     (modules '((shepherd support) ;for %user-log-dir
                (srfi srfi-1)
                (srfi srfi-26)))
-    (one-shot? #t)
     (start #~(lambda _
                (fork+exec-command
                 (list
@@ -369,7 +368,8 @@ (define (home-unclutter-shepherd-service config)
                       (remove (cut string-prefix? "DISPLAY=" <>)
                               (default-environment-variables)))
                 #:log-file
-                (string-append %user-log-dir "/unclutter.log")))))))
+                (string-append %user-log-dir "/unclutter.log"))))
+    (stop #~(make-kill-destructor)))))
 
 (define home-unclutter-service-type
   (service-type

That said, it cannot explain a hang.

Ludo’.