Mark McLoughlin 38cf1b
From 4721ceb9b85daabe53804627473b06ced821c695 Mon Sep 17 00:00:00 2001
Mark McLoughlin 38cf1b
From: Daniel P. Berrange <berrange@redhat.com>
Mark McLoughlin 38cf1b
Date: Mon, 14 Sep 2009 11:23:20 +0100
Mark McLoughlin 38cf1b
Subject: [PATCH] Allow control over QEMU audio backend
Mark McLoughlin 38cf1b
Mark McLoughlin 38cf1b
When using VNC for graphics + keyboard + mouse, we shouldn't
Mark McLoughlin 38cf1b
then use the host OS for audio. Audio should go back over
Mark McLoughlin 38cf1b
VNC.
Mark McLoughlin 38cf1b
Mark McLoughlin 38cf1b
When using SDL for graphics, we should use the host OS for
Mark McLoughlin 38cf1b
audio since that's where the display is. We need to allow
Mark McLoughlin 38cf1b
certain QEMU env variables to be passed through to guest
Mark McLoughlin 38cf1b
too to allow choice of QEMU audio backend.
Mark McLoughlin 38cf1b
Mark McLoughlin 38cf1b
* qemud/libvirtd.sysconf: Mention QEMU/SDL audio env vars
Mark McLoughlin 38cf1b
* src/qemu_conf.c: Passthrough QEMU/SDL audio env for SDL display,
Mark McLoughlin 38cf1b
  disable host audio for VNC display
Mark McLoughlin 38cf1b
Mark McLoughlin 38cf1b
(cherry picked from commit b08e6d38ae7a0ed70300d7d82107f83fddb60f44)
Mark McLoughlin 38cf1b
Mark McLoughlin 38cf1b
Fedora-patch: libvirt-disable-audio-backend.patch
Mark McLoughlin 38cf1b
---
Mark McLoughlin 38cf1b
 qemud/libvirtd.sysconf |    8 ++++++++
Mark McLoughlin 38cf1b
 src/qemu_conf.c        |   14 ++++++++++++++
Mark McLoughlin 38cf1b
 2 files changed, 22 insertions(+), 0 deletions(-)
Mark McLoughlin 38cf1b
Mark McLoughlin 38cf1b
diff --git a/qemud/libvirtd.sysconf b/qemud/libvirtd.sysconf
Mark McLoughlin 38cf1b
index fe4596a..28080a0 100644
Mark McLoughlin 38cf1b
--- a/qemud/libvirtd.sysconf
Mark McLoughlin 38cf1b
+++ b/qemud/libvirtd.sysconf
Mark McLoughlin 38cf1b
@@ -7,3 +7,11 @@
Mark McLoughlin 38cf1b
 
Mark McLoughlin 38cf1b
 # Override Kerberos service keytab for SASL/GSSAPI
Mark McLoughlin 38cf1b
 #KRB5_KTNAME=/etc/libvirt/krb5.tab
Mark McLoughlin 38cf1b
+
Mark McLoughlin 38cf1b
+# Override the QEMU/SDL default audio driver probing when
Mark McLoughlin 38cf1b
+# starting virtual machines using SDL graphics
Mark McLoughlin 38cf1b
+#
Mark McLoughlin 38cf1b
+# NB these have no effect for VMs using VNC
Mark McLoughlin 38cf1b
+#QEMU_AUDIO_DRV=sdl
Mark McLoughlin 38cf1b
+#
Mark McLoughlin 38cf1b
+#SDL_AUDIODRIVER=pulse
Mark McLoughlin 38cf1b
diff --git a/src/qemu_conf.c b/src/qemu_conf.c
Mark McLoughlin 38cf1b
index f92bcef..0dd0624 100644
Mark McLoughlin 38cf1b
--- a/src/qemu_conf.c
Mark McLoughlin 38cf1b
+++ b/src/qemu_conf.c
Mark McLoughlin 38cf1b
@@ -2109,6 +2109,13 @@ int qemudBuildCommandLine(virConnectPtr conn,
Mark McLoughlin 38cf1b
             ADD_ARG_LIT("-k");
Mark McLoughlin 38cf1b
             ADD_ARG_LIT(def->graphics[0]->data.vnc.keymap);
Mark McLoughlin 38cf1b
         }
Mark McLoughlin 38cf1b
+
Mark McLoughlin 38cf1b
+        /* QEMU implements a VNC extension for providing audio, so we
Mark McLoughlin 38cf1b
+         * set the audio backend to none, to prevent it opening the
Mark McLoughlin 38cf1b
+         * host OS audio devices since that causes security issues
Mark McLoughlin 38cf1b
+         * and is non-sensical when using VNC.
Mark McLoughlin 38cf1b
+         */
Mark McLoughlin 38cf1b
+        ADD_ENV_LIT("QEMU_AUDIO_DRV=none");
Mark McLoughlin 38cf1b
     } else if ((def->ngraphics == 1) &&
Mark McLoughlin 38cf1b
                def->graphics[0]->type == VIR_DOMAIN_GRAPHICS_TYPE_SDL) {
Mark McLoughlin 38cf1b
         char *xauth = NULL;
Mark McLoughlin 38cf1b
@@ -2131,6 +2138,13 @@ int qemudBuildCommandLine(virConnectPtr conn,
Mark McLoughlin 38cf1b
             ADD_ENV(display);
Mark McLoughlin 38cf1b
         if (def->graphics[0]->data.sdl.fullscreen)
Mark McLoughlin 38cf1b
             ADD_ARG_LIT("-full-screen");
Mark McLoughlin 38cf1b
+
Mark McLoughlin 38cf1b
+        /* If using SDL for video, then we should just let it
Mark McLoughlin 38cf1b
+         * use QEMU's host audio drivers, possibly SDL too
Mark McLoughlin 38cf1b
+         * User can set these two before starting libvirtd
Mark McLoughlin 38cf1b
+         */
Mark McLoughlin 38cf1b
+        ADD_ENV_COPY("QEMU_AUDIO_DRV");
Mark McLoughlin 38cf1b
+        ADD_ENV_COPY("SDL_AUDIODRIVER");
Mark McLoughlin 38cf1b
     }
Mark McLoughlin 38cf1b
 
Mark McLoughlin 38cf1b
     if (def->nvideos) {
Mark McLoughlin 38cf1b
-- 
Mark McLoughlin 38cf1b
1.6.2.5
Mark McLoughlin 38cf1b