On Mon, May 24, 2010 at 02:52:30PM -0400, Cole Robinson wrote: > Currently all host audio backends are disabled if a VM is using VNC, in > favor of the QEMU VNC audio extension. Unfortunately no released VNC > client supports this extension, so users have no way of getting audio > to work if using VNC. > > Add a new config option in qemu.conf which allows changing libvirt's > behavior, but keep the default intact. > > v2: Fix doc typos, change name to vnc_allow_host_audio > > Signed-off-by: Cole Robinson <crobi...@redhat.com> > --- > src/qemu/qemu.conf | 10 ++++++++++ > src/qemu/qemu_conf.c | 17 ++++++++++++----- > src/qemu/qemu_conf.h | 2 ++ > 3 files changed, 24 insertions(+), 5 deletions(-) > > diff --git a/src/qemu/qemu.conf b/src/qemu/qemu.conf > index 3da332f..98a1176 100644 > --- a/src/qemu/qemu.conf > +++ b/src/qemu/qemu.conf > @@ -168,3 +168,13 @@ > # be assigned to guests. > # > # relaxed_acs_check = 1 > + > + > +# QEMU implements an extension for providing audio over a VNC connection, > +# though if your VNC client does not support it, your only chance for getting > +# sound output is through regular audio backends. By default, libvirt will > +# disable all QEMU sound backends if using VNC, since they can cause > +# permissions issues. Enabling this option will make libvirtd honor the > +# QEMU_AUDIO_DRV environment variable when using VNC. > +# > +# vnc_allow_host_audio = 0 > diff --git a/src/qemu/qemu_conf.c b/src/qemu/qemu_conf.c > index 2755545..b4d8e74 100644 > --- a/src/qemu/qemu_conf.c > +++ b/src/qemu/qemu_conf.c > @@ -351,6 +351,10 @@ int qemudLoadDriverConfig(struct qemud_driver *driver, > CHECK_TYPE ("relaxed_acs_check", VIR_CONF_LONG); > if (p) driver->relaxedACS = p->l; > > + p = virConfGetValue (conf, "vnc_allow_host_audio"); > + CHECK_TYPE ("vnc_allow_host_audio", VIR_CONF_LONG); > + if (p) driver->vncAllowHostAudio = p->l; > + > virConfFree (conf); > return 0; > } > @@ -4399,12 +4403,15 @@ int qemudBuildCommandLine(virConnectPtr conn, > ADD_ARG_LIT(def->graphics[0]->data.vnc.keymap); > } > > - /* QEMU implements a VNC extension for providing audio, so we > - * set the audio backend to none, to prevent it opening the > - * host OS audio devices since that causes security issues > - * and is non-sensical when using VNC. > + /* Unless user requested it, set the audio backend to none, to > + * prevent it opening the host OS audio devices, since that causes > + * security issues and might not work when using VNC. > */ > - ADD_ENV_LIT("QEMU_AUDIO_DRV=none"); > + if (driver->vncAllowHostAudio) { > + ADD_ENV_COPY("QEMU_AUDIO_DRV"); > + } else { > + ADD_ENV_LIT("QEMU_AUDIO_DRV=none"); > + } > } else if ((def->ngraphics == 1) && > def->graphics[0]->type == VIR_DOMAIN_GRAPHICS_TYPE_SDL) { > char *xauth = NULL; > diff --git a/src/qemu/qemu_conf.h b/src/qemu/qemu_conf.h > index 8fd8d79..7fb4de5 100644 > --- a/src/qemu/qemu_conf.h > +++ b/src/qemu/qemu_conf.h > @@ -138,6 +138,8 @@ struct qemud_driver { > > unsigned int relaxedACS : 1; > > + unsigned int vncAllowHostAudio : 1; > + > virCapsPtr caps; > > /* An array of callbacks */ > --
ACK Though it should also have a addition to the qemu.aug and test_qemu.aug files too Daniel -- |: Red Hat, Engineering, London -o- http://people.redhat.com/berrange/ :| |: http://libvirt.org -o- http://virt-manager.org -o- http://deltacloud.org :| |: http://autobuild.org -o- http://search.cpan.org/~danberr/ :| |: GnuPG: 7D3B9505 -o- F3C9 553F A1DA 4AC2 5648 23C1 B3DF F742 7D3B 9505 :| -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list