Comment PulseAudio démarre-t-il?

16

PulseAudio est toujours en cours d'exécution sur mon système et redémarre toujours instantanément s'il se bloque ou si je le tue. Cependant, je ne démarre jamais réellement PulseAudio.

J'ai vérifié /etc/init.d/et /etc/X11/Xsession.d/, et j'ai vérifié systemctl list-units -a, et PulseAudio est introuvable.

Comment se fait-il que PulseAudio démarre comme par magie sans que je ne l'exécute jamais, et comment redémarre-t-il instantanément quand il meurt?

J'utilise Debian 8 (Jessie) avec xinit et le gestionnaire de fenêtres i3, et PulseAudio 5.

Hubro
la source

Réponses:

14

Il semble que tout processus lié à la famille libpulse * d'objets partagés - avant ou après l'exécution de X et du gestionnaire de fenêtres i3 - puisse implicitement générer automatiquement le serveur PulseAudio, sous votre processus utilisateur, comme sous-produit des tentatives d'interface avec le sous-système audio. . Le créateur de PulseAudio, Lennart Poettering, semble le confirmer, dans un e-mail du 29/05/2015 à la liste de diffusion systemd-devel :

"pulseaudio n'est généralement pas un service système mais un service utilisateur. À moins que votre session utilisateur ne soit entièrement convertie pour être gérée par systemd aussi (ce qui est peu probable), systemd n'est donc pas du tout impliqué dans son démarrage.

"PA est généralement démarré à partir du script ou du service de configuration de session. Dans Gnome, c'est gnome-session, par exemple. Il est également généré automatiquement à la demande si les bibliothèques sont utilisées et notez qu'il est manquant."

Par exemple, sur Debian Stretch (test), le navigateur Web IceWeasel établit un lien vers deux objets partagés libpulse *: 1) libpulsecommon-7.1.so; et 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

Vous pouvez voir quels processus en cours d'exécution sont liés à libpulse *. Par exemple, obtenez d'abord une liste des objets partagés libpulse *, puis exécutez lsof sur chacun (note: cela vient de Debian Stretch (Testing), donc votre sortie peut différer):

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

Pour dire à ces processus de ne pas générer automatiquement PulseAudio, éditez ~ / .config / pulse / client.conf et ajoutez une ligne

autospawn = no

PulseAudio et ses bibliothèques respectent généralement ce paramètre.

La liaison libpulse * en exécutant des processus peut également indiquer pourquoi PulseAudio réapparaît si rapidement. La page FreeDesktop.org, " Running PulseAudio ", semble le confirmer:

"... généralement une application en arrière-plan se reconnecte immédiatement, ce qui entraîne le redémarrage immédiat du serveur."

Vous semblez indiquer que vous démarrez le gestionnaire de fenêtres i3 via la console (en exécutant xinit) et que vous n'utilisez pas de gestionnaire d'affichage ou d'environnement de bureau. Le reste de cette réponse détaille les informations pour ceux qui utilisent GNOME, KDE, etc.

INFORMATIONS SUPPLÉMENTAIRES, POUR GNOME / KDE AUTOSTART

Le package PulseAudio (5.0-13), dans Debian Jessie (Stable) amd64, installe les quatre fichiers système suivants :

  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

Certains gestionnaires de sessions graphiques exécutent automatiquement les scripts de démarrage automatique de FreeDesktop.org lors de la connexion de l'utilisateur. Le script de démarrage automatique PulseAudio, à son tour, indique aux gestionnaires de sessions graphiques d'exécuter le script de démarrage PulseAudio approprié:

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

Ces scripts appellent le client PulseAudio / usr / bin / pactl pour charger les modules PulseAudio, ce qui engendre le serveur PulseAudio en tant que sous-produit (remarque: si vous avez défini la création automatique sur "non", pactl respecte cela et ne réapparaîtra pas automatiquement le serveur PulseAudio).

Plus de détails, sur la page FreeDesktop.org " Running PulseAudio ".

