Il semble que tout processus lié à la famille d'objets partagés libpulse * - avant ou après l'exécution de X et du gestionnaire de fenêtres i3 - peut implicitement générer automatiquement le serveur PulseAudio, sous votre processus utilisateur, en tant que 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 2015-05-29 à 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 systemdtoo (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. InGnome, c'est-à-dire gnome-session, par exemple. Il est également généré automatiquement à la demande si les bibliothèques sont utilisées et notez qu'elles sont manquantes."
Par exemple, sur Debian Stretch (Testing), le navigateur Web IceWeasel est lié à deux objets partagés libpulse* :1) libpulsecommon-7.1.so; et 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
Vous pouvez voir quels processus en cours d'exécution sont liés à libpulse*. Par exemple, obtenez d'abord une liste d'objets partagés libpulse*, puis exécutez lsof sur chacun (remarque :cela provient de Debian Stretch (Testing), votre résultat peut donc 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 indiquer à ces processus de ne pas générer automatiquement PulseAudio, modifiez ~/.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, certaines applications d'arrière-plan se reconnecteront immédiatement, ce qui entraînera 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 ni 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 LE DÉMARRAGE AUTOMATIQUE DE GNOME/KDE
Le paquet PulseAudio (5.0-13), dans Debian Jessie (Stable) amd64, installe les quatre fichiers système suivants :
- /etc/xdg/autostart/pulseaudio-kde.desktop
- /etc/xdg/autostart/pulseaudio.desktop
- /usr/bin/start-pulseaudio-x11
- /usr/bin/start-pulseaudio-kde
Certains gestionnaires de session 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 session 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, qui génèrent le serveur PulseAudio en tant que sous-produit (remarque :si vous avez défini la génération automatique sur "non", pactl respecte cela et ne le fera pas serveur PulseAudio à génération automatique).
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 peut-être déjà résolu ce problème).
Comment démarrer PulseAudio ?
Bien que cette question soit toujours valable, la réponse a changé au fil du temps. Les réponses précédentes sont soit insuffisantes soit incorrectes car maintenant PulseAudio est lancé automatiquement par le systemd de l'utilisateur, qui à son tour a été lancé par le systemd du système lorsque l'utilisateur s'est connecté.
$ 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
Pour tuer PulseAudio
Pour arrêter le processus PulseAudio et qu'il ne lance pas immédiatement une nouvelle instance, utilisez systemctl --user stop
:
$ systemctl --user stop pulseaudio.service pulseaudio.socket
Pour désactiver PulseAudio
Si vous ne souhaitez pas que PulseAudio démarre automatiquement lors de la connexion, vous pouvez le désactiver comme suit :
$ systemctl --user disable pulseaudio.service pulseaudio.socket
(Au fait, même s'il est désactivé, vous pouvez toujours démarrer PulseAudio quand vous le souhaitez en utilisant systemctl --user start
.)
Répondre à la question en général
Les commandes ci-dessus sont tout ce dont vous avez besoin. Cependant, si vous souhaitez savoir comment trouver la solution par vous-même, continuez à lire.
Pour savoir quels processus ont ouvert la carte son
Utilisez soit le lsof
ou fuser -v
commandes pour voir quels processus ont ouvert les fichiers de l'appareil.
$ 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
Pour savoir quel processus a lancé PulseAudio
Utilisez pstree -s
pour afficher les processus parents comme ceci :
$ pstree -sp 32768
systemd(1)───systemd(738)───pulseaudio(32768)─┬─gsettings-helpe(32769)─┬─{gsett+
│ ├─{gsett+
│ └─{gsett+
└─{pulseaudio}(32773)
J'ai utilisé cela pour voir que PulseAudio était en fait lancé par une instance de systemd
(PID 738) qui fonctionnait dans mon propre compte :
$ ps -fp 738
UID PID PPID C STIME TTY TIME CMD
hackerb9 738 1 0 Feb10 ? 00:00:00 /lib/systemd/systemd --user
À partir de là, il est facile de deviner qu'il faut utiliser systemctl --user
pour l'arrêter.
Pulseaudio est un petit démon. man pulseaudio
dit que vous pouvez l'éteindre avec la commande pulseaudio --kill
mais faire cela prend la renaissance à nouveau - il se régénère. Un script d'initialisation normal est là pour le démarrer 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 de /etc/init.d/pulseaudio stop
ne l'arrête pas. Suppression de /etc/rc2.d/S50pulseaudio
ne l'empêche pas de démarrer au démarrage.
Pour arrêter son habitude de réapparition, ouvrez /etc/pulse/client.conf
, modifiez autospawn = yes
à autospawn = no
, et 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
Nous pouvons maintenant traiter les fichiers de démarrage Linux normaux. Supprimez 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 autre fichier de démarrage dont vous pouvez vous 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 voudriez l'enregistrer, puis vérifiez à nouveau le nom exact du fichier. Une astuce utile, lorsque vous trouvez des scripts qui démarrent 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". Cela garde les scripts heureux et c'est un espace réservé pratique si vous souhaitez le modifier à nouveau.
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'impulsion audio.
$ pulseaudio --kill
$ pulseaudio --start