commit 377bc412ce10845930346744e30fe9c4790e5e63 Author: Cole Robinson Date: Wed May 19 16:03:52 2010 -0400 daemon: Export SDL audio environment variables /etc/sysconfig/libvirtd has a few environment variables for configuring libvirt SDL audio. The libvirtd process doesn't see these, however, because they are never exported. Let's export the variables after sourcing the sysconfig script. There is another problem here that the commented out values in the sysconfig script are not neccessarily the actual defaults, we are qemus mercy here. Not sure how to solve that. diff --git a/daemon/libvirtd.init.in b/daemon/libvirtd.init.in index 809433e..aa7870c 100644 --- a/daemon/libvirtd.init.in +++ b/daemon/libvirtd.init.in @@ -45,6 +45,9 @@ KRB5_KTNAME=/etc/libvirt/krb5.tab test -f @sysconfdir@/sysconfig/libvirtd && . @sysconfdir@/sysconfig/libvirtd +export QEMU_AUDIO_DRV +export SDL_AUDIODRIVER + LIBVIRTD_CONFIG_ARGS= if [ -n "$LIBVIRTD_CONFIG" ] then commit 7f44743c524faa493d05eaf026f1e90a807e502b Author: Cole Robinson Date: Wed May 26 10:51:36 2010 -0400 daemon: sysconf: Update comment about VNC audio diff --git a/daemon/libvirtd.sysconf b/daemon/libvirtd.sysconf index 28080a0..b730c5e 100644 --- a/daemon/libvirtd.sysconf +++ b/daemon/libvirtd.sysconf @@ -11,7 +11,8 @@ # Override the QEMU/SDL default audio driver probing when # starting virtual machines using SDL graphics # -# NB these have no effect for VMs using VNC +# NB these have no effect for VMs using VNC, unless vnc_allow_host_audio +# is enabled in /etc/libvirt/qemu.conf #QEMU_AUDIO_DRV=sdl # #SDL_AUDIODRIVER=pulse commit fb3ebd0397980ae035e66f0008b09e13377ef80f Author: Cole Robinson Date: Wed May 19 16:41:01 2010 -0400 qemu: Allow using regular audio backends with VNC 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 diff --git a/src/qemu/libvirtd_qemu.aug b/src/qemu/libvirtd_qemu.aug index 5bd60b3..551cc20 100644 --- a/src/qemu/libvirtd_qemu.aug +++ b/src/qemu/libvirtd_qemu.aug @@ -38,6 +38,7 @@ module Libvirtd_qemu = | str_entry "save_image_format" | str_entry "hugetlbfs_mount" | bool_entry "relaxed_acs_check" + | bool_entry "vnc_allow_host_audio" (* Each enty in the config is one of the following three ... *) let entry = vnc_entry 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 */ diff --git a/src/qemu/test_libvirtd_qemu.aug b/src/qemu/test_libvirtd_qemu.aug index 2feedc0..a048ae5 100644 --- a/src/qemu/test_libvirtd_qemu.aug +++ b/src/qemu/test_libvirtd_qemu.aug @@ -97,6 +97,8 @@ save_image_format = \"gzip\" hugetlbfs_mount = \"/dev/hugepages\" relaxed_acs_check = 1 + +vnc_allow_host_audio = 1 " test Libvirtd_qemu.lns get conf = @@ -204,3 +206,5 @@ relaxed_acs_check = 1 { "hugetlbfs_mount" = "/dev/hugepages" } { "#empty" } { "relaxed_acs_check" = "1" } +{ "#empty" } +{ "vnc_allow_host_audio" = "1" }