Jak zaczyna się PulseAudio?


18

PulseAudio zawsze działa w moim systemie i zawsze natychmiast uruchamia się ponownie, jeśli ulegnie awarii lub go zabiję. Jednak tak naprawdę nigdy nie uruchamiam PulseAudio.

Sprawdziłem /etc/init.d/i /etc/X11/Xsession.d/sprawdziłem systemctl list-units -a, a PulseAudio nigdzie nie można znaleźć.

Dlaczego PulseAudio na pozór magicznie zaczyna się samo bez uruchamiania go i jak natychmiast uruchamia się ponownie, gdy umiera?

Używam Debian 8 (jessie) z xinit i menedżerem okien i3 oraz PulseAudio 5.

Odpowiedzi:


15

Wygląda na to, że jakikolwiek proces łączący się z rodziną współdzielonych obiektów libpulse * - przed lub po uruchomieniu X i menedżera okien i3 - może domyślnie autospawnować serwer PulseAudio w ramach procesu użytkownika, jako produkt uboczny prób połączenia się z podsystemem audio . Twórca PulseAudio, Lennart Poettering, wydaje się to potwierdzać w e-mailu z dnia 29.05.2015 na listę mailingową systemd-devel :

„pulseaudio zasadniczo nie jest usługą systemową, ale usługą użytkownika. O ile sesja użytkownika nie jest w pełni przekonwertowana do zarządzania przez systemd (co jest mało prawdopodobne) systemd nie jest w ogóle zaangażowany w jej uruchomienie.

„PA jest zwykle uruchamiany ze skryptu lub usługi konfiguracji sesji. W Gnome jest to na przykład sesja gnome. Jest również automatycznie spawnowany na żądanie, jeśli biblioteki są używane i zauważ, że ich brakuje.”

Na przykład w Debian Stretch (Testowanie) przeglądarka IceWeasel łączy dwa obiekty współdzielone libpulse *: 1) libpulsecommon-7.1.so; oraz 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

Możesz zobaczyć, które uruchomione procesy prowadzą do libpulse *. Na przykład najpierw pobierz listę współdzielonych obiektów libpulse *, a następnie uruchom lsof na każdym z nich (uwaga: pochodzi z Debian Stretch (Testowanie), więc Twoje wyniki mogą się różnić):

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

Aby powiedzieć tym procesom, aby nie pojawiały się automatycznie PulseAudio, edytuj ~ / .config / pulse / client.conf i dodaj linię

autospawn = no

PulseAudio i jego biblioteki ogólnie przestrzegają tego ustawienia.

Łączenie libpulse * przez uruchamianie procesów może również wskazywać, dlaczego PulseAudio odradza się tak szybko. Wygląda na to, że strona FreeDesktop.org, „ Running PulseAudio ”:

„... zazwyczaj niektóre aplikacje działające w tle natychmiast się ponownie łączą, co powoduje natychmiastowe ponowne uruchomienie serwera”.

Wygląda na to, że wskazujesz, że uruchamiasz menedżera okien i3 za pomocą konsoli (uruchamiając xinit) i nie korzystasz z menedżera wyświetlania ani środowiska graficznego. Pozostała część tej odpowiedzi zawiera szczegółowe informacje dla tych, którzy używają GNOME, KDE i tak dalej.

INFORMACJE DODATKOWE, DLA AUTOSTARTU GNOME / KDE

Pakiet PulseAudio (5.0-13), w Debian Jessie (Stable) amd64, instaluje następujące cztery pliki systemowe :

  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

Niektórzy menedżerowie sesji graficznych automatycznie uruchamiają skrypty autostartu FreeDesktop.org przy logowaniu użytkownika. Z kolei skrypt autostartu PulseAudio informuje menedżerów sesji graficznych, aby uruchomili odpowiedni skrypt startowy PulseAudio:

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

Skrypty te wywołują klienta PulseAudio / usr / bin / pactl, aby załadować moduły PulseAudio, które odradzają serwer PulseAudio jako produkt uboczny (uwaga: jeśli masz autospawn ustawiony na „nie”, pactl szanuje to i nie będzie automatycznie wyświetlał serwera PulseAudio).

Więcej szczegółów na stronie FreeDesktop.org „ Uruchamianie PulseAudio ”.

