PulseAudio如何启动?


16

PulseAudio始终在我的系统上运行,如果崩溃或被杀死,它总是立即重新启动。但是,我从未真正启动 PulseAudio。

我已经检查了/etc/init.d//etc/X11/Xsession.d/,并且已经检查了systemctl list-units -a,而PulseAudio却找不到。

在没有我运行的情况下,PulseAudio看起来如何神奇地自动启动,并且在死后如何立即重新启动?

我正在将Debian 8(jessie)与xinit和i3窗口管理器以及PulseAudio 5一起使用。

Answers:


14

在运行X和i3窗口管理器之前或之后,链接到libpulse *共享对象家族的任何进程似乎都可能在用户进程下隐式自动生成PulseAudio服务器,作为尝试与音频子系统接口的副产品。PulseAudio的创建者Lennart Poettering似乎在2015年5月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(测试),因此您的输出可能会有所不同):

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 ”似乎证实了这一点:

“ ...通常,某些后台应用程序将立即重新连接,从而导致服务器立即重新启动。”

您似乎表明您是通过控制台(通过运行xinit)启动i3窗口管理器的,并且不使用显示管理器或桌面环境。该答案的其余部分详细介绍了那些确实使用GNOME,KDE等的信息。

附加信息,用于GNOME / KDE自动启动

Debian Jessie(Stable)amd64中的Package PulseAudio(5.0-13)软件包安装以下四个系统文件

  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页面“ Running PulseAudio ”上有更多详细信息。

另外,在其他发行版中,一些显示管理器可能会启动PulseAudio(例如,ArchLinux上的SDDM。尽管现在维护人员可能已经解决了这一问题)。


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 = yesautospawn = 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。当Gnome会话开始时,这将启动Pulse。删除它或将其复制到其他目录,以备保存,然后再次验证确切的文件名。找到启动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。
2015年

您的pulseaudio进程的父进程是什么?
2015年

1
这个答案的文字似乎来自于Carla Schroder在2010年发表的一篇文章:linuxplanet.com/linuxplanet/tutorials/7130/2。该说明似乎不再适用于Debian Jessie和PulseAudio(5.0-13)。
iokevins 2015年

0

从debian wheezy升级到jessie之后,Thuchhi / Carla Schroder给出的答案(请参阅下一个答案)仍然可以正常工作。在研究了我的启动消息后,我得到了以下错误(该错误在最后一行中列出)。

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守护程序执行,另一次由GNOME / KDE AUTOSTART或其他应用程序执行。无论如何在/etc/pulse/client.conf中进行设置

autospawn = no
daemon-binary = /bin/true

解决了我的问题。我无法确认的唯一一件事是,任何/etc/rcX.d目录中都没有任何启动脚本。很清楚,因为rtkit守护程序通过systemd的交互来完成工作。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.