Wie startet PulseAudio?

15

PulseAudio läuft immer auf meinem System und startet immer sofort neu, wenn es abstürzt oder ich es töte. Allerdings habe ich nie wirklich beginnen Pulseaudio.

Ich habe /etc/init.d/und überprüft und /etc/X11/Xsession.d/ich habe überprüft systemctl list-units -aund PulseAudio ist nirgends zu finden.

Wie kommt es, dass PulseAudio scheinbar von alleine startet, ohne dass ich es jemals laufen lasse, und wie startet es sofort neu, wenn es stirbt?

Ich benutze Debian 8 (jessie) mit xinit und dem i3-Fenstermanager sowie PulseAudio 5.

Hubro
quelle

Antworten:

13

Es scheint, dass jeder Prozess, der mit der libpulse * -Familie gemeinsam genutzter Objekte verknüpft ist - entweder vor oder nach dem Ausführen von X und dem i3-Fenstermanager - den PulseAudio-Server unter Ihrem Benutzerprozess implizit als Nebeneffekt von Schnittstellenversuchen mit dem Audiosubsystem erscheinen lässt . PulseAudio-Ersteller Lennart Poettering scheint dies in einer E-Mail vom 29.05.2015 an die systemd-devel-Mailingliste zu bestätigen :

"pulseaudio ist in der Regel kein Systemdienst, sondern ein Benutzerdienst. Sofern Ihre Benutzersitzung nicht vollständig so konvertiert ist, dass sie auch von systemd verwaltet wird (was unwahrscheinlich ist), ist systemd daher überhaupt nicht am Starten beteiligt.

"PA wird normalerweise über das Sitzungs-Setup-Skript oder den Sitzungs-Setup-Dienst gestartet. In Gnome ist dies beispielsweise eine Gnome-Sitzung. Es wird auch automatisch bei Bedarf erstellt, wenn die Bibliotheken verwendet werden und es fehlt."

Unter Debian Stretch (Testing) verlinkt der Webbrowser IceWeasel beispielsweise auf zwei gemeinsam genutzte Objekte von libpulse *: 1) libpulsecommon-7.1.so; und 2) libpulse.so.0.18.2:

k@bucket:~$ 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
k@bucket:~$ 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