Niektóre menedżery wyświetlania, dodatkowo i w innych dystrybucjach, mogą uruchamiać PulseAudio (na przykład SDDM, na ArchLinux . Chociaż opiekunowie mogą już to rozwiązać).


3

Pulseaudio to mały demon. man pulseaudiomówi, że możesz go wyłączyć za pomocą polecenia, pulseaudio --killale zrobienie tego powoduje ponowne narodziny - odradza się samo. Zwykły skrypt init jest tam, aby uruchomić go w bagażniku /etc/rc2.d/S50pulseaudio. Ale kiedy spróbujesz kontrolować to w normalny sposób, Linux nie działa, ponieważ uruchamianie /etc/init.d/pulseaudio stopgo nie zatrzymuje. Usunięcie /etc/rc2.d/S50pulseaudionie uniemożliwia uruchomienia go podczas rozruchu.

Aby zatrzymać swój nałóg respawning, otwarty /etc/pulse/client.conf, zmiany autospawn = yesdo autospawn = noi ustaw demona binarne do /bin/true. Upewnij się, że te wiersze nie są komentowane, jak poniżej:

 autospawn = no
 daemon-binary = /bin/true

Teraz możemy poradzić sobie z normalnymi plikami startowymi Linuksa. Najpierw usuń /etc/rc2.d/S50pulseaudio. Lub możesz zmienić nazwę na polecenie zabicia, co zachowuje link na wypadek, gdybyś chciał go ponownie:

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

LUB

Nie może być więcej jeden plik startowy zrezygnować z: /etc/X11/Xsession.d/70pulseaudio. To uruchamia Puls, gdy rozpoczyna się sesja Gnome. Usuń go lub skopiuj do innego katalogu na wypadek, gdybyś chciał go zapisać, i ponownie sprawdź dokładną nazwę pliku. Przydatny trik, gdy znajdziesz skrypty, które uruchamiają PulseAudio, jest zmiana binarnego, który nazywają od /usr/bin/pulseaudiocelu /bin/true. Jest to miły, mały plik wykonywalny, którego jedynym zadaniem jest „nic nie robić, z powodzeniem”. Uszczęśliwia skrypty i jest wygodnym symbolem zastępczym, jeśli kiedykolwiek chcesz go zmienić.

Po wyczyszczeniu wszystkich skryptów uruchamiania i odradzania, teraz użyj poniższych poleceń, aby zatrzymać i uruchomić pulsacyjny dźwięk.

 $ pulseaudio --kill
 $ pulseaudio --start

1
To trochę pomaga, ale tak naprawdę wcale nie odpowiada na pytanie. Nadal nie mam pojęcia, jak / gdzie / dlaczego PulseAudio początkowo uruchamia się w moim systemie. Debian 8 używa systemd i, jak powiedziałem systemctl list-units -a, nie zawiera PulseAudio. xinit uruchamia skrypty zi /etc/X11/Xsession.djak wspomniano, nie zawiera też PulseAudio.
Hubro

jaki jest proces nadrzędny dla twojego procesu pulseaudio?
Thushi

2
Tekst tej odpowiedzi wydaje się pochodzić z artykułu z 2010 roku autorstwa Carli Schroder: linuxplanet.com/linuxplanet/tutorials/7130/2 . Wydaje się, że instrukcje nie dotyczą już Debiana Jessie i PulseAudio (5.0-13).
iokevins,

0

Odpowiedź udzielona przez Thushi / Carla Schroder (patrz następna odpowiedź) nadal działa dobrze po aktualizacji z debian wheezy do jessie. Po zbadaniu moich komunikatów rozruchowych wystąpił następujący błąd (błąd znajduje się w ostatniej linii).

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 został uruchomiony dwa razy. Raz przez rtkit-daemon, a drugi raz przez GNOME / KDE AUTOSTART lub inną aplikację. W każdym razie ustawienie w /etc/pulse/client.conf

autospawn = no
daemon-binary = /bin/true

rozwiązał mój problem. Jedyne, czego nie mogę potwierdzić, to to, że nie ma już żadnych skryptów startowych w żadnym katalogu /etc/rcX.d. Całkiem jasne, ponieważ rtkit-daemon wykonuje pracę z interakcją systemd.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.