Hi
On Tue, Feb 3, 2026 at 7:42 PM Mark Cave-Ayland
<mark.caveayland@nutanix.com> wrote:
>
> On 23/01/2026 07:49, marcandre.lureau@redhat.com wrote:
>
> > From: Marc-André Lureau <marcandre.lureau@redhat.com>
> >
> > Set "using_dbus_display" during early_dbus_init(), so that we can try to
> > create the "dbus" audio backend by default from audio_prio_list.
> >
> > This makes dbus audio work by default when using an audio device,
> > without having to setup and wire up the -audiodev manually.
> >
> > The added FIXME is addressed in the following commits.
> >
> > Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
> > ---
> > audio/audio.c | 3 +++
> > audio/dbusaudio.c | 8 +++++++-
> > ui/dbus.c | 22 +++++++++++++++++-----
> > 3 files changed, 27 insertions(+), 6 deletions(-)
> >
> > diff --git a/audio/audio.c b/audio/audio.c
> > index e5841d7f0e6..80e4ba83712 100644
> > --- a/audio/audio.c
> > +++ b/audio/audio.c
> > @@ -57,6 +57,9 @@
> > that we generate the list.
> > */
> > const char *audio_prio_list[] = {
> > +#ifdef CONFIG_GIO
> > + "dbus",
> > +#endif
> > "spice",
> > CONFIG_AUDIO_DRIVERS
> > "none",
> > diff --git a/audio/dbusaudio.c b/audio/dbusaudio.c
> > index d729a810aa6..1fe7c4ed647 100644
> > --- a/audio/dbusaudio.c
> > +++ b/audio/dbusaudio.c
> > @@ -32,6 +32,7 @@
> > #endif
> >
> > #include "ui/dbus.h"
> > +#include "ui/dbus-display.h"
> > #include "ui/dbus-display1.h"
> >
> > #define AUDIO_CAP "dbus"
> > @@ -408,8 +409,13 @@ dbus_enable_in(HWVoiceIn *hw, bool enable)
> > static void *
> > dbus_audio_init(Audiodev *dev, Error **errp)
> > {
> > - DBusAudio *da = g_new0(DBusAudio, 1);
> > + DBusAudio *da;
> >
> > + if (!qemu_using_dbus_display(errp)) {
> > + return NULL;
> > + }
> > +
> > + da = g_new0(DBusAudio, 1);
> > da->dev = dev;
> > da->out_listeners = g_hash_table_new_full(g_str_hash, g_str_equal,
> > g_free, g_object_unref);
> > diff --git a/ui/dbus.c b/ui/dbus.c
> > index d2dff332585..e44e2ff9877 100644
> > --- a/ui/dbus.c
> > +++ b/ui/dbus.c
> > @@ -35,6 +35,7 @@
> > #include "ui/egl-context.h"
> > #endif
> > #include "qemu/audio.h"
> > +#include "audio/audio_int.h" /* FIXME: use QOM dynamic cast instead of drv->name */
> > #include "qapi/error.h"
> > #include "trace.h"
> >
> > @@ -218,9 +219,20 @@ dbus_display_complete(UserCreatable *uc, Error **errp)
> > return;
> > }
> >
> > - if (dd->audiodev && *dd->audiodev) {
> > - AudioBackend *audio_be = audio_be_by_name(dd->audiodev, errp);
> > - if (!audio_be || !audio_be_set_dbus_server(audio_be, dd->server, dd->p2p, errp)) {
> > + {
> > + AudioBackend *audio_be = audio_get_default_audio_be(NULL);
> > +
> > + if (audio_be && !g_str_equal(audio_be->drv->name, "dbus")) {
> > + audio_be = NULL;
> > + }
> > + if (dd->audiodev && *dd->audiodev) {
> > + audio_be = audio_be_by_name(dd->audiodev, errp);
> > + if (!audio_be) {
> > + return;
> > + }
> > + }
> > + if (audio_be &&
> > + !audio_be_set_dbus_server(audio_be, dd->server, dd->p2p, errp)) {
> > return;
> > }
> > }
> > @@ -475,6 +487,8 @@ early_dbus_init(DisplayOptions *opts)
> > #endif
> > }
> >
> > + using_dbus_display = 1;
> > +
> > type_register_static(&dbus_vc_type_info);
> > }
> >
> > @@ -488,8 +502,6 @@ dbus_init(DisplayState *ds, DisplayOptions *opts)
> > exit(1);
> > }
> >
> > - using_dbus_display = 1;
> > -
> > object_new_with_props(TYPE_DBUS_DISPLAY,
> > object_get_objects_root(),
> > "dbus-display", &error_fatal,
>
> Looks reasonable to me: out of curiosity, what's the best client to use
> to test a combined dbus display/audio setup? Anyhow:
>
> Reviewed-by: Mark Cave-Ayland <mark.caveayland@nutanix.com>
thanks
I only know of 2 desktop clients, libmks[1] and qemu-display/rdw[2].
But only qemu-display/rdw actually implements audio support.
[1] https://gitlab.gnome.org/GNOME/libmks
[2] https://gitlab.com/marcandre.lureau/qemu-display
--
Marc-André Lureau