Möglicherweise sehen Sie, welche laufenden Prozesse mit libpulse * verknüpft sind. Holen Sie sich zum Beispiel zuerst eine Liste mit gemeinsam genutzten libpulse * -Objekten und führen Sie dann lsof für jedes Objekt aus (Anmerkung: 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

Bearbeiten Sie die Datei ~ / .config / pulse / client.conf und fügen Sie eine Zeile hinzu, damit diese Prozesse PulseAudio nicht automatisch erzeugen

autospawn = no

PulseAudio und seine Bibliotheken respektieren diese Einstellung im Allgemeinen.

Die libpulse * -Verknüpfung durch laufende Prozesse zeigt möglicherweise auch an, warum PulseAudio so schnell neu gestartet wird. Die FreeDesktop.org-Seite " Ausführen von PulseAudio " scheint dies zu bestätigen:

msgstr "... normalerweise wird eine Hintergrundanwendung sofort wieder verbunden, wodurch 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 keine Desktop-Umgebung verwenden. Der Rest dieser Antwort enthält Informationen zu denjenigen, 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 :

  1. /etc/xdg/autostart/pulseaudio-kde.desktop
  2. /etc/xdg/autostart/pulseaudio.desktop
  3. / usr / bin / start-pulseaudio-x11
  4. / usr / bin / start-pulseaudio-kde

Einige grafische Sitzungsmanager führen bei der Benutzeranmeldung automatisch FreeDesktop.org-Autostartskripte aus . Das Autostart-Skript von PulseAudio weist grafische Sitzungsmanager an, das entsprechende PulseAudio-Startskript auszuführen:

/usr/bin/start-pulseaudio-x11
/usr/bin/start-pulseaudio-kde

Diese Skripte rufen Pulseaudio Client / usr / bin / PACTL Pulseaudio - Module zu laden, die Ausgeburten der Pulseaudio - Server als Neben (Anmerkung: wenn Sie autospawn auf „Nein“, PACTL Hinsicht haben das und werden nicht autospawn Pulseaudio - Server).

Weitere Informationen finden Sie auf der FreeDesktop.org-Seite " Ausführen von PulseAudio ".

Einige Display-Manager sowie andere Distributionen starten möglicherweise PulseAudio (z. B. SDDM unter ArchLinux . Möglicherweise haben die Maintainer dies inzwischen behoben).

iokevins
quelle
4

Pulseaudio ist ein kleiner Daemon. man pulseaudiosagt, dass Sie es mit dem Befehl ausschalten können, pulseaudio --killaber wenn Sie dies tun, wird die Wiedergeburt wieder aufgenommen - es erscheint von selbst wieder. Ein normales Init-Skript ist dazu da, um es beim Booten zu starten /etc/rc2.d/S50pulseaudio. Aber wenn Sie versuchen, dies auf die normale Linux-Art zu steuern, funktioniert es nicht, weil das Ausführen /etc/init.d/pulseaudio stopes nicht stoppt. Das Entfernen /etc/rc2.d/S50pulseaudioverhindert nicht, dass es beim Booten gestartet wird.

Öffnen Sie /etc/pulse/client.conf, ändern Sie autospawn = yeszu autospawn = nound setzen Sie daemon-binary auf , um die Gewohnheit des Wiederaufwachens zu beenden /bin/true. Stellen Sie sicher, dass diese Zeilen nicht kommentiert sind:

 autospawn = no
 daemon-binary = /bin/true

Jetzt können wir mit den normalen Linux-Startdateien umgehen. Zuerst löschen /etc/rc2.d/S50pulseaudio. Oder Sie benennen es in einen Kill-Befehl um, der die Verknüpfung für den Fall beibehält, dass Sie sie jemals wieder benötigen:

$ mv /etc/rc2.d/S50pulseaudio /etc/rc2.d/K50pulseaudio

ODER

Es kann eine weitere Startdatei sein mit verzichten: /etc/X11/Xsession.d/70pulseaudio. Dies startet Pulse, wenn eine Gnome-Sitzung gestartet wird. 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 beim Auffinden von Skripten, die PulseAudio starten, ist das Ändern der von ihnen aufgerufenen Binärdatei /usr/bin/pulseaudioin /bin/true. Dies ist eine nette kleine ausführbare Datei, deren einzige Aufgabe darin besteht, "nichts erfolgreich zu machen". Es hält die Skripte bei Laune und ist ein praktischer Platzhalter, wenn Sie sie jemals wieder ändern möchten.

Nachdem Sie alle Start- und Respawn-Skripte gelöscht haben, können Sie mit den folgenden Befehlen den Puls-Audio-Vorgang stoppen und starten.

 $ pulseaudio --kill
 $ pulseaudio --start
Thushi
quelle
1
Es hilft ein wenig, aber es beantwortet die Frage überhaupt nicht wirklich. Ich habe noch keine Ahnung, wie / wo / warum PulseAudio auf meinem System gestartet wird. Debian 8 verwendet systemd und enthält, wie gesagt, systemctl list-units -aPulseAudio nicht. xinit startet Skripte von /etc/X11/Xsession.dund enthält, wie bereits erwähnt, auch PulseAudio nicht.
Hubro
Was ist der übergeordnete Prozess für Ihren Pulseaudio-Prozess?
Thushi
1
Der Text dieser Antwort scheint aus einem Artikel von Carla Schroder aus dem Jahr 2010 zu stammen: linuxplanet.com/linuxplanet/tutorials/7130/2 . Die Anweisungen scheinen nicht mehr für Debian Jessie und PulseAudio (5.0-13) zu gelten.
iokevins
0

Die Antwort von Thushi / Carla Schroder (siehe nächste Antwort) funktioniert auch nach einem Upgrade von debian wheezy auf jessie noch einwandfrei. Ich habe folgende Fehlermeldung erhalten, nachdem ich meine Boot-Meldungen überprüft habe (der Fehler ist in der letzten Zeile aufgeführt).

root@voylinx:/etc#journalctl -b | grep pulseaudio
Dez 31 16:19:46 voylinx rtkit-daemon[1507]: Successfully made thread 1506 of process 1506 (/usr/bin/pulseaudio) owned by '1000' high priority at nice level -11.
Dez 31 16:19:49 voylinx rtkit-daemon[1507]: Successfully made thread 1526 of process 1506 (/usr/bin/pulseaudio) owned by '1000' RT at priority 5.
Dez 31 16:19:49 voylinx rtkit-daemon[1507]: Successfully made thread 1527 of process 1506 (/usr/bin/pulseaudio) owned by '1000' RT at priority 5.
Dez 31 16:19:49 voylinx rtkit-daemon[1507]: Successfully made thread 1528 of process 1506 (/usr/bin/pulseaudio) owned by '1000' RT at priority 5.
Dez 31 16:19:49 voylinx rtkit-daemon[1507]: Successfully made thread 1533 of process 1506 (/usr/bin/pulseaudio) owned by '1000' RT at priority 5.
Dez 31 16:19:50 voylinx rtkit-daemon[1507]: Successfully made thread 1548 of process 1548 (/usr/bin/pulseaudio) owned by '1000' high priority at nice level -11.
Dez 31 16:19:50 voylinx pulseaudio[1548]: [pulseaudio] pid.c: Daemon already running.

Der pulseaudio-daemon wurde zweimal gestartet. Einmal vom rtkit-Daemon und ein anderes Mal von GNOME / KDE AUTOSTART oder einer anderen App. Wie auch immer Einstellung in /etc/pulse/client.conf

autospawn = no
daemon-binary = /bin/true

mein problem gelöst. Das Einzige, was ich nicht bestätigen kann, ist, dass sich in den Verzeichnissen /etc/rcX.d keine Startskripte mehr befinden. Ziemlich klar, weil der rtkit-Daemon die Arbeit mit der Interaktion von systemd erledigt.

FalkH
quelle