View previous topic :: View next topic |
Author |
Message |
dmpogo Advocate
Joined: 02 Sep 2004 Posts: 3414 Location: Canada
|
Posted: Sat Aug 24, 2024 2:54 am Post subject: How to shut off pipewire/wireplumber cleanly ? |
|
|
Here is another twist: when I run a kde, pipewire/wireplumber starts somehow run under my name as user. Now I exit the desktop, stop display-manager, pipewire/wireplumber is still running.
Given that this is not an init service, what is the proper way to shut them off, outside of kill -9 which is a crude way ?
Why do I need it? I want to unmount /home partition to do some filesystem maintenance. Wireplumber/pipewire are the only processes that keep /home busy after I close kde and switch to console |
|
Back to top |
|
|
Zucca Moderator
Joined: 14 Jun 2007 Posts: 3685 Location: Rasi, Finland
|
Posted: Sat Aug 24, 2024 8:10 am Post subject: |
|
|
I have (had) pretty much the same problem. In my case I needed to umount tmpfs mounts for users who have logged out and do not have any process running that is connected to any tty.
My, crude, solution is to basically run the following Code: | pgrep -u "$USER" -x 'pipewire|wireplumber' 1>/dev/null 2>&1 && pkill -u "$un" -x 'pipewire|wireplumber' | although Code: | pkill -u "$un" -x 'pipewire|wireplumber' | alone should be enough.
The interesting thing with pipewire (and wireplumber) is that upon logging out, those processes do sometimes stop, but sometimes (seems like more often) they continue running in the background. I haven't had time to investigate that, hence the crude way of using pkill. _________________ ..: Zucca :..
My gentoo installs: | init=/sbin/openrc-init
-systemd -logind -elogind seatd |
Quote: | I am NaN! I am a man! |
|
|
Back to top |
|
|
dmpogo Advocate
Joined: 02 Sep 2004 Posts: 3414 Location: Canada
|
Posted: Sat Aug 24, 2024 8:19 am Post subject: |
|
|
Right, I'll of course pkill for now, but overall it looks like misdesign. After a user is logged out, no user owned processes should be left behind. I did not even think how ugly it is on a multiuser shared machines, if there are still user processes running after the user is gone. |
|
Back to top |
|
|
Hu Administrator
Joined: 06 Mar 2007 Posts: 22601
|
Posted: Sat Aug 24, 2024 1:44 pm Post subject: |
|
|
I suspect this is unfortunate fallout of systemd's misfeature KillUserProcesses (see man logind.conf). On systems where systemd-logind (or equivalent) has that enabled, these orphans are automatically killed off, so there is no pressure on the developer to ensure it exits properly at the right time. On systems without that automated kill, the developer needs to get this right. |
|
Back to top |
|
|
Zucca Moderator
Joined: 14 Jun 2007 Posts: 3685 Location: Rasi, Finland
|
Posted: Sat Aug 24, 2024 2:36 pm Post subject: |
|
|
Hu wrote: | I suspect this is unfortunate fallout of systemd's misfeature KillUserProcesses | I wonder how this is handled when this setting is set to no/false? Is pipewire still left running?
(I also wonder if that setting still kills any terminal multiplexer sessions the user has running...)
I've implemented something close to KillUserProcesses, but it checks if any program is connected to a tty or if the binary has 'tmux' in their filename, then acts accordingly.
I think this is "best at the moment" what I could came up with. _________________ ..: Zucca :..
My gentoo installs: | init=/sbin/openrc-init
-systemd -logind -elogind seatd |
Quote: | I am NaN! I am a man! |
|
|
Back to top |
|
|
Hu Administrator
Joined: 06 Mar 2007 Posts: 22601
|
Posted: Sat Aug 24, 2024 3:19 pm Post subject: |
|
|
The manual page specifically warns: Code: | Note that setting KillUserProcesses=yes will break tools like
screen(1) and tmux(1), unless they are moved out of the session
scope. | So yes, either the user needs to remind systemd not to kill them, or those tools need special handling to inform systemd not to kill them.
As for whether pipewire remains running, I do not know. I have never needed more than basic ALSA, so I do not have pipewire running. |
|
Back to top |
|
|
dmpogo Advocate
Joined: 02 Sep 2004 Posts: 3414 Location: Canada
|
Posted: Sat Aug 24, 2024 4:21 pm Post subject: |
|
|
Zucca wrote: | Hu wrote: | I suspect this is unfortunate fallout of systemd's misfeature KillUserProcesses | I wonder how this is handled when this setting is set to no/false? Is pipewire still left running?
(I also wonder if that setting still kills any terminal multiplexer sessions the user has running...)
I've implemented something close to KillUserProcesses, but it checks if any program is connected to a tty or if the binary has 'tmux' in their filename, then acts accordingly.
I think this is "best at the moment" what I could came up with. |
It is an interesting situation overall. In principle, there are reasons for some user processes to be left running after logout. First of all, it may be their own code computing something for days All our favourite "nohup" options (by the way how systemd KillUserProcesses interact with nohup ? ) Then screen or tmux, and, similarly, I have for years Xvnc running on my office desktop for access, logged in or not. So KillUserProcesses cannot be used lightly or blindly, but at least it is some configuration option to impose a particular behaviour. I guess with openrc we have no control? Should it be elogind job ?
Now when piperwire will be used for the desktop sharing, one may, presumably want an instance running in the role of Xvnc ? But for now it seems closer in scope to X running as user or windowing (kwin) desktop service that should quit with the desktop session.
It is interesting since we have years of discussion and design of seats, sessions paradigm, etc, beyond standard UNIX multiuser setup, and it is still convoluted.
Now looking in more detail, I see that in case of KDE wireplumber is one of childs of plasma_session, so one would think it is plasma_session job to clean up on exit, or to have a configuration option whether to shutdown wireplumber |
|
Back to top |
|
|
Hu Administrator
Joined: 06 Mar 2007 Posts: 22601
|
Posted: Sat Aug 24, 2024 4:53 pm Post subject: |
|
|
I think elogind can also implement KillUserProcesses, yes. I completely agree that summarily killing all user processes is wrong, because as you say, there are processes where it makes sense to leave them around for later.
My earlier comment was speculating that wireplumber gets this wrong because, on systems that use KillUserProcesses=true, the forced kill cleans up the wireplumber, so the developers involved did not see a reason to include code to cause wireplumber to exit gracefully on logout. It's also possible that wireplumber is lingering because it believes (possibly correctly, possibly not) that some client process is still using it, and that you need it to remain so that you can continue to get sound after logout. |
|
Back to top |
|
|
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
|