Es scheint, dass jeder Prozess, der mit der libpulse*-Familie von gemeinsam genutzten Objekten verknüpft ist – entweder vor oder nach dem Ausführen von X und dem i3-Fenstermanager – implizit den PulseAudio-Server unter Ihrem Benutzerprozess automatisch starten kann, als Nebenprodukt von Versuchen, mit dem Audio-Subsystem zu kommunizieren . PulseAudio-Schöpfer Lennart Poettering scheint dies in einer E-Mail vom 29.05.2015 an die systemd-devel-Mailingliste zu bestätigen:
"pulseaudio ist im Allgemeinen kein Systemdienst, sondern ein Benutzerdienst. Sofern Ihre Benutzersitzung nicht vollständig auf die Verwaltung durch systemdtoo umgestellt ist (was unwahrscheinlich ist), ist systemd daher überhaupt nicht am Start beteiligt.
"PA wird normalerweise vom Sitzungs-Setup-Skript oder -Dienst gestartet. In Gnome ist das zum Beispiel gnome-session. Es wird auch automatisch nach Bedarf gestartet, wenn die Bibliotheken verwendet werden und beachten Sie, dass es fehlt."
Unter Debian Stretch (Testing) beispielsweise verlinkt der Webbrowser IceWeasel auf zwei gemeinsam genutzte libpulse*-Objekte:1) libpulsecommon-7.1.so; und 2) libpulse.so.0.18.2:
[email protected]:~$ ps -ef | grep iceweasel
k 17318 1 5 18:58 tty2 00:00:15 iceweasel
k 17498 1879 0 19:03 pts/0 00:00:00 grep iceweasel
[email protected]:~$ sudo pmap 17318 | grep -i pulse
00007fee08377000 65540K rw-s- pulse-shm-2442253193
00007fee0c378000 65540K rw-s- pulse-shm-3156287926
00007fee11d24000 500K r-x-- libpulsecommon-7.1.so
00007fee11da1000 2048K ----- libpulsecommon-7.1.so
00007fee11fa1000 4K r---- libpulsecommon-7.1.so
00007fee11fa2000 8K rw--- libpulsecommon-7.1.so
00007fee121af000 316K r-x-- libpulse.so.0.18.2
00007fee121fe000 2044K ----- libpulse.so.0.18.2
00007fee123fd000 4K r---- libpulse.so.0.18.2
00007fee123fe000 4K rw--- libpulse.so.0.18.2
Sie können sehen, welche laufenden Prozesse mit libpulse* verknüpft sind. Holen Sie sich beispielsweise zuerst eine Liste der gemeinsam genutzten libpulse*-Objekte und führen Sie dann lsof auf jedem aus (Hinweis:dies stammt von Debian Stretch (Testing), daher kann Ihre Ausgabe abweichen):
sudo find / -type f -name "*libpulse*"
*snip*
/usr/lib/x86_64-linux-gnu/pulseaudio/libpulsedsp.so
/usr/lib/x86_64-linux-gnu/pulseaudio/libpulsecommon-7.1.so
/usr/lib/x86_64-linux-gnu/libpulse.so.0.18.2
/usr/lib/x86_64-linux-gnu/libpulse-simple.so.0.1.0
/usr/lib/x86_64-linux-gnu/libpulse-mainloop-glib.so.0.0.5
/usr/lib/libpulsecore-7.1.so
/usr/lib/ao/plugins-4/libpulse.so
sudo lsof /usr/lib/x86_64-linux-gnu/pulseaudio/libpulsecommon-7.1.so
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
gnome-she 864 Debian-gdm mem REG 252,1 524312 274980 /usr/lib/x86_64-linux-gnu/pulseaudio/libpulsecommon-7.1.so
gnome-set 965 Debian-gdm mem REG 252,1 524312 274980 /usr/lib/x86_64-linux-gnu/pulseaudio/libpulsecommon-7.1.so
gnome-set 1232 k mem REG 252,1 524312 274980 /usr/lib/x86_64-linux-gnu/pulseaudio/libpulsecommon-7.1.so
gnome-she 1286 k mem REG 252,1 524312 274980 /usr/lib/x86_64-linux-gnu/pulseaudio/libpulsecommon-7.1.so
chrome 2730 k mem REG 252,1 524312 274980 /usr/lib/x86_64-linux-gnu/pulseaudio/libpulsecommon-7.1.so
pulseaudi 18356 k mem REG 252,1 524312 274980 /usr/lib/x86_64-linux-gnu/pulseaudio/libpulsecommon-7.1.so
Um diesen Prozessen mitzuteilen, dass sie PulseAudio nicht automatisch starten sollen, bearbeiten Sie ~/.config/pulse/client.conf und fügen Sie die Zeile
hinzuautospawn = no
PulseAudio und seine Bibliotheken respektieren diese Einstellung im Allgemeinen.
Die libpulse*-Verknüpfung durch laufende Prozesse kann auch darauf hinweisen, warum PulseAudio so schnell wieder auftaucht. Die FreeDesktop.org-Seite „Running PulseAudio“ scheint dies zu bestätigen:
"...normalerweise wird sich eine Hintergrundanwendung sofort wieder verbinden, was dazu führt, dass der Server sofort neu gestartet wird."
Sie scheinen anzugeben, dass Sie den i3-Fenstermanager über die Konsole starten (indem Sie xinit ausführen) und keinen Display-Manager oder eine Desktop-Umgebung verwenden. Der Rest dieser Antwort enthält Informationen für diejenigen, die GNOME, KDE usw. verwenden.
ZUSÄTZLICHE INFORMATIONEN FÜR GNOME/KDE AUTOSTART
Das Paket PulseAudio (5.0-13) in Debian Jessie (Stable) amd64 installiert die folgenden vier Systemdateien:
- /etc/xdg/autostart/pulseaudio-kde.desktop
- /etc/xdg/autostart/pulsaudio.desktop
- /usr/bin/start-pulsaudio-x11
- /usr/bin/start-pulsaudio-kde
Einige grafische Sitzungsmanager führen automatisch FreeDesktop.org-Autostart-Skripte bei der Benutzeranmeldung aus. Das PulseAudio-Autostart-Skript wiederum weist grafische Sitzungsmanager an, das entsprechende PulseAudio-Startskript auszuführen:
/usr/bin/start-pulseaudio-x11
/usr/bin/start-pulseaudio-kde
Diese Skripte rufen den PulseAudio-Client /usr/bin/pactl auf, um PulseAudio-Module zu laden, die den PulseAudio-Server als Nebenprodukt spawnen (Hinweis:Wenn Sie Autospawn auf „no“ gesetzt haben, respektiert pactl dies und wird nicht Autospawn-PulseAudio-Server).
Weitere Einzelheiten finden Sie auf der FreeDesktop.org-Seite "Running PulseAudio".
Einige Anzeigemanager können zusätzlich und in anderen Distributionen PulseAudio starten (z. B. SDDM unter ArchLinux. Obwohl die Betreuer dies möglicherweise inzwischen behoben haben).
Wie startet PulseAudio?
Während dies immer noch eine gültige Frage ist, hat sich die Antwort darauf im Laufe der Zeit geändert. Die vorherigen Antworten sind entweder unzureichend oder falsch, da PulseAudio jetzt automatisch vom systemd des Benutzers gestartet wird, der wiederum vom systemd des Systems gestartet wurde, als sich der Benutzer anmeldete.
$ systemctl --user status pulseaudio
● pulseaudio.service - Sound Service
Loaded: loaded (/usr/lib/systemd/user/pulseaudio.service; enabled; vendor pre
Active: active (running) since Tue 2020-03-14 15:29:56 ZULU; 13s ago
Main PID: 31080 (pulseaudio)
CGroup: /user.slice/user-1000.slice/[email protected]/pulseaudio.service
├─31080 /usr/bin/pulseaudio --daemonize=no
└─31081 /usr/lib/x86_64-linux-gnu/pulse/gsettings-helper
Um PulseAudio zu beenden
Um den PulseAudio-Prozess zu stoppen und nicht sofort eine neue Instanz zu starten, verwenden Sie systemctl --user stop
:
$ systemctl --user stop pulseaudio.service pulseaudio.socket
Zum Deaktivieren von PulseAudio
Wenn Sie nicht möchten, dass PulseAudio beim Einloggen automatisch startet, können Sie es folgendermaßen deaktivieren:
$ systemctl --user disable pulseaudio.service pulseaudio.socket
(Übrigens, auch wenn es deaktiviert ist, können Sie PulseAudio immer noch starten, wenn Sie es wollen, indem Sie systemctl --user start
verwenden .)
Allgemeine Beantwortung der Frage
Die obigen Befehle sind alles, was Sie brauchen. Wenn Sie jedoch daran interessiert sind, wie Sie die Lösung selbst finden können, lesen Sie weiter.
Um herauszufinden, welche Prozesse die Soundkarte geöffnet haben
Verwenden Sie entweder den lsof
oder fuser -v
Befehle, um zu sehen, welche Prozesse die Gerätedateien geöffnet haben.
$ lsof /dev/snd/*
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
pulseaudi 32768 hackerb9 3u CHR 116,5 0t0 15499 /dev/snd/controlC0
Um herauszufinden, welcher Prozess PulseAudio gestartet hat
Verwenden Sie pstree -s
um die übergeordneten Prozesse so anzuzeigen:
$ pstree -sp 32768
systemd(1)───systemd(738)───pulseaudio(32768)─┬─gsettings-helpe(32769)─┬─{gsett+
│ ├─{gsett+
│ └─{gsett+
└─{pulseaudio}(32773)
Ich habe das verwendet, um zu sehen, dass PulseAudio tatsächlich von einer Instanz von systemd
gestartet wurde (PID 738), die in meinem eigenen Konto lief:
$ ps -fp 738
UID PID PPID C STIME TTY TIME CMD
hackerb9 738 1 0 Feb10 ? 00:00:00 /lib/systemd/systemd --user
Von dort ist es leicht zu erraten, dass man systemctl --user
verwenden muss um es zu stoppen.
Pulsaudio ist ein kleiner Dämon. man pulseaudio
sagt, dass Sie es mit dem Befehl pulseaudio --kill
ausschalten können aber das erfordert eine erneute Wiedergeburt – es respawnt von selbst. Ein normales Init-Skript ist da, um es beim Booten zu starten, /etc/rc2.d/S50pulseaudio
. Aber wenn Sie versuchen, dies auf die normale Linux-Weise zu steuern, funktioniert es nicht, weil /etc/init.d/pulseaudio stop
ausgeführt wird hält es nicht auf. Entfernen von /etc/rc2.d/S50pulseaudio
verhindert nicht, dass es beim Booten startet.
Um seine Respawn-Gewohnheit zu stoppen, öffnen Sie /etc/pulse/client.conf
, ändern Sie autospawn = yes
bis autospawn = no
, und setze daemon-binary auf /bin/true
. Stellen Sie sicher, dass diese Zeilen unkommentiert sind, etwa so:
autospawn = no
daemon-binary = /bin/true
Jetzt können wir uns mit den normalen Linux-Startdateien befassen. Löschen Sie zuerst /etc/rc2.d/S50pulseaudio
. Oder Sie können es in einen Kill-Befehl umbenennen, der den Link bewahrt, falls Sie ihn jemals wieder brauchen:
$ mv /etc/rc2.d/S50pulseaudio /etc/rc2.d/K50pulseaudio
ODER
Es kann eine weitere Startdatei geben, auf die verzichtet werden muss:/etc/X11/Xsession.d/70pulseaudio
. Dadurch wird Pulse gestartet, wenn eine Gnome-Sitzung beginnt. Löschen Sie es oder kopieren Sie es in ein anderes Verzeichnis, falls Sie es speichern möchten, und überprüfen Sie erneut den genauen Dateinamen. Ein nützlicher Trick, wenn Sie Skripte finden, die PulseAudio starten, besteht darin, die von ihnen aufgerufene Binärdatei von /usr/bin/pulseaudio
zu ändern bis /bin/true
. Dies ist eine nette kleine ausführbare Datei, deren einzige Aufgabe darin besteht, "erfolgreich nichts zu tun". Es hält die Skripte glücklich und ist ein praktischer Platzhalter, wenn Sie es jemals wieder ändern möchten.
Nachdem Sie nun alle Start- und Respawn-Skripte gelöscht haben, verwenden Sie jetzt die folgenden Befehle, um das Pulsaudio zu stoppen und zu starten.
$ pulseaudio --kill
$ pulseaudio --start