Как запускается PulseAudio?

16

PulseAudio всегда работает в моей системе, и он всегда мгновенно перезагружается, если происходит сбой или я его убиваю. Тем не менее, я никогда не запускаю PulseAudio.

Я проверил /etc/init.d/и /etc/X11/Xsession.d/, и я проверил systemctl list-units -a, и PulseAudio нигде не найти.

Почему PulseAudio, по-видимому, волшебным образом запускается сам по себе, и я никогда не запускаю его, и как он мгновенно перезапускается, когда умирает?

Я использую Debian 8 (jessie) с xinit и оконным менеджером i3, а также PulseAudio 5.

Hubro
источник

Ответы:

14

Кажется, что любой процесс, связывающийся с семейством общих объектов libpulse * - до или после запуска X и оконного менеджера i3 - может неявно автоматически вызывать сервер PulseAudio под вашим пользовательским процессом как побочный результат попыток взаимодействия с аудиоподсистемой , Создатель PulseAudio Леннарт Поэттеринг, кажется, подтверждает это в электронном письме 2015-05-29 в список рассылки systemd-devel :

"pulseaudio - это, как правило, не системная служба, а пользовательская служба. Если ваш пользовательский сеанс не полностью преобразован для управления системой systemd (что маловероятно), systemd, следовательно, вообще не участвует в его запуске.

«PA обычно запускается из сценария или службы установки сеанса. В Gnome это, например, gnome-session. Он также автоматически создается по требованию, если используются библиотеки, и обратите внимание, что он отсутствует».

Например, в Debian Stretch (Тестирование) веб-браузер IceWeasel ссылается на два общих объекта libpulse *: 1) libpulsecommon-7.1.so; и 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

Вы можете увидеть, какие запущенные процессы ссылаются на libpulse *. Например, сначала получите список общих объектов libpulse *, затем запустите lsof для каждого (примечание: это происходит из Debian Stretch (Testing), поэтому ваш вывод может отличаться):

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

Чтобы запретить этим процессам автоматически вызывать PulseAudio, отредактируйте ~ / .config / pulse / client.conf и добавьте строку

autospawn = no

PulseAudio и его библиотеки в целом соблюдают эту настройку.

Связывание libpulse * с помощью запущенных процессов также может указывать, почему PulseAudio запускается так быстро. Страница FreeDesktop.org « Запуск PulseAudio », кажется, подтверждает это:

«... обычно какое-то фоновое приложение немедленно переподключается, что приводит к немедленной перезагрузке сервера».

Похоже, вы указываете, что запускаете диспетчер окон i3 через консоль (с помощью xinit) и не используете диспетчер отображения или среду рабочего стола. Остальная часть этого ответа содержит подробную информацию для тех, кто использует GNOME, KDE и так далее.

ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ, ДЛЯ АВТОМОБИЛЯ GNOME / KDE

Пакет PulseAudio (5.0-13) в Debian Jessie (Stable) amd64 устанавливает следующие четыре системных файла :

  1. /etc/xdg/autostart/pulseaudio-kde.desktop
  2. /etc/xdg/autostart/pulseaudio.desktop
  3. / USR / бен / старт-PulseAudio-x11
  4. / USR / бен / запуск PulseAudio-KDE

Некоторые графические менеджеры сеансов автоматически запускают сценарии автозапуска FreeDesktop.org при входе пользователя. Сценарий автозапуска PulseAudio, в свою очередь, указывает графическим менеджерам сеансов запустить соответствующий сценарий запуска PulseAudio:

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

Эти сценарии вызывают PulseAudio client / usr / bin / pactl для загрузки модулей PulseAudio, который порождает сервер PulseAudio как побочный продукт (примечание: если у вас установлено autospawn «no», pactl учитывает это и не будет автоматически вызывать PulseAudio server).

Более подробно, на странице FreeDesktop.org « Запуск PulseAudio ».

Некоторые дисплеи дисплеев, в дополнение и в других дистрибутивах, могут запускать PulseAudio (например, SDDM в ArchLinux . Хотя, возможно, к этому моменту уже решили проблему с сопровождающими).

iokevins
источник
4

Pulseaudio - маленький демон. man pulseaudioговорит, что вы можете отключить его с помощью команды, pulseaudio --killно для этого снова нужно перерождение - оно возрождается само. Обычный сценарий инициализации для запуска при загрузке /etc/rc2.d/S50pulseaudio. Но когда вы пытаетесь контролировать это обычным способом Linux, он не работает, потому что запуск /etc/init.d/pulseaudio stopне останавливает его. Удаление /etc/rc2.d/S50pulseaudioне мешает запуску при загрузке.

Чтобы остановить его возрождающуюся привычку, откройте /etc/pulse/client.conf, измените autospawn = yesна autospawn = noи установите daemon-binary на /bin/true. Убедитесь, что эти строки не закомментированы, например:

 autospawn = no
 daemon-binary = /bin/true

Теперь мы можем иметь дело с обычными файлами запуска Linux. Сначала удалите /etc/rc2.d/S50pulseaudio. Или вы можете переименовать его в команду kill, которая сохраняет ссылку на случай, если вам когда-нибудь понадобится снова:

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

ИЛИ

Там может быть еще один загрузочный файл дозировать с: /etc/X11/Xsession.d/70pulseaudio. Это запускает Pulse, когда начинается сеанс Gnome. Удалите его или скопируйте в другой каталог, если вы хотите сохранить его, и снова проверьте точное имя файла. Полезный трюк, когда вы найдете скрипты , которые начинаются с PulseAudio, чтобы изменить двоичный файл , который они называют от /usr/bin/pulseaudioдо /bin/true. Это хороший маленький исполняемый файл, чья единственная работа - «ничего не делать, успешно». Это сохраняет сценарии счастливыми, и это удобный заполнитель, если вы когда-нибудь захотите изменить его обратно.

Теперь, когда вы удалили все сценарии запуска и перезапуска, теперь используйте приведенные ниже команды, чтобы остановить и запустить импульсный звук.

 $ pulseaudio --kill
 $ pulseaudio --start
Thushi
источник
1
Это немного помогает, но на самом деле не отвечает на вопрос. Я до сих пор не знаю, как / где / почему PulseAudio изначально запускается в моей системе. Debian 8 использует systemd и, как я уже сказал systemctl list-units -a, не включает PulseAudio. xinit запускает сценарии /etc/X11/Xsession.dи, как уже упоминалось, не включает PulseAudio.
Hubro
каков родительский процесс для вашего импульса и звука?
Туши
1
Похоже, что текст этого ответа взят из статьи 2010 года Карлы Шредер: linuxplanet.com/linuxplanet/tutorials/7130/2 . Кажется, инструкции больше не применяются к Debian Jessie и PulseAudio (5.0-13).
iokevins
0

Ответ, данный Thushi / Carla Schroder (см. Следующий ответ), все еще работает нормально после перехода с debian wheezy на jessie. Я получил следующую ошибку после исследования моих загрузочных сообщений (ошибка указана в последней строке).

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 запускался дважды. Один раз с помощью rtkit-daemon, а другой - с помощью GNOME / KDE AUTOSTART или другого приложения. В любом случае настройка в /etc/pulse/client.conf

autospawn = no
daemon-binary = /bin/true

решил мою проблему. Единственное, что я не могу подтвердить, так это то, что в каких-либо каталогах /etc/rcX.d больше нет скриптов запуска. Довольно ясно, потому что rtkit-daemon выполняет работу с взаимодействием systemd.

FalkH
источник