¿Cómo comienza PulseAudio?

16

PulseAudio siempre se está ejecutando en mi sistema, y ​​siempre se reinicia instantáneamente si falla o lo mato. Sin embargo, en realidad nunca inicio PulseAudio.

Lo he comprobado /etc/init.d/y /etc/X11/Xsession.d/lo he comprobado systemctl list-units -a, y PulseAudio no se encuentra en ninguna parte.

¿Cómo es que PulseAudio aparentemente comienza mágicamente por sí solo sin que yo lo ejecute, y cómo se reinicia instantáneamente cuando muere?

Estoy usando Debian 8 (jessie) con xinit y el administrador de ventanas i3, y PulseAudio 5.

Hubro
fuente

Respuestas:

14

Parece que cualquier proceso que se vincule a la familia libpulse * de objetos compartidos, ya sea antes o después de ejecutar X y el administrador de ventanas i3, puede implícitamente autoengendrar el servidor PulseAudio, bajo su proceso de usuario, como un subproducto de los intentos de interactuar con el subsistema de audio . El creador de PulseAudio, Lennart Poettering, parece confirmar esto, en un correo electrónico 2015-05-29 a la lista de correo systemd-devel :

"pulseaudio generalmente no es un servicio del sistema, sino un servicio de usuario. A menos que su sesión de usuario esté totalmente convertida para ser administrada por systemd también (lo cual es poco probable) systemd no está involucrado en absoluto con su inicio.

"PA generalmente se inicia desde el script o servicio de configuración de la sesión. En Gnome eso es gnome-session, por ejemplo. También se genera automáticamente a pedido si se usan las bibliotecas y se nota que falta".

Por ejemplo, en Debian Stretch (Testing), el navegador web IceWeasel se vincula a dos objetos compartidos libpulse *: 1) libpulsecommon-7.1.so; y 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

Puede ver qué procesos en ejecución se vinculan con libpulse *. Por ejemplo, primero obtenga una lista de objetos compartidos libpulse *, luego ejecute lsof en cada uno (nota: esto proviene de Debian Stretch (Testing), por lo que su salida puede diferir):

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 indicar a estos procesos que no aparezcan automáticamente PulseAudio, edite ~ / .config / pulse / client.conf y agregue la línea

autospawn = no

PulseAudio y sus bibliotecas respetan esa configuración, en general.

El enlace libpulse * mediante procesos en ejecución también puede indicar por qué PulseAudio reaparece tan rápidamente. La página de FreeDesktop.org, " Running PulseAudio ", parece confirmar esto:

"... por lo general, algunas aplicaciones en segundo plano se volverán a conectar de inmediato, haciendo que el servidor se reinicie de inmediato".

Parece indicar que inicia el administrador de ventanas i3 a través de la consola (ejecutando xinit) y no utiliza un administrador de pantalla o entorno de escritorio. El resto de esta respuesta detalla información para aquellos que usan GNOME, KDE, etc.

INFORMACIÓN ADICIONAL, PARA GNOME / KDE AUTOSTART

El paquete PulseAudio (5.0-13), en Debian Jessie (Estable) amd64, instala los siguientes cuatro archivos del 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

Algunos administradores de sesión gráficos ejecutan automáticamente scripts de inicio automático de FreeDesktop.org en el inicio de sesión del usuario. El script de inicio automático de PulseAudio, a su vez, le dice a los administradores de sesiones gráficas que ejecuten el script de inicio de PulseAudio apropiado:

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

Estas secuencias de comandos llaman al cliente PulseAudio / usr / bin / pactl para cargar los módulos PulseAudio, lo que genera el servidor PulseAudio como un subproducto (nota: si tiene autopawn configurado en "no", pactl respeta eso y no autopawn server PulseAudio).

Más detalles, en la página de FreeDesktop.org " Running PulseAudio ".

Algunos administradores de pantallas, además y en otras distribuciones, pueden iniciar PulseAudio (por ejemplo, SDDM, en ArchLinux . Aunque los mantenedores pueden haber resuelto esto, por ahora).

iokevins
fuente
4

Pulseaudio es un pequeño demonio. man pulseaudiodice que puede apagarlo con el comando, pulseaudio --killpero hacer eso toma el renacimiento nuevamente: se reaparece solo. Un script de inicio normal es que hay que empezar en el arranque, /etc/rc2.d/S50pulseaudio. Pero cuando intenta controlar esto de la forma normal de Linux, no funciona, porque la ejecución /etc/init.d/pulseaudio stopno lo detiene. La eliminación /etc/rc2.d/S50pulseaudiono impide que comience en el arranque.

Para detener su hábito de reaparición, abra /etc/pulse/client.conf, cambie autospawn = yesa autospawn = no, y establezca daemon-binary en /bin/true. Asegúrese de que estas líneas no estén comentadas, como esta:

 autospawn = no
 daemon-binary = /bin/true

Ahora podemos ocuparnos de los archivos normales de inicio de Linux. Primero borrar /etc/rc2.d/S50pulseaudio. O puede cambiarle el nombre a un comando kill, que conserva el enlace en caso de que lo desee de nuevo:

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

O

Es posible que haya más de un archivo de inicio de prescindir de: /etc/X11/Xsession.d/70pulseaudio. Esto inicia Pulse cuando comienza una sesión de Gnome. Elimínelo o cópielo en un directorio diferente en caso de que desee guardarlo, y vuelva a verificar el nombre exacto del archivo. Un truco útil, cuando se encuentra guiones que comienzan PulseAudio, es cambiar el binario que ellos llaman de /usr/bin/pulseaudioa /bin/true. Este es un pequeño ejecutable agradable cuyo único trabajo es "no hacer nada, con éxito". Mantiene los scripts felices, y es un marcador de posición conveniente si alguna vez desea cambiarlo de nuevo.

Ahora que ha purgado todos los scripts de inicio y reaparición, ahora use los siguientes comandos para detener e iniciar el audio de pulso.

 $ pulseaudio --kill
 $ pulseaudio --start
Thushi
fuente
1
Ayuda un poco, pero en realidad no responde a la pregunta en absoluto. Todavía no tengo idea de cómo / dónde / por qué PulseAudio se inicia inicialmente en mi sistema. Debian 8 usa systemd, y como dije systemctl list-units -ano incluye PulseAudio. xinit lanza scripts desde /etc/X11/Xsession.dy, como se mencionó, tampoco incluye PulseAudio.
Hubro
¿Cuál es el proceso principal para su proceso pulseaudio?
Thushi
1
El texto de esta respuesta parece provenir de un artículo de 2010, de Carla Schroder: linuxplanet.com/linuxplanet/tutorials/7130/2 . Las instrucciones ya no parecen aplicarse a Debian Jessie y PulseAudio (5.0-13).
iokevins
0

La respuesta dada por Thushi / Carla Schroder (ver la siguiente respuesta) sigue funcionando bien después de una actualización de debian wheezy a jessie. Recibí el siguiente error después de investigar mis mensajes de arranque (el error aparece en la última línea).

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 se inició dos veces. Una vez por el rtkit-daemon y otras por GNOME / KDE AUTOSTART u otra aplicación. De todos modos configurando en /etc/pulse/client.conf

autospawn = no
daemon-binary = /bin/true

resuelto mi problema Lo único que no puedo confirmar es que no haya más scripts de inicio en ningún directorio /etc/rcX.d. Bastante claro porque el rtkit-daemon hace el trabajo con la interacción de systemd.

FalkH
fuente