Come si avvia PulseAudio?


16

PulseAudio è sempre in esecuzione sul mio sistema e si riavvia sempre all'istante se si blocca o lo uccido. Tuttavia, non ho mai avviato PulseAudio.

Ho controllato /etc/init.d/e/etc/X11/Xsession.d/ , ho controllato systemctl list-units -a, e PulseAudio non si trova da nessuna parte.

Come mai PulseAudio sembra iniziare magicamente da solo senza che io mai lo esegua, e come si riavvia immediatamente quando muore?

Sto usando Debian 8 (jessie) con xinit e i3 window manager e PulseAudio 5.

Risposte:


14

Sembra che qualsiasi processo collegato alla famiglia di oggetti condivisi libpulse * - prima o dopo l'esecuzione di X e il gestore di finestre i3 - possa implicitamente generare automaticamente il server PulseAudio, sotto il processo dell'utente, come sottoprodotto di tentativi di interfaccia con il sottosistema audio . Il creatore di PulseAudio Lennart Poettering sembra confermarlo, in una e-mail del 2015-05-29 alla mailing list systemd-devel :

"pulseaudio non è generalmente un servizio di sistema ma un servizio utente. A meno che la sessione dell'utente non sia completamente convertita per essere gestita anche da systemd (il che è improbabile) systemd non è quindi coinvolto affatto con l'avvio.

"La PA di solito viene avviata dallo script o dal servizio di installazione della sessione. In Gnome, ad esempio, questa è gnome-session. Inoltre, viene generata automaticamente su richiesta se si utilizzano le librerie e si noti che manca."

Ad esempio, su Debian Stretch (Testing), il browser IceWeasel si collega a due oggetti condivisi libpulse *: 1) libpulsecommon-7.1.so; e 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

Potresti vedere quali processi in esecuzione si collegano a libpulse *. Ad esempio, prima ottieni un elenco di oggetti condivisi libpulse *, quindi esegui lsof su ciascuno (nota: questo proviene da Debian Stretch (Test), quindi il tuo output potrebbe differire):

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

Per dire a questi processi di non riprodurre automaticamente PulseAudio, modificare ~ / .config / pulse / client.conf e aggiungere la riga

autospawn = no

PulseAudio e le sue librerie rispettano tale impostazione, in generale.

Il collegamento libpulse * eseguito dai processi può anche indicare perché PulseAudio si rigeneri così rapidamente. La pagina di FreeDesktop.org, " Running PulseAudio ", sembra confermare questo:

"... in genere alcune applicazioni in background si riconnetteranno immediatamente, causando il riavvio immediato del server."

Sembra che indichi di avviare i3 window manager tramite la console (eseguendo xinit) e di non utilizzare un display manager o un ambiente desktop. Il resto di questa risposta contiene informazioni dettagliate per coloro che usano GNOME, KDE e così via.

INFORMAZIONI AGGIUNTIVE, PER GNOME / KDE AUTOSTART

Il pacchetto PulseAudio (5.0-13), in Debian Jessie (Stable) amd64, installa i seguenti quattro file di sistema :

  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

Alcuni gestori di sessioni grafiche eseguono automaticamente gli script di avvio automatico di FreeDesktop.org all'accesso dell'utente. Lo script di avvio automatico PulseAudio, a sua volta, dice ai gestori di sessioni grafiche di eseguire lo script di avvio PulseAudio appropriato:

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

Questi script chiamano il client PulseAudio / usr / bin / pactl per caricare i moduli PulseAudio, che generano il server PulseAudio come sottoprodotto (nota: se il sistema autospawn è impostato su "no", Pactl rispetta quello e non crea automaticamente il server PulseAudio).

Maggiori dettagli, nella pagina di FreeDesktop.org " Running PulseAudio ".

Alcuni gestori di display, in aggiunta e in altre distribuzioni, possono avviare PulseAudio (ad esempio, SDDM, su ArchLinux . Anche se i manutentori potrebbero averlo risolto, ormai).


4

Pulseaudio è un piccolo demone. man pulseaudiodice che puoi disattivarlo con il comando, pulseaudio --killma farlo richiede di nuovo la rinascita, si rigenererà. Uno script di init normale è lì per avviarlo all'avvio,/etc/rc2.d/S50pulseaudio . Ma quando provi a controllarlo nel normale modo Linux non funziona, perché l'esecuzione /etc/init.d/pulseaudio stopnon lo ferma. La rimozione /etc/rc2.d/S50pulseaudionon impedisce l'avvio all'avvio.

Per interrompere la sua abitudine di rigenerazione, apri /etc/pulse/client.conf, modifica autospawn = yesin autospawn = noe imposta daemon-binary su/bin/true . Assicurati che queste righe siano senza commenti, in questo modo:

 autospawn = no
 daemon-binary = /bin/true

Ora possiamo occuparci dei normali file di avvio di Linux. Prima elimina/etc/rc2.d/S50pulseaudio . Oppure puoi rinominarlo in un comando kill, che conserva il collegamento nel caso in cui lo desideri mai più:

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

O

Ci può essere un file di avvio più fare a meno: /etc/X11/Xsession.d/70pulseaudio. Questo avvia Pulse quando inizia una sessione di Gnome. Eliminarlo o copiarlo in un'altra directory nel caso in cui si desideri salvarlo e verificare nuovamente il nome esatto del file. Un trucco utile, quando si trova script che iniziano PulseAudio, è quello di cambiare il binario che chiamano da /usr/bin/pulseaudioa /bin/true. Questo è un piccolo eseguibile il cui unico compito è "non fare nulla, con successo". Mantiene felici gli script ed è un comodo segnaposto se mai vuoi cambiarlo.

Ora che hai eliminato tutti gli script di avvio e di rigenerazione, ora utilizza i comandi seguenti per interrompere e avviare l'audio del polso.

 $ pulseaudio --kill
 $ pulseaudio --start

1
Aiuta un po ', ma in realtà non risponde affatto alla domanda. Non ho ancora idea di come / dove / perché PulseAudio si avvia inizialmente sul mio sistema. Debian 8 usa systemd e, come ho già detto systemctl list-units -a, non include PulseAudio. xinit lancia gli script da /etc/X11/Xsession.de, come detto, non include neanche PulseAudio.
Hubro,

qual è il processo genitore per il tuo processo pulseaudio?
Thushi,

1
Il testo di questa risposta sembra provenire da un articolo del 2010, di Carla Schroder: linuxplanet.com/linuxplanet/tutorials/7130/2 . Le istruzioni non si applicano più a Debian Jessie e PulseAudio (5.0-13).
iokevins,

0

La risposta data da Thushi / Carla Schroder (vedi la prossima risposta) funziona ancora bene dopo un aggiornamento da Debian Wheezy a Jessie. Ho ricevuto il seguente errore dopo aver cercato i miei messaggi di avvio (l'errore è elencato nell'ultima riga).

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.

pulseaudio-daemon è stato avviato due volte. Una volta dal demone rtkit e le altre volte da GNOME / KDE AUTOSTART o da un'altra app. Ad ogni modo impostazione in /etc/pulse/client.conf

autospawn = no
daemon-binary = /bin/true

risolto il mio problema L'unica cosa che non posso confermare è che non ci sono più script di avvio in nessuna directory /etc/rcX.d. Abbastanza chiaro perché rtkit-daemon fa il lavoro con l'interazione di systemd.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.