No dudes en compartir nuestra página y códigos en tus redes, apóyanos para aumentar nuestra comunidad.
Solución:
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 generar 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 confirmar esto, en un correo electrónico del 29 de mayo de 2015 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é completamente convertida para ser administrada por systemd también (lo cual es poco probable) systemd no está involucrado en absoluto en 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 utilizan las bibliotecas y tenga en cuenta que falta”.
Por ejemplo, en Debian Stretch (Pruebas), el navegador web IceWeasel se vincula a 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 (Prueba), por lo que su resultado 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 decirle 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ápidamente. La página de FreeDesktop.org, “Ejecutando PulseAudio”, parece confirmar esto:
“… normalmente, alguna aplicación en segundo plano se volverá a conectar inmediatamente, lo que provocará 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 scripts de inicio automático de FreeDesktop.org cuando el usuario inicia sesión. 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
Estos scripts 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 el inicio automático configurado en “no”, pactl lo respeta y lo hará no servidor PulseAudio autospawn).
Más detalles, en la página de FreeDesktop.org “Ejecución de PulseAudio”.
Algunos administradores de pantalla, además y en otras distribuciones, pueden iniciar PulseAudio (por ejemplo, SDDM, en ArchLinux. Aunque los mantenedores pueden haber resuelto esto, a esta altura).
¿Cómo está comenzando 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 PulseAudio
Para detener el proceso PulseAudio y que no lance inmediatamente una nueva instancia, use systemctl --user stop
:
$ systemctl --user stop pulseaudio.service pulseaudio.socket
Para deshabilitar PulseAudio
Si no desea que PulseAudio se inicie automáticamente al iniciar sesión, puede deshabilitarlo así:
$ systemctl --user disable pulseaudio.service pulseaudio.socket
(Por cierto, incluso con él 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 necesita. Sin embargo, si está interesado en cómo encontrar la solución por su cuenta, siga leyendo.
Para saber qué procesos tienen abierta la tarjeta de sonido
Utilice 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 saber qué proceso lanzó PulseAudio
Usar pstree -s
para mostrar los procesos padre así:
$ pstree -sp 32768
systemd(1)───systemd(738)───pulseaudio(32768)─┬─gsettings-helpe(32769)─┬─{gsett+
│ ├─{gsett+
│ └─{gsett+
└─pulseaudio(32773)
Lo usé 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 es necesario utilizar 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 de nuevo, reaparece a sí mismo. Un script de inicio normal está ahí para iniciarlo en el arranque, /etc/rc2.d/S50pulseaudio
. Pero cuando intentas controlar esto de la forma normal de Linux, no funciona, porque ejecutar /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, abra /etc/pulse/client.conf
, cambio autospawn = yes
para 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 ocuparnos de los archivos de inicio normales de Linux. Primero borrar /etc/rc2.d/S50pulseaudio
. O puede cambiarle el nombre a un comando de interrupción, que conserva el enlace en caso de que alguna vez lo desee 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. Bórrelo o cópielo en un directorio diferente en caso de que quiera guardarlo, y nuevamente verifique el nombre exacto del archivo. Un truco útil, cuando encuentra scripts que inician PulseAudio, es cambiar el binario desde el que llaman /usr/bin/pulseaudio
para /bin/true
. Este es un pequeño 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, ahora use los siguientes comandos para detener e iniciar el audio de pulso.
$ pulseaudio --kill
$ pulseaudio --start
Sección de Reseñas y Valoraciones
Si te gusta la informática, tienes la habilidad dejar una crónica acerca de qué le añadirías a esta reseña.