GNU/Linux >> Znalost Linux >  >> Linux

Jak se PulseAudio spouští?

Zdá se, že jakýkoli proces propojující se s rodinou sdílených objektů libpulse* – ať už před nebo po spuštění X a správce oken i3 – může implicitně automaticky spustit PulseAudio server pod vaším uživatelským procesem jako vedlejší produkt pokusů o propojení s audio subsystémem. . Zdá se, že tvůrce PulseAudio Lennart Poettering to potvrzuje v e-mailu z 29. 5. 2015 do mailing listu systemd-devel:

"pulseaudio obecně není systémová služba, ale uživatelská služba. Pokud není vaše uživatelská relace plně převedena na správu pomocí systemdtoo (což je nepravděpodobné), systemd se tedy vůbec nepodílí na jejím spouštění.

"PA se obvykle spouští ze skriptu nastavení relace nebo služby. InGnome, to je například gnome-session. Je to také auto-spawnedon-demand, pokud jsou použity knihovny a všimněte si, že chybí."

Například na Debian Stretch (testování) webový prohlížeč IceWeasel odkazuje na dva sdílené objekty libpulse*:1) libpulsecommon-7.1.so; a 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

Můžete vidět, které běžící procesy odkazují na libpulse*. Například nejprve získejte seznam sdílených objektů libpulse* a poté na každém spusťte lsof (poznámka:pochází z Debian Stretch (Testing), takže váš výstup se může lišit):

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

Chcete-li těmto procesům říci, aby automaticky nespouštěly PulseAudio, upravte ~/.config/pulse/client.conf a přidejte řádek

autospawn = no

PulseAudio a jeho knihovny toto nastavení obecně respektují.

Propojení libpulse* běžícími procesy může také naznačovat, proč se PulseAudio tak rychle obnovuje. Zdá se, že stránka FreeDesktop.org „Running PulseAudio“ to potvrzuje:

"...obvykle se některá aplikace na pozadí okamžitě znovu připojí, což způsobí okamžité restartování serveru."

Zdá se, že naznačujete, že spouštíte správce oken i3 přes konzolu (spuštěním xinit) a nepoužíváte správce zobrazení nebo desktopové prostředí. Zbytek této odpovědi podrobně popisuje informace pro ty, kteří používají GNOME, KDE a tak dále.

DALŠÍ INFORMACE PRO AUTOSTART GNOME/KDE

Balíček PulseAudio (5.0-13) v Debian Jessie (Stable) amd64 nainstaluje následující čtyři systémové soubory:

  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

Někteří správci grafických relací automaticky spouštějí skripty automatického spuštění FreeDesktop.org při přihlášení uživatele. Autostartovací skript PulseAudio zase říká správcům grafických relací, aby spustili příslušný spouštěcí skript PulseAudio:

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

Tyto skripty volají klienta PulseAudio /usr/bin/pactl k načtení modulů PulseAudio, které vytvoří server PulseAudio jako vedlejší produkt (poznámka:pokud máte autospawn nastaveno na "no", pactl to respektuje a nebude autospawn PulseAudio server).

Více podrobností na stránce FreeDesktop.org "Running PulseAudio".

Někteří správci zobrazení mohou navíc a v jiných distribucích spustit PulseAudio (například SDDM na ArchLinuxu. I když správci to již možná vyřešili).


Jak PulseAudio začíná?

I když je to stále platná otázka, odpověď na ni se postupem času měnila. Předchozí odpovědi jsou buď nedostatečné, nebo nesprávné, protože PulseAudio se nyní spouští automaticky systémem uživatele, který zase spustil systémový systém, když se uživatel přihlásil.

$ 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

Zabití PulseAudio

Chcete-li zastavit proces PulseAudio a zabránit okamžitému spuštění nové instance, použijte systemctl --user stop :

$ systemctl --user stop pulseaudio.service pulseaudio.socket

Deaktivace PulseAudio

Pokud si nepřejete, aby se PulseAudio spouštělo automaticky po přihlášení, můžete jej zakázat takto:

