Создайте недостающий каталог и сделайте его перезаписываемым пользователем веб-сервера:
sudo mkdir /var/run/php-fastcgi/
sudo chgrp www-data /var/run/php-fastcgi/
sudo chmod 0770 /var/run/php-fastcgi/
Похоже, что любой процесс, связывающийся с семейством разделяемых объектов 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, устанавливает следующие четыре системных файла:
Некоторые графические менеджеры сессий автоматически запускают 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. Хотя мейнтейнеры, возможно, уже решили эту проблему).
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
Может быть еще один файл запуска для доставки с: /etc/x11/xsession.d/70Pulseudio
. Это запускает пульс, когда начинается сеанс GNOME. Удалите его или скопируйте его в другой каталог, если вы хотите сохранить его, и снова проверить точное имя файла. Полезный трюк, когда вы найдете скрипты, которые начнут PulseAudio, состоит в том, чтобы изменить двоичные, которые они звонят из / usr / bin / pulseaudio
, на / bin / true
. Это хороший маленький исполняемый файл, чья единственная работа - делать ничего, успешно ». Он поддерживает сценарии счастливыми, и это удобный заполнитель, если вы когда-нибудь хотите изменить его обратно.
Теперь, когда вы очистили все сценарии Startup и RespaWning, теперь используйте команды ниже, чтобы остановиться и запустить звук импульса.
$ pulseaudio --kill
$ pulseaudio --start
Ответ, данный 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.
Хотя этот вопрос по-прежнему актуален, ответ на него со временем изменился. Предыдущие ответы либо недостаточны, либо неверны, так как теперь 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 и не запускать сразу новый экземпляр, используйтеsystemctl --user stop
:
$ systemctl --user stop pulseaudio.service pulseaudio.socket
Если вы не хотите, чтобы 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
Используйте 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
.