Subject: bug#76998: closed (Re: bug#76998: Guix Home leaves user shepherd on logout, starts new instance on login)

From: [email-masked] (GNU bug Tracking System)
Date: Mon, 16 Jun 2025 13:37:06 +0000

Your bug report

#76998: Guix Home leaves user shepherd on logout, starts new instance on login

which was filed against the guix package, has been closed.

The explanation is attached below, along with your original report.
If you require more details, please reply to [email-masked].

-- 
76998: https://debbugs.gnu.org/cgi/bugreport.cgi?bug=76998
GNU Bug Tracking System
Contact [email-masked] with problems

Subject: Re: bug#76998: Guix Home leaves user shepherd on logout, starts new instance on login
From: Ludovic Courtès <[email-masked]>
To: Tomas Volf <[email-masked]>
Cc: [email-masked], [email-masked], [email-masked], Jake <[email-masked]>, Daniel Littlewood <[email-masked]>, Danny Milosavljevic <[email-masked]>
Date: Mon, 16 Jun 2025 15:28:54 +0200
List-Id: <debbugs-submit.debbugs.gnu.org>

Hi,

Tomas Volf <[email-masked]> writes:

> Well, since you have mentioned the GnuPG as an example, we could just
> mirror what it does, and what I have suggested before.
>
> --8<---------------cut here---------------start------------->8---
> $ mkdir /tmp/xxx && cd /tmp/xxx
> $ guix shell -u test -C findutils gnupg coreutils bash procps -- env HOME=/tmp/xxx GNUPGHOME=/tmp/xxx bash
> test@xx ~ [env]$ gpg-agent --daemon
> gpg-agent[2]: directory '/tmp/xxx/private-keys-v1.d' created
> gpg-agent[3]: gpg-agent (GnuPG) 2.4.7 started
> test@xx ~ [env]$ find /run/user
> /run/user
> /run/user/1000
> /run/user/1000/gnupg
> /run/user/1000/gnupg/d.j1yiifhhjrep9xunazyff54c
> /run/user/1000/gnupg/d.j1yiifhhjrep9xunazyff54c/S.gpg-agent.ssh
> /run/user/1000/gnupg/d.j1yiifhhjrep9xunazyff54c/S.gpg-agent.browser
> /run/user/1000/gnupg/d.j1yiifhhjrep9xunazyff54c/S.gpg-agent.extra
> /run/user/1000/gnupg/d.j1yiifhhjrep9xunazyff54c/S.gpg-agent
> test@xx ~ [env]$ ps aux
> USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
> test         1  0.0  0.0   5136  4068 ?        S    13:32   0:00 bash
> test         3  0.0  0.0   5516  2400 ?        Ss   13:32   0:00 gpg-agent --daemon
> test         5  0.0  0.0   5224  3852 ?        R+   13:32   0:00 ps aux
> test@xx ~ [env]$ rm -r /run/user/1000/gnupg
> gpg-agent[3]: socket file has been removed - shutting down
> gpg-agent[3]: gpg-agent (GnuPG) 2.4.7 stopped
> test@xx ~ [env]$ find /run/user
> /run/user
> /run/user/1000
> test@xx ~ [env]$ ps aux
> USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
> test         1  0.0  0.0   5136  4068 ?        S    13:32   0:00 bash
> test         8  0.0  0.0   5224  3776 ?        R+   13:33   0:00 ps aux
> --8<---------------cut here---------------end--------------->8---
>
> So my suggestion is that when the socket is deleted, the shepherd
> process stops itself.

Brilliant!

The only downside is that it’ll be a bit of work (using inotify on Linux
and some other method elsewhere, presumably polling) but it definitely
sounds like a good plan.

I can look into it later it nobody beats me at it.

Ludo’.

Subject: user shepherd stays around with some zombies
From: [email-masked]
To: Bug Guix <[email-masked]>
Date: Thu, 13 Mar 2025 20:10:36 +0100
List-Id: <debbugs-submit.debbugs.gnu.org>

Steps to reproduce:

1. Log into the console using your regular user
2. Log into GUI using your regular user
3. Log out of GUI
4. Switch to logged-in console
5. Run "px --tree" there
6. Observe the following:

shepherd(1)
   accounts-daemon(1110)
   avahi-daemon:(2443)
     avahi-daemon:(2446)
   bluetoothd(1026)
   colord(25587)
   cupsd(2440)
   dbus-daemon(769)
   dnsmasq(1845)
     dnsmasq(1846)
   earlyoom(744)
   elogind(1024)
   gdm(1038)
   guix-daemon(740)
   libvirtd(1023)
   login(26536)
     -bash(6739)
   mcron(747)
   mingetty... (5×)
   ModemManager(1276)
   NetworkManager(1256)
   nginx:(797)
     nginx:(798)
   nscd(2177)
   polkitd(1231)
   postgres(852)
     postgres:... (6×)
   rasdaemon(796)
   rpc.idmapd(2447)
   rpc.mountd(2501)
   rpc.statd(2444)
   rpcbind(2441)
   shepherd(6395) <--- also dannym
     [dbus-daemon](6397)
     [ssh-agent](6444)
     [xdg-permission-](6411)
     wireplumber(6399)
   shepherd(26114) <--- dannym
     dbus-daemon(6881)
     pipewire(6882)
     pipewire-pulse(6883)
     ssh-agent(6880)
     wireplumber(6888)
     xdg-permission-store(7259)
   udevd(330)
   upowerd(1025)
   virtlogd(742)
   wpa_supplicant(1045)

Those "[...]" with brackets mean that these processes were not reaped 
(so is defunct).

What the hell?

$ guix describe
Generation 194	Mar 13 2025 19:11:33	(current)
   guix 678b3dd
     repository URL: https://git.savannah.gnu.org/git/guix.git
     branch: master
     commit: 678b3dddfe442e643fe5cff7730d4f9690c3e2c2