为什么PulseAudio需要系统dbus?

为什么PulseAudio需要系统dbus?

在这个单用户 FreeBSD 桌面上,各种桌面组件使用用户自己的dbus实例进行通信。

然而,pulseaudio 尝试与系统范围dbus(未启用)对话,但无法访问它,并向日志发送垃圾邮件消息:

Failed to connect to system bus: Failed to connect to socket /var/run/dbus/system_bus_socket: No such file or directory

如果我dbus手动启动 -service,pulseaudio将记录:

... : [(null)] oss-util.c: '/dev/dsp0' doesn't support full duplex
... : [(null)] oss-util.c: '/dev/dsp1' doesn't support full duplex
... : [(null)] oss-util.c: '/dev/dsp2' doesn't support full duplex
... : [(null)] oss-util.c: '/dev/dsp3' doesn't support full duplex

然后闭嘴。为什么它需要与系统范围的对话dbus?启用全系统服务我能得到什么?

答案1

为什么它需要与系统范围的 dbus 通信?

它尝试与系统范围的 dbus 通信,以便将自己设置为高优先级和实时的。

看:

https://github.com/pulseaudio/pulseaudio/blob/v13.0/src/pulsecore/core-util.c#L706-L717

https://github.com/pulseaudio/pulseaudio/blob/v13.0/src/pulse/util.c#L406-L417

https://github.com/pulseaudio/pulseaudio/blob/v13.0/src/pulsecore/rtkit.c

启用全系统服务我能得到什么?

FreeBSD 上什么都没有。据我所知,RealTimeKit 在 FreeBSD 上不可用。 (实际上并不存在这样做的“需要”,尽管代码无论如何都试图这样做。)自述文件说需要 Linux:

https://git.0pointer.net/rtkit.git/tree/README#n217

看起来如果它无法连接到 dbus,它会重试,但如果它连接到 dbus 并且无法设置优先级/实时,它会返回错误并且不会重试。

相关内容