GNU/Linux >> Tutoriales Linux >  >> Linux

¿Cómo comienza PulseAudio?

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:

  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 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

Linux
  1. ¿Qué es NGINX? ¿Como funciona?

  2. ¿Cómo funciona Awk '!a[$0]++'?

  3. ¿Cómo funciona "chmod -R 755"?

  4. ¿Cómo funciona Rm? ¿Qué hace Rm?

  5. ¿Cómo funciona realmente sig_atomic_t?

Cómo iniciar, detener o reiniciar Apache

Cómo iniciar, detener o reiniciar Nginx

Cómo empezar a aprender un lenguaje de programación

Cómo iniciar TeamViewer en Debian 11

¿Cómo funciona el intercambio de memoria en Linux?

¿Cómo iniciar un emulador de Android en ubuntu 16.04?