在这个单用户 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 并且无法设置优先级/实时,它会返回错误并且不会重试。