GNU/Linux >> Linux Esercitazione >  >> Linux

Come si avvia PulseAudio?

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:

  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 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

Linux
  1. Come funziona il bit appiccicoso?

  2. Come funziona "chmod -R 755".

  3. Come avviare un processo nel proprio gruppo di processi?

  4. come avviare il server Tomcat in Linux?

  5. Come funziona effettivamente sig_atomic_t?

Come avviare, arrestare o riavviare Apache

Come avviare, arrestare o riavviare Nginx

Come avviare TeamViewer su Debian 11

Come funziona la memoria di scambio in Linux?

Come funziona rm? Cosa fa rm?

Come avviare un emulatore Android in Ubuntu 16.04?