[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