Certains gestionnaires d'affichage, en plus et dans d'autres distributions, peuvent démarrer PulseAudio (par exemple, SDDM, sur ArchLinux . Bien que les responsables aient résolu ce problème, à ce jour).

iokevins
la source
4

Pulseaudio est un petit démon. man pulseaudiodit que vous pouvez le désactiver avec la commande, pulseaudio --killmais cela prend à nouveau la renaissance - il réapparaît. Un script d'initialisation normale est là pour le lancer au démarrage, /etc/rc2.d/S50pulseaudio. Mais lorsque vous essayez de contrôler cela de la manière Linux normale, cela ne fonctionne pas, car l'exécution /etc/init.d/pulseaudio stopne l'arrête pas. La suppression /etc/rc2.d/S50pulseaudione l'empêche pas de démarrer au démarrage.

Pour arrêter son habitude de réapparition, ouvrez /etc/pulse/client.conf, changez autospawn = yesen autospawn = noet définissez daemon-binary sur /bin/true. Assurez-vous que ces lignes ne sont pas commentées, comme ceci:

 autospawn = no
 daemon-binary = /bin/true

Maintenant, nous pouvons traiter les fichiers de démarrage Linux normaux. Supprimer d'abord /etc/rc2.d/S50pulseaudio. Ou vous pouvez le renommer en une commande kill, qui préserve le lien au cas où vous le voudriez à nouveau:

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

OU

Il peut y avoir un fichier plus démarrage de se passer: /etc/X11/Xsession.d/70pulseaudio. Cela démarre Pulse lorsqu'une session Gnome démarre. Supprimez-le ou copiez-le dans un autre répertoire au cas où vous souhaiteriez l'enregistrer, puis vérifiez à nouveau le nom de fichier exact. Une astuce utile, lorsque vous trouvez des scripts qui commencent PulseAudio, est de changer le binaire qu'ils appellent de /usr/bin/pulseaudioà /bin/true. C'est un joli petit exécutable dont le seul travail est de "ne rien faire, avec succès". Il garde les scripts heureux, et c'est un espace réservé pratique si vous souhaitez un jour le modifier.

Maintenant que vous avez purgé tous les scripts de démarrage et de réapparition, utilisez maintenant les commandes ci-dessous pour arrêter et démarrer l'audio pulsé.

 $ pulseaudio --kill
 $ pulseaudio --start
Thushi
la source
1
Cela aide un peu, mais cela ne répond pas du tout à la question. Je ne sais toujours pas comment / où / pourquoi PulseAudio se lance initialement sur mon système. Debian 8 utilise systemd et, comme je l'ai dit, systemctl list-units -an'inclut pas PulseAudio. xinit lance des scripts à partir de /etc/X11/Xsession.det comme mentionné, il n'inclut pas non plus PulseAudio.
Hubro
quel est le processus parent pour votre processus pulseaudio?
Thushi
1
Le texte de cette réponse semble provenir d'un article de 2010, par Carla Schroder: linuxplanet.com/linuxplanet/tutorials/7130/2 . Les instructions ne semblent plus s'appliquer à Debian Jessie et PulseAudio (5.0-13).
iokevins
0

La réponse donnée par Thushi / Carla Schroder (voir la réponse suivante) fonctionne toujours bien après une mise à niveau de Debian Wheezy vers Jessie. J'ai obtenu l'erreur suivante après avoir recherché mes messages de démarrage (l'erreur est répertoriée à la dernière ligne).

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 a été démarré deux fois. Une fois par le rtkit-daemon et les autres fois par GNOME / KDE AUTOSTART ou une autre application. Quoi qu'il en soit dans /etc/pulse/client.conf

autospawn = no
daemon-binary = /bin/true

résolu mon problème. La seule chose que je ne peux pas confirmer, c'est qu'il n'y a plus de scripts de démarrage dans les répertoires /etc/rcX.d. Assez clair car le rtkit-daemon fait le travail avec l'interaction de systemd.

FalkH
la source