GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Wie startet PulseAudio?

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

hinzu
autospawn = 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:

  1. /etc/xdg/autostart/pulseaudio-kde.desktop
  2. /etc/xdg/autostart/pulsaudio.desktop
  3. /usr/bin/start-pulsaudio-x11
  4. /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

Linux
  1. Wie funktioniert Awk ‘!a[$0]++’?

  2. Wie funktioniert das Sticky Bit?

  3. Wie erstelle ich einen virtuellen Ausgang in Pulsaudio?

  4. Wie funktioniert der Tee-Befehl?

  5. Jack Vs Pulsaudio – Wie geht es schneller?

So starten, stoppen oder starten Sie Apache neu

So starten, stoppen oder starten Sie Nginx neu

So starten Sie TeamViewer unter Debian 11

Wie funktioniert Swap-Speicher in Linux?

Wie funktioniert sig_atomic_t eigentlich?

Wie starte ich einen Android-Emulator in Ubuntu 16.04?