З чого починається PulseAudio?


19

PulseAudio завжди працює в моїй системі, і він завжди миттєво перезапускається, якщо він виходить з ладу або я його вбиваю. Однак я ніколи фактично не запускаю PulseAudio.

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

Чому PulseAudio, здавалося б, магічно починається сам, без того, щоб я його ніколи запускав, і як він миттєво перезапускається, коли вмирає?

Я використовую Debian 8 (jessie) з xinit та менеджером вікон i3 та PulseAudio 5.

Відповіді:


15

Здається, що будь-який процес, що посилається на сімейство об'єктів libpulse * із спільними об'єктами - до або після запуску X та менеджера вікон i3 - може неявно автоматично відкрити сервер PulseAudio під вашим користувацьким процесом як побічний продукт спроб взаємодії з аудіопідсистемою . Творець PulseAudio Lennart Poettering, схоже, підтверджує це в електронному листі 2015-05-29 до списку розсилки systemd-devel :

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

"PA зазвичай починається з сценарію налаштування сеансу або сервісу. Наприклад, у Gnome це gnome-сесія. Він також автоматично породжується за запитом, якщо використовуються бібліотеки, і зауважте, що він відсутній."

Наприклад, на 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 (Тестування), тому ваш вихід може відрізнятися):

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 AUTOSTART

Пакет 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 як побічний продукт (зауважте: якщо для автоматичного спасена встановлено значення "ні", Pactl поважає це і не буде автоматично розгорнутий сервер PulseAudio).

Детальніше на сторінці FreeDesktop.org " Запуск PulseAudio ".

Деякі менеджери дисплеїв, на додачу та в інших дистрибутивах, можуть запустити PulseAudio (наприклад, SDDM, на ArchLinux . Хоча технічне обслуговування, можливо, вже вирішило це).


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, і встановити демон-двійковий файл /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

1
Це трохи допомагає, але насправді зовсім не відповідає на питання. Я досі не маю уявлення, як / де / чому PulseAudio спочатку запускається в моїй системі. Debian 8 використовує systemd, і, як я вже сказав systemctl list-units -a, не включає PulseAudio. xinit запускає скрипти з /etc/X11/Xsession.dі, як згадувалося, він також не включає PulseAudio.
Хубро

який батьківський процес для вашого імпульсного аудіопроцесу?
Сухі

2
Текст цієї відповіді, схоже, походить із статті 2010 року Карли Шродер : linuxplanet.com/linuxplanet/tutorials/7130/2 . Інструкція більше не стосується Debian Jessie та PulseAudio (5,0-13).
iokevins

0

Відповідь, яку дала Сочі / Карла Шродер (див. Наступну відповідь), все ще працює добре після переходу від 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.

пульс-аудіо-демон був запущений двічі. Один раз rtkit-демон, а інший раз GNOME / KDE AUTOSTART або інший додаток. У будь-якому випадку налаштування в /etc/pulse/client.conf

autospawn = no
daemon-binary = /bin/true

вирішив мою проблему. Єдине, що я не можу підтвердити, це те, що в жодному каталозі /etc/rcX.d більше немає сценаріїв запуску. Досить зрозуміло, тому що rtkit-демон виконує роботу при взаємодії systemd.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.