Freebsd

為什麼PulseAudio需要係統dbus?

  • April 20, 2021

在這個單使用者 FreeBSD 桌面上,各種桌面組件使用使用者自己的dbus-instance 進行通信。

然而,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?通過啟用系統範圍的服務,我將獲得什麼?

為什麼它需要與系統範圍的 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 並且無法設置優先級/實時,它會返回錯誤並且不會重試。

引用自:https://unix.stackexchange.com/questions/645688