Parece que cualquier proceso que se vincule a la familia de objetos compartidos libpulse*, ya sea antes o después de ejecutar X y el administrador de ventanas i3, puede generar implícitamente automáticamente 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 confirmarlo en un correo electrónico del 29 de mayo de 2015 a la lista de correo de systemd-devel:
"pulseaudio generalmente no es un servicio del sistema sino un servicio de usuario. A menos que su sesión de usuario esté completamente convertida para ser administrada por systemdtoo (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. InGnome 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 enlaza con dos objetos compartidos libpulse*:1) libpulsecommon-7.1.so; y 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
Puede ver qué procesos en ejecución se vinculan a libpulse*. Por ejemplo, primero obtenga una lista de objetos compartidos libpulse*, luego ejecute lsof en cada uno (nota:esto proviene de Debian Stretch (Pruebas), 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 generen automáticamente PulseAudio, edite ~/.config/pulse/client.conf y agregue una línea
autospawn = no
PulseAudio y sus bibliotecas respetan esa configuración, en general.
La vinculación de libpulse* mediante procesos en ejecución también puede indicar por qué PulseAudio reaparece tan rápido. La página de FreeDesktop.org, "Ejecutando PulseAudio", parece confirmar esto:
"... por lo general, alguna aplicación en segundo plano se volverá a conectar de inmediato, lo que hará 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 usa un administrador de pantalla o un 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 de sistema:
- /etc/xdg/autostart/pulseaudio-kde.desktop
- /etc/xdg/autostart/pulseaudio.desktop
- /usr/bin/start-pulseaudio-x11
- /usr/bin/start-pulseaudio-kde
Algunos administradores de sesiones gráficas ejecutan automáticamente las secuencias de comandos de inicio automático de FreeDesktop.org cuando el usuario inicia sesión. La secuencia de comandos de inicio automático de PulseAudio, a su vez, indica a los administradores de sesiones gráficas que ejecuten la secuencia de comandos de inicio de PulseAudio adecuada:
/usr/bin/start-pulseaudio-x11
/usr/bin/start-pulseaudio-kde
Estos scripts llaman al cliente de PulseAudio /usr/bin/pactl para cargar los módulos de PulseAudio, lo que genera el servidor de PulseAudio como un subproducto (nota:si tiene la generación automática establecida en "no", pactl lo respeta y no servidor PulseAudio de generación automática).
Más detalles, en la página de FreeDesktop.org "Ejecutando PulseAudio".
Algunos administradores de pantalla, además y en otras distribuciones, pueden iniciar PulseAudio (por ejemplo, SDDM, en ArchLinux. Aunque es posible que los mantenedores ya hayan resuelto esto).
¿Cómo comienza PulseAudio?
Si bien esta sigue siendo una pregunta válida, la respuesta ha cambiado con el tiempo. Las respuestas anteriores son insuficientes o incorrectas, ya que ahora el systemd del usuario inicia automáticamente PulseAudio, que a su vez fue iniciado por el systemd del sistema cuando el usuario inició sesión.
$ 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
Para matar a PulseAudio
Para detener el proceso de PulseAudio y que no inicie inmediatamente una nueva instancia, use systemctl --user stop
:
$ systemctl --user stop pulseaudio.service pulseaudio.socket
Para desactivar PulseAudio
Si no desea que PulseAudio se inicie automáticamente al iniciar sesión, puede desactivarlo así:
$ systemctl --user disable pulseaudio.service pulseaudio.socket
(Por cierto, incluso si está deshabilitado, aún puede iniciar PulseAudio cuando lo desee usando systemctl --user start
.)
Respondiendo la pregunta en general
Los comandos anteriores son todo lo que necesitas. Sin embargo, si está interesado en cómo encontrar la solución por su cuenta, siga leyendo.
Para saber qué procesos tiene abierta la tarjeta de sonido
Usa el lsof
o fuser -v
comandos para ver qué procesos tienen abiertos los archivos del dispositivo.
$ 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
Para averiguar qué proceso inició PulseAudio
Usa pstree -s
para mostrar los procesos principales así:
$ pstree -sp 32768
systemd(1)───systemd(738)───pulseaudio(32768)─┬─gsettings-helpe(32769)─┬─{gsett+
│ ├─{gsett+
│ └─{gsett+
└─{pulseaudio}(32773)
Usé eso para ver que PulseAudio en realidad estaba siendo lanzado por una instancia de systemd
(PID 738) que se estaba ejecutando en mi propia cuenta:
$ ps -fp 738
UID PID PPID C STIME TTY TIME CMD
hackerb9 738 1 0 Feb10 ? 00:00:00 /lib/systemd/systemd --user
A partir de ahí, es fácil adivinar que se necesita usar systemctl --user
para detenerlo.
Pulseaudio es un pequeño demonio. man pulseaudio
dice que puedes apagarlo con el comando pulseaudio --kill
pero hacer eso toma el renacimiento nuevamente, se reaparece a sí mismo. Hay una secuencia de comandos de inicio normal para iniciarlo en el arranque, /etc/rc2.d/S50pulseaudio
. Pero cuando intenta controlar esto de la manera normal en Linux, no funciona, porque ejecuta /etc/init.d/pulseaudio stop
no lo detiene. Eliminando /etc/rc2.d/S50pulseaudio
no evita que se inicie en el arranque.
Para detener su hábito de reaparición, abre /etc/pulse/client.conf
, cambie autospawn = yes
a autospawn = no
y establezca daemon-binary en /bin/true
. Asegúrese de que estas líneas no estén comentadas, así:
autospawn = no
daemon-binary = /bin/true
Ahora podemos lidiar con los archivos de inicio normales de Linux. Primero elimina /etc/rc2.d/S50pulseaudio
. O puede cambiarle el nombre a un comando de eliminación, que conserva el enlace en caso de que lo quiera de nuevo:
$ mv /etc/rc2.d/S50pulseaudio /etc/rc2.d/K50pulseaudio
O
Puede haber un archivo de inicio más del que prescindir:/etc/X11/Xsession.d/70pulseaudio
. Esto inicia Pulse cuando se inicia una sesión de Gnome. Elimínelo o cópielo en un directorio diferente en caso de que quiera guardarlo, y verifique nuevamente el nombre exacto del archivo. Un truco útil, cuando encuentra scripts que inician PulseAudio, es cambiar el binario al que llaman desde /usr/bin/pulseaudio
a /bin/true
. Este es un pequeño y agradable ejecutable cuyo único trabajo es "no hacer nada, con éxito". Mantiene contentos los scripts y es un marcador de posición conveniente si alguna vez desea volver a cambiarlo.
Ahora que ha purgado todos los scripts de inicio y reaparición, use los siguientes comandos para detener e iniciar el pulso de audio.
$ pulseaudio --kill
$ pulseaudio --start