$ systemctl --user disable pulseaudio.service pulseaudio.socket

(Mimochodem, i když je vypnutý, můžete PulseAudio spustit, když ho chcete, pomocí systemctl --user start .)

Obecná odpověď na otázku

Výše uvedené příkazy jsou vše, co potřebujete. Pokud vás však zajímá, jak na řešení přijít sami, pokračujte ve čtení.

Zjistit, jaké procesy mají otevřenou zvukovou kartu

Použijte buď lsof nebo fuser -v příkazy, abyste viděli, jaké procesy mají otevřené soubory zařízení.

$ 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

Chcete-li zjistit, který proces spustil PulseAudio

Použijte pstree -s zobrazit nadřazené procesy takto:

$ pstree -sp 32768
systemd(1)───systemd(738)───pulseaudio(32768)─┬─gsettings-helpe(32769)─┬─{gsett+
                                              │                        ├─{gsett+
                                              │                        └─{gsett+
                                              └─{pulseaudio}(32773)

Použil jsem to, abych viděl, že PulseAudio se ve skutečnosti spouští instancí systemd (PID 738), který běžel na mém vlastním účtu:

$ ps -fp 738
UID        PID  PPID  C STIME TTY          TIME CMD
hackerb9   738     1  0 Feb10 ?        00:00:00 /lib/systemd/systemd --user

Odtud je snadné uhodnout, že je třeba použít systemctl --user abych to zastavil.


Pulseaudio je malý démon. man pulseaudio říká, že jej můžete vypnout příkazem pulseaudio --kill ale dělat to znamená znovuzrození-- znovu se obnoví. Normální init skript je k dispozici ke spuštění při startu, /etc/rc2.d/S50pulseaudio . Ale když se to pokusíte ovládat normálním způsobem Linuxu, nefunguje to, protože běží /etc/init.d/pulseaudio stop nezastaví to. Odebírání /etc/rc2.d/S50pulseaudio nezabrání spuštění při startu.

Chcete-li zastavit jeho znovuzrození, otevřete /etc/pulse/client.conf , změňte autospawn = yes na autospawn = no a nastavte daemon-binary na /bin/true . Ujistěte se, že tyto řádky jsou bez komentáře, například takto:

 autospawn = no
 daemon-binary = /bin/true

Nyní se můžeme zabývat běžnými spouštěcími soubory Linuxu. Nejprve smažte /etc/rc2.d/S50pulseaudio . Nebo jej můžete přejmenovat na příkaz kill, který zachová odkaz pro případ, že jej budete chtít znovu:

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

NEBO

Může být zapotřebí ještě jeden spouštěcí soubor:/etc/X11/Xsession.d/70pulseaudio . Tím se spustí Pulse při zahájení relace Gnome. Smažte jej nebo zkopírujte do jiného adresáře pro případ, že jej chcete uložit, a znovu ověřte přesný název souboru. Užitečným trikem, když najdete skripty, které spouštějí PulseAudio, je změnit binární kód, který volají z /usr/bin/pulseaudio na /bin/true . Toto je pěkný malý spustitelný soubor, jehož jediným úkolem je "nedělat nic, úspěšně". Udržuje skripty spokojené a je to pohodlný zástupný symbol, pokud jej někdy budete chtít změnit zpět.

Nyní, když jste vymazali všechny spouštěcí a respawningové skripty, nyní použijte níže uvedené příkazy k zastavení a spuštění pulzního zvuku.

 $ pulseaudio --kill
 $ pulseaudio --start

Linux
  1. Jak funguje „chmod -R 755“.

  2. Jak spustit proces ve vlastní skupině procesů?

  3. Jak rm funguje? Co dělá rm?

  1. Co je NGINX? Jak to funguje?

  2. Jak vytvořit virtuální výstup v Pulseaudio?

  3. Jak vlastně sig_atomic_t funguje?

  1. Jak se začít učit programovací jazyk

  2. Jak Awk ‚!a[$0]++‘ funguje?

  3. Jack vs Pulseaudio — Jak je to rychlejší?