Como o PulseAudio começa?

16

O PulseAudio está sempre em execução no meu sistema e sempre é reiniciado instantaneamente se travar ou eu o matar. No entanto, nunca inicio o PulseAudio.

Eu verifiquei /etc/init.d/e /etc/X11/Xsession.d/, e verifiquei systemctl list-units -a, e o PulseAudio não está em lugar nenhum.

Como é que o PulseAudio aparentemente começa magicamente sozinho, sem que eu nunca o execute, e como ele é reiniciado instantaneamente quando morre?

Estou usando o Debian 8 (jessie) com o xinit e o gerenciador de janelas i3, e o PulseAudio 5.

Hubro
fonte

Respostas:

14

Parece que qualquer processo vinculado à família libpulse * de objetos compartilhados - antes ou depois da execução do X e do gerenciador de janelas i3 - pode implicitamente gerar automaticamente o servidor PulseAudio, no processo do usuário, como um subproduto das tentativas de interface com o subsistema de áudio . O criador do PulseAudio, Lennart Poettering, parece confirmar isso, em um email de 29/05/2015 para a lista de discussão systemd-devel :

"o pulseaudio geralmente não é um serviço do sistema, mas um serviço do usuário. A menos que sua sessão do usuário seja totalmente convertida para ser gerenciada pelo systemd também (o que é improvável), o systemd não está envolvido com a inicialização.

"O PA geralmente é iniciado a partir do script ou serviço de configuração da sessão. No Gnome, é o gnome-session, por exemplo. Também é gerado automaticamente sob demanda se as bibliotecas forem usadas e observe que ela está ausente."

Por exemplo, no Debian Stretch (Testing), o navegador IceWeasel vincula-se a dois objetos compartilhados 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

Você pode ver quais processos em execução estão vinculados à libpulse *. Por exemplo, primeiro obtenha uma lista de objetos compartilhados libpulse * e, em seguida, execute lsof em cada um (nota: isso vem do Debian Stretch (Testing), portanto sua saída pode ser diferente):

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

Para dizer a esses processos para não gerar automaticamente o PulseAudio, edite ~ / .config / pulse / client.conf e adicione line

autospawn = no

PulseAudio e suas bibliotecas respeitam essa configuração, geralmente.

A ligação libpulse * pelos processos em execução também pode indicar por que o PulseAudio reaparece tão rapidamente. A página do FreeDesktop.org, " Running PulseAudio ", parece confirmar isso:

"... normalmente algum aplicativo em segundo plano será reconectado imediatamente, fazendo com que o servidor seja reiniciado imediatamente."

Você parece indicar que inicia o gerenciador de janelas i3 através do console (executando o xinit) e não usa um gerenciador de exibição ou ambiente de área de trabalho. O restante desta resposta detalha informações para aqueles que usam GNOME, KDE e assim por diante.

INFORMAÇÕES ADICIONAIS, PARA GNOME / KDE AUTOSTART

O pacote PulseAudio (5.0-13), no Debian Jessie (Stable) amd64, instala os quatro arquivos de sistema a seguir :

  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

Alguns gerenciadores de sessões gráficas executam automaticamente scripts de inicialização automática do FreeDesktop.org no login do usuário. O script de inicialização automática do PulseAudio, por sua vez, informa aos gerenciadores de sessões gráficas para executar o script de inicialização apropriado do PulseAudio:

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

Esses scripts chamam o cliente PulseAudio / usr / bin / pactl para carregar os módulos PulseAudio, que geram o servidor PulseAudio como um subproduto (nota: se você tiver o autospawn definido como "no", o pactl respeitará isso e não fará o autopreenchimento do servidor PulseAudio).

Mais detalhes, na página FreeDesktop.org " Running PulseAudio ".

Alguns gerenciadores de exibição, além e em outras distribuições, podem iniciar o PulseAudio (por exemplo, SDDM, no ArchLinux . Embora os mantenedores possam ter resolvido isso, até agora).

iokevins
fonte
4

Pulseaudio é um pequeno daemon. man pulseaudiodiz que você pode desligá-lo com o comando, pulseaudio --killmas fazer isso renasce novamente - ele reaparece automaticamente. Um script init normal existe para iniciá-lo na inicialização /etc/rc2.d/S50pulseaudio,. Mas quando você tenta controlar isso da maneira normal do Linux, ele não funciona, porque a execução /etc/init.d/pulseaudio stopnão o impede. A remoção /etc/rc2.d/S50pulseaudionão impede que seja iniciado na inicialização.

Para interromper seu hábito de reaparecer, abra /etc/pulse/client.conf, mude autospawn = yespara autospawn = noe defina daemon-binary como /bin/true. Certifique-se de que essas linhas não sejam comentadas, assim:

 autospawn = no
 daemon-binary = /bin/true

Agora podemos lidar com os arquivos normais de inicialização do Linux. Primeira exclusão /etc/rc2.d/S50pulseaudio. Ou você pode renomeá-lo para um comando kill, que preserva o link caso você deseje novamente:

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

OU

Pode haver um arquivo de mais de inicialização para dispensar: /etc/X11/Xsession.d/70pulseaudio. Isso inicia o Pulse quando uma sessão do Gnome é iniciada. Exclua-o ou copie-o para um diretório diferente, caso deseje salvá-lo, e verifique novamente o nome exato do arquivo. Um truque útil, quando você encontrar scripts que começam PulseAudio, é mudar o binário que eles chamam de /usr/bin/pulseaudioa /bin/true. Este é um pequeno executável agradável, cuja única tarefa é "não fazer nada, com êxito". Ele mantém os scripts felizes e é um espaço reservado conveniente, se você quiser alterá-lo novamente.

Agora que você limpou todos os scripts de inicialização e reaparecimento, agora use os comandos abaixo para parar e iniciar o áudio do pulso.

 $ pulseaudio --kill
 $ pulseaudio --start
Thushi
fonte
1
Isso ajuda um pouco, mas na verdade não responde à pergunta. Ainda não tenho idéia de como / onde / por que o PulseAudio é inicializado no meu sistema. O Debian 8 usa o systemd e, como eu disse systemctl list-units -a, não inclui o PulseAudio. O xinit inicia scripts /etc/X11/Xsession.de, como mencionado, também não inclui o PulseAudio.
Hubro 20/05
qual é o processo pai do seu processo pulseaudio?
Thushi
1
O texto desta resposta parece vir de um artigo de 2010, de Carla Schroder: linuxplanet.com/linuxplanet/tutorials/7130/2 . As instruções não parecem mais se aplicar ao Debian Jessie e ao PulseAudio (5.0-13).
22815 iokevins
0

A resposta dada por Thushi / Carla Schroder (veja a próxima resposta) ainda está funcionando bem após uma atualização do debian wheezy para jessie. Recebi o seguinte erro após pesquisar minhas mensagens de inicialização (o erro está listado na última linha).

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.

O pulseaudio-daemon foi iniciado duas vezes. Uma vez pelo rtkit-daemon e outras vezes pelo GNOME / KDE AUTOSTART ou outro aplicativo. De qualquer forma, a configuração no /etc/pulse/client.conf

autospawn = no
daemon-binary = /bin/true

resolveu meu problema. A única coisa que não posso confirmar é que não há mais scripts de inicialização em nenhum diretório /etc/rcX.d. Bem claro, porque o rtkit-daemon faz o trabalho com a interação do systemd.

FalkH
fonte