GNU/Linux >> Tutoriels Linux >  >> Linux

Comment démarre PulseAudio ?

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 :

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

Linux
  1. Comment commencer à apprendre un langage de programmation

  2. Comment fonctionne Awk '!a[$0]++' ?

  3. Comment fonctionne le Sticky Bit ?

  4. Ssh – Comment Tcp-keepalive fonctionne-t-il dans Ssh ?

  5. Pourquoi l'heure Unix commence-t-elle au 1970-01-01 ?

Comment démarrer, arrêter ou redémarrer Apache

Comment démarrer, arrêter ou redémarrer Nginx

Comment démarrer TeamViewer sur Debian 11

Comment fonctionne la mémoire d'échange sous Linux ?

Comment ça marche ? Que fait rm ?

Comment démarrer un émulateur Android dans Ubuntu 16.04 ?