[libvirt] [PATCH v2] qemu: Allow using regular audio backends with VNC
Cole Robinson
crobinso at redhat.com
Tue May 25 16:31:55 UTC 2010
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 at 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
Thanks, pushed now with the *.aug additions.
- Cole
More information about the libvir-list
mailing list