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:
- /etc/xdg/autostart/pulseaudio-kde.desktop
- /etc/xdg/autostart/pulseaudio.desktop
- /usr/bin/start-pulseaudio-x11
- /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