Hi Danny, Danny Milosavljevic <[email protected]> skribis:
> I would suggest the following: > > (1) For Guix native, patch elogind[i] to also kill -TERM shepherd > (See user_stop_service--which is for that). > How does it find the shepherd process, specifically? I think ‘user_stop_service’ could run: herd stop root -s /run/user/$UID/shepherd/socket > So elogind probably could also start > > /run/current-system/profile/bin/shepherd > (with which config?) > > on first user session login (and remember its pid) > (See user_start_service--which is for that, anyway). Oh yes, that too. > (2) When a foreign distro uses systemd (there's a very high chance it > does), then we can just install shepherd as a systemd user unit > (from guix-install.sh). systemd will do the right thing, the end. I wouldn’t do it from ‘guix-install.sh’ because it only makes sense if you’re going to use Guix Home; and if you use Guix Home, it has its own way of starting shepherd. > (3) Maybe use .bash_logout and have it invoke "w" (or "loginctl") to see > whether we are the last session of that user (that would have a race...). > If we are, then kill shepherd. Yes. Question is how to keep Home portable between Guix and foreign distros. Neither the elogind nor the systemd approach are portable; the ‘.bash_logout’ thing may be portable, but it’s probably more fragile. Maybe we shouldn’t try to be portable, and first start by fixing the problem on Guix System? > What about shepherd's child processes (for example services)? > Will shepherd clean those up on shepherd termination? Yes: if you ‘herd stop root’ or send SIGTERM to shepherd, it will shut down all the services properly. Thanks, Ludo’.
