On 05/25/2010 06:45 AM, Daniel P. Berrange wrote: > 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 <crobinso@xxxxxxxxxx> >> --- >> 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 Thanks, pushed now with the *.aug additions. - Cole -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list