Como o PulseAudio é iniciado?

9

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

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

Por que o PulseAudio aparentemente começa de forma mágica sem que eu o execute, e como ele é reiniciado instantaneamente quando ele morre?

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

    
por Hubro 20.05.2015 / 11:00

3 respostas

9

Parece que qualquer processo vinculado à família libpulse * de objetos compartilhados - antes ou depois da execução do X e do gerenciador de janelas do i3 - pode implicitamente iniciar automaticamente o servidor PulseAudio, sob o 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 e-mail de 2015-05-29 para o systemd -devel mailing list :

"pulseaudio is generally not a system service but a user service. Unless your user session is fully converted to be managed by systemd too (which is unlikely) systemd is hence not involved at all with starting it.

"PA is usually started from the session setup script or service. In Gnome that's gnome-session, for example. It's also auto-spawned on-demand if the libraries are used and note that it is missing."

Por exemplo, no Debian Stretch (Testing), o navegador da Web 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 ao libpulse *. Por exemplo, primeiro obtenha uma lista de objetos compartilhados libpulse *, então execute lsof, em cada (note: isso vem do Debian Stretch (Testing), então 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 exibir o PulseAudio, edite ~ / .config / pulse / client.conf e adicione linha

autospawn = no

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

A ligação libpulse *, executando processos, também pode indicar porque o PulseAudio reaparece tão rapidamente. A página FreeDesktop.org, " Running PulseAudio ", parece confirmar isso:

"...typically some background application will immediately reconnect, causing the server to get immediately restarted."

Você parece indicar que inicia o gerenciador de janelas do i3, por meio do console, executando 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 o GNOME, o KDE e assim por diante.

INFORMAÇÕES ADICIONAIS PARA O AUTOSTART DO GNOME / KDE

O Pacote PulseAudio (5.0-13), no Debian Jessie (Stable) amd64, instala os quatro arquivos do 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

Alguns gerenciadores de sessão gráfica executam automaticamente scripts de autostart 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ão gráficos 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 módulos PulseAudio, que geram o servidor PulseAudio, como um subproduto (observação: se você tiver autospawn definido como "não", o pactl respeitará isso e não servidor PulseAudio autospawn).

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

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

    
por 27.11.2015 / 05:37
3

O Pulseaudio é um pequeno daemon. man pulseaudio diz que você pode desligá-lo com o comando pulseaudio --kill , mas fazer isso renasce novamente - ele reaparece sozinho. Um script de inicialização normal está lá para iniciá-lo na inicialização, /etc/rc2.d/S50pulseaudio . Mas quando você tenta controlar isso, a maneira normal do Linux não funciona, porque executar /etc/init.d/pulseaudio stop não o impede. Remover /etc/rc2.d/S50pulseaudio não impede que ele seja iniciado na inicialização.

Para interromper seu hábito de reaparecer, abra /etc/pulse/client.conf , altere autospawn = yes para autospawn = no e defina o daemon-binário para /bin/true . Certifique-se de que essas linhas não estão comentadas, assim:

 autospawn = no
 daemon-binary = /bin/true

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

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

OU

Pode haver mais um arquivo 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ê encontra scripts que iniciam o PulseAudio, é alterar o binário que eles chamam de /usr/bin/pulseaudio para /bin/true . Este é um ótimo executável cujo único trabalho é "não fazer nada, com sucesso". Ele mantém os scripts felizes e é um substituto conveniente se você quiser alterá-lo novamente.

Agora que você eliminou todos os scripts de inicialização e reabertura, agora use os comandos abaixo para interromper e iniciar o áudio de pulso.

 $ pulseaudio --kill
 $ pulseaudio --start

Espero que isso ajude.

    
por 20.05.2015 / 11:33
0

A resposta dada por Thushi / Carla Schroder (veja a próxima resposta) continua funcionando bem depois de uma atualização de debian wheezy para jessie. Eu tenho 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.

pulseaudio-daemon foi iniciado duas vezes. Uma vez pelo rtkit-daemon e outras vezes pelo GNOME / KDE AUTOSTART ou outro aplicativo. Enfim, configurando em /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. Bastante claro, porque o daemon rtkit faz o trabalho com a interação do systemd.

    
por 31.12.2016 / 16:38