Sembra che qualsiasi processo che si collega alla famiglia libpulse* di oggetti condivisi, prima o dopo l'esecuzione di X e del gestore di finestre i3, possa implicitamente generare automaticamente il server PulseAudio, sotto il tuo processo utente, come sottoprodotto di tentativi di interfacciarsi con il sottosistema audio . Il creatore di PulseAudio Lennart Poettering sembra confermarlo, in un'e-mail del 29-05-2015 alla mailing list systemd-devel:
"pulseaudio generalmente non è un servizio di sistema ma un servizio utente. A meno che la tua sessione utente non sia completamente convertita per essere gestita da systemdtoo (cosa improbabile) systemd non è quindi coinvolto nel suo avvio.
"PA di solito viene avviato dallo script o dal servizio di configurazione della sessione. InGnome è gnome-session, ad esempio. Viene anche generato automaticamente su richiesta se vengono utilizzate le librerie e nota che manca."
Ad esempio, su Debian Stretch (Testing), il browser web IceWeasel si collega a due oggetti condivisi libpulse*:1) libpulsecommon-7.1.so; e 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
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 viene da Debian Stretch (Testing), quindi il tuo output potrebbe essere diverso):
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 generare automaticamente PulseAudio, modifica ~/.config/pulse/client.conf e aggiungi la riga
autospawn = no
PulseAudio e le sue librerie rispettano tale impostazione, in generale.
Il collegamento libpulse* tramite processi in esecuzione può anche indicare perché PulseAudio si rigenera così rapidamente. La pagina di FreeDesktop.org, "Running PulseAudio", sembra confermarlo:
"...in genere alcune applicazioni in background si ricollegheranno immediatamente, provocando il riavvio immediato del server."
Sembra che tu indichi di avviare il window manager i3 tramite la console (eseguendo xinit) e di non utilizzare un display manager o un ambiente desktop. Il resto di questa risposta fornisce informazioni dettagliate per coloro che utilizzano 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:
- /etc/xdg/autostart/pulseaudio-kde.desktop
- /etc/xdg/autostart/pulseaudio.desktop
- /usr/bin/start-pulseaudio-x11
- /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 di PulseAudio, a sua volta, indica ai gestori delle sessioni grafiche di eseguire lo script di avvio di 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 hai impostato l'autospawn su "no", pactl lo rispetta e non autospawn server PulseAudio).
Più in dettaglio, alla pagina di FreeDesktop.org "Running PulseAudio".
Alcuni display manager, inoltre e in altre distribuzioni, possono avviare PulseAudio (ad esempio, SDDM, su ArchLinux. Anche se i manutentori potrebbero aver risolto questo problema, ormai).
Come inizia PulseAudio?
Sebbene questa sia ancora una domanda valida, la risposta è cambiata nel tempo. Le risposte precedenti sono insufficienti o errate poiché ora PulseAudio viene avviato automaticamente dal systemd dell'utente, che a sua volta è stato avviato dal systemd del sistema quando l'utente ha effettuato l'accesso.
$ 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
Per uccidere PulseAudio
Per interrompere il processo PulseAudio e fare in modo che non avvii immediatamente una nuova istanza, usa systemctl --user stop
:
$ systemctl --user stop pulseaudio.service pulseaudio.socket
Per disabilitare PulseAudio
Se non desideri che PulseAudio si avvii automaticamente all'accesso, puoi disabilitarlo in questo modo:
$ systemctl --user disable pulseaudio.service pulseaudio.socket
(A proposito, anche con esso disabilitato, puoi comunque avviare PulseAudio quando vuoi usando systemctl --user start
.)
Rispondere alla domanda in generale
I comandi sopra sono tutto ciò di cui hai bisogno. Tuttavia, se sei interessato a scoprire da solo la soluzione, continua a leggere.
Per scoprire quali processi hanno la scheda audio aperta
Usa il lsof
o fuser -v
comandi per vedere quali processi hanno i file del dispositivo aperti.
$ 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
Per scoprire quale processo ha avviato PulseAudio
Usa pstree -s
per mostrare i processi padre in questo modo:
$ pstree -sp 32768
systemd(1)───systemd(738)───pulseaudio(32768)─┬─gsettings-helpe(32769)─┬─{gsett+
│ ├─{gsett+
│ └─{gsett+
└─{pulseaudio}(32773)
L'ho usato per vedere che PulseAudio veniva effettivamente lanciato da un'istanza di systemd
(PID 738) che era in esecuzione nel mio account:
$ ps -fp 738
UID PID PPID C STIME TTY TIME CMD
hackerb9 738 1 0 Feb10 ? 00:00:00 /lib/systemd/systemd --user
Da lì, è facile intuire che è necessario utilizzare systemctl --user
per fermarlo.
Pulseaudio è un piccolo demone. man pulseaudio
dice che puoi disattivarlo con il comando pulseaudio --kill
ma farlo prende di nuovo la rinascita, si rigenera da solo. C'è un normale script init per avviarlo all'avvio, /etc/rc2.d/S50pulseaudio
. Ma quando provi a controllarlo nel modo normale di Linux, non funziona, perché l'esecuzione di /etc/init.d/pulseaudio stop
non lo ferma. Rimozione di /etc/rc2.d/S50pulseaudio
non ne impedisce l'avvio all'avvio.
Per fermare la sua abitudine al respawn, apri /etc/pulse/client.conf
, cambia autospawn = yes
a autospawn = no
e imposta daemon-binary su /bin/true
. Assicurati che queste righe non siano commentate, in questo modo:
autospawn = no
daemon-binary = /bin/true
Ora possiamo occuparci dei normali file di avvio di Linux. Prima cancella /etc/rc2.d/S50pulseaudio
. Oppure puoi rinominarlo in un comando kill, che conserva il collegamento nel caso in cui lo desideri di nuovo:
$ mv /etc/rc2.d/S50pulseaudio /etc/rc2.d/K50pulseaudio
OPPURE
Potrebbe esserci un altro file di avvio da eliminare:/etc/X11/Xsession.d/70pulseaudio
. Questo avvia Pulse quando inizia una sessione di Gnome. Eliminalo o copialo in una directory diversa nel caso in cui desideri salvarlo e verifica nuovamente il nome esatto del file. Un trucco utile, quando trovi gli script che avviano PulseAudio, è cambiare il binario che chiamano da /usr/bin/pulseaudio
a /bin/true
. Questo è un bel eseguibile il cui unico compito è "non fare nulla, con successo". Mantiene felici gli script ed è un comodo segnaposto se vuoi cambiarlo di nuovo.
Ora che hai eliminato tutti gli script di avvio e di rigenerazione, utilizza i comandi seguenti per interrompere e avviare l'audio a impulsi.
$ pulseaudio --kill
$ pulseaudio --start