[libvirt] [PATCH v2] qemu: Allow using regular audio backends with VNC

Daniel P. Berrange berrange at redhat.com
Tue May 25 10:45:01 UTC 2010


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


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 :|




More information about the libvir-list mailing list