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

Создайте недостающий каталог и сделайте его перезаписываемым пользователем веб-сервера:

sudo mkdir /var/run/php-fastcgi/
sudo chgrp www-data /var/run/php-fastcgi/
sudo chmod 0770 /var/run/php-fastcgi/
16
20.05.2015, 12:00
4 ответа

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

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

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

Например, в Debian Stretch (Testing), веб-браузер 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, "Running 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/bin/start-pulseaudio-x11
  4. /usr/bin/start-pulseaudio-kde

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

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

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

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

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

14
27.01.2020, 19:48

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

Чтобы остановить его воздействие привычки, открыть /etc/pulse/Client.conf , изменить AutoSpawn = Да - AutoSpawn = NO , и установить демон Бинарный на / BIN / TRUE . Убедитесь, что эти строки незамениваются, подобно этому:

 autospawn = no
 daemon-binary = /bin/true

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

$ MV /etc/rc2.d/s50pulseaudio /etc/rc2.d/k50pulseaudio

Or

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

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

 $ pulseaudio --kill
 $ pulseaudio --start
4
27.01.2020, 19:48

Ответ, данный 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.

0
27.01.2020, 19:48

С чего начать работу с PulseAudio?

Хотя этот вопрос по-прежнему актуален, ответ на него со временем изменился. Предыдущие ответы либо недостаточны, либо неверны, так как теперь PulseAudio запускается автоматически с помощью systemd пользователя, который, в свою очередь, запускается с помощью systemd при входе пользователя в систему.

$ 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/user@1000.service/pulseaudio.service
           ├─31080 /usr/bin/pulseaudio --daemonize=no
           └─31081 /usr/lib/x86_64-linux-gnu/pulse/gsettings-helper

Убить PulseAudio

Чтобы остановить процесс PulseAudio и не запускать сразу новый экземпляр, используйтеsystemctl --user stop:

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

Для отключения PulseAudio

Если вы не хотите, чтобы PulseAudio запускался автоматически при входе в систему, вы можете отключить его следующим образом:

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

(Между прочим, даже если он отключен, вы все равно можете запустить PulseAudio, когда захотите, с помощью systemctl --user start.)


Отвечая на вопрос в целом

Приведенные выше команды — это все, что вам нужно. Однако, если вам интересно, как найти решение самостоятельно, продолжайте читать.

Чтобы узнать, в каких процессах открыта звуковая карта

Используйте команды lsofили fuser -v, чтобы узнать, в каких процессах открыты файлы устройств.

$ 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

Чтобы узнать, какой процесс запустил PulseAudio

Используйте pstree -s, чтобы показать родительские процессы следующим образом:

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

Я использовал это, чтобы увидеть, что PulseAudio на самом деле запускается экземпляромsystemd(PID 738 ), который работал в моей собственной учетной записи:

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

Отсюда легко догадаться, что для его остановки нужно использовать systemctl --user.

17
10.03.2020, 12:25

Теги

Похожие вопросы