[libvirt] [Xen-devel] [PATCH 4/4] xenconfig: fix spice mousemode and copypaste

Fabio Fantoni fabio.fantoni at m2r.biz
Fri May 8 22:33:45 UTC 2015


2015-05-09 0:00 GMT+02:00 Jim Fehlig <jfehlig at suse.com>:

> From xl.cfg950 man page:
>
> spiceagent_mouse=BOOLEAN
> Whether SPICE agent is used for client mouse mode. The default is
> true (1) (turn on)
>
> spicevdagent=BOOLEAN
> Enables spice vdagent. The Spice vdagent is an optional component for
> enhancing user experience and performing guest-oriented management
> tasks. Its features includes: client mouse mode (no need to grab
> mouse by client, no mouse lag), automatic adjustment of screen
> resolution, copy and paste (text and image) between client and domU.
> It also requires vdagent service installed on domU o.s. to work.
> The default is 0.
>
> spice_clipboard_sharing=BOOLEAN
> Enables Spice clipboard sharing (copy/paste). It requires spicevdagent
> enabled. The default is false (0).
>
> So if spiceagent_mouse is enabled (client mouse mode) or
> spice_clipboard_sharing is enabled, spicevdagent must be enabled.
> Along with this change, s/spicedvagent/spicevdagent, set
> spiceagent_mouse correctly, and add a test for these spice
> features.
>

Thanks for your work in libvirt about improve/fix support for xen with
spice.
>From a fast look to code seems there is spice usbredirection support
missed, a feature that I think very useful:
http://xenbits.xen.org/gitweb/?p=xen.git;a=commitdiff;h=f5414ee57a17500e650ea11766474b11da940da2
There are also other spice settings added for xen 4.6 (image compression
and streaming video):
http://xenbits.xen.org/gitweb/?p=xen.git;a=commitdiff;h=bd71555985efc423b1a119b6a3177de855763453
http://xenbits.xen.org/gitweb/?p=xen.git;a=commitdiff;h=296c7f3284efe655d95a8ae045a5dc1a20d6fff0
And also another important that you already know and accepted today:
http://xenbits.xen.org/gitweb/?p=xen.git;a=commit;h=161212ef02312c0681d2d809c8ff1e1f0ea6f6f9
Latest version have also LIBXL_HAVE_QXL useful for libvirt.
I think is good add also qxl and usbredir to spice-features test or create
a new one "full features".



>
> Signed-off-by: Jim Fehlig <jfehlig at suse.com>
> ---
>  src/xenconfig/xen_xl.c                     | 56
> ++++++++++++++++++++++--------
>  tests/xlconfigdata/test-spice-features.cfg | 32 +++++++++++++++++
>  tests/xlconfigdata/test-spice-features.xml | 48 +++++++++++++++++++++++++
>  tests/xlconfigdata/test-spice.xml          |  2 ++
>  tests/xlconfigtest.c                       |  1 +
>  5 files changed, 124 insertions(+), 15 deletions(-)
>
> diff --git a/src/xenconfig/xen_xl.c b/src/xenconfig/xen_xl.c
> index 2e9294c..b54d5b0 100644
> --- a/src/xenconfig/xen_xl.c
> +++ b/src/xenconfig/xen_xl.c
> @@ -199,17 +199,23 @@ xenParseXLSpice(virConfPtr conf, virDomainDefPtr def)
>              }
>
>              if (xenConfigGetBool(conf, "spiceagent_mouse",
> -                                 &graphics->data.spice.mousemode, 0) < 0)
> -                goto cleanup;
> -            if (xenConfigGetBool(conf, "spicedvagent", &val, 0) < 0)
> +                                 &val, 0) < 0)
>                  goto cleanup;
>              if (val) {
> -                if (xenConfigGetBool(conf, "spice_clipboard_sharing",
> -                                     &graphics->data.spice.copypaste,
> -                                     0) < 0)
> -                    goto cleanup;
> +                graphics->data.spice.mousemode =
> +                    VIR_DOMAIN_GRAPHICS_SPICE_MOUSE_MODE_CLIENT;
> +            } else {
> +                graphics->data.spice.mousemode =
> +                    VIR_DOMAIN_GRAPHICS_SPICE_MOUSE_MODE_SERVER;
>              }
>
> +            if (xenConfigGetBool(conf, "spice_clipboard_sharing", &val,
> 0) < 0)
> +                goto cleanup;
> +            if (val)
> +                graphics->data.spice.copypaste = VIR_TRISTATE_BOOL_YES;
> +            else
> +                graphics->data.spice.copypaste = VIR_TRISTATE_BOOL_NO;
> +
>              if (VIR_ALLOC_N(def->graphics, 1) < 0)
>                  goto cleanup;
>              def->graphics[0] = graphics;
> @@ -708,16 +714,36 @@ xenFormatXLSpice(virConfPtr conf, virDomainDefPtr
> def)
>                      return -1;
>              }
>
> -            if (xenConfigSetInt(conf, "spiceagent_mouse",
> -                                graphics->data.spice.mousemode) < 0)
> -                return -1;
> +            if (graphics->data.spice.mousemode) {
> +                switch (graphics->data.spice.mousemode) {
> +                case VIR_DOMAIN_GRAPHICS_SPICE_MOUSE_MODE_SERVER:
> +                    if (xenConfigSetInt(conf, "spiceagent_mouse", 0) < 0)
> +                        return -1;
> +                    break;
> +                case VIR_DOMAIN_GRAPHICS_SPICE_MOUSE_MODE_CLIENT:
> +                    if (xenConfigSetInt(conf, "spiceagent_mouse", 1) < 0)
> +                        return -1;
> +                    /*
> +                     * spicevdagent must be enabled if using client
> +                     * mode mouse
> +                     */
> +                    if (xenConfigSetInt(conf, "spicevdagent", 1) < 0)
> +                        return -1;
> +                    break;
> +                default:
> +                    break;
> +                }
> +            }
>
> -            if (graphics->data.spice.copypaste) {
> -                if (xenConfigSetInt(conf, "spicedvagent", 1) < 0)
> +            if (graphics->data.spice.copypaste == VIR_TRISTATE_BOOL_YES) {
> +                if (xenConfigSetInt(conf, "spice_clipboard_sharing", 1) <
> 0)
> +                    return -1;
> +                /*
> +                 * spicevdagent must be enabled if spice_clipboard_sharing
> +                 * is enabled
> +                 */
> +                if (xenConfigSetInt(conf, "spicevdagent", 1) < 0)
>                      return -1;
> -                if (xenConfigSetInt(conf, "spice_clipboard_sharing",
> -                                graphics->data.spice.copypaste) < 0)
> -                return -1;
>              }
>          }
>      }
> diff --git a/tests/xlconfigdata/test-spice-features.cfg
> b/tests/xlconfigdata/test-spice-features.cfg
> new file mode 100644
> index 0000000..c3e7111
> --- /dev/null
> +++ b/tests/xlconfigdata/test-spice-features.cfg
> @@ -0,0 +1,32 @@
> +name = "XenGuest2"
> +uuid = "c7a5fdb2-cdaf-9455-926a-d65c16db1809"
> +maxmem = 579
> +memory = 394
> +vcpus = 1
> +pae = 1
> +acpi = 1
> +apic = 1
> +hap = 0
> +viridian = 0
> +localtime = 0
> +on_poweroff = "destroy"
> +on_reboot = "restart"
> +on_crash = "restart"
> +device_model = "/usr/lib/xen/bin/qemu-dm"
> +vif = [
> "mac=00:16:3e:66:92:9c,bridge=xenbr1,script=vif-bridge,model=e1000,type=ioemu"
> ]
> +parallel = "none"
> +serial = "none"
> +builder = "hvm"
> +boot = "d"
> +disk = [ "/dev/HostVG/XenGuest2,raw,hda,w,backendtype=phy",
> "/root/boot.iso,raw,hdc,r,backendtype=qdisk,devtype=cdrom" ]
> +sdl = 0
> +vnc = 0
> +spice = 1
> +spicehost = "127.0.0.1"
> +spiceport = 590
> +spicetls_port = 500
> +spicedisable_ticketing = 0
> +spicepasswd = "thebeast"
> +spiceagent_mouse = 1
> +spicevdagent = 1
> +spice_clipboard_sharing = 1
> diff --git a/tests/xlconfigdata/test-spice-features.xml
> b/tests/xlconfigdata/test-spice-features.xml
> new file mode 100644
> index 0000000..8f3fcf5
> --- /dev/null
> +++ b/tests/xlconfigdata/test-spice-features.xml
> @@ -0,0 +1,48 @@
> +<domain type='xen'>
> +  <name>XenGuest2</name>
> +  <uuid>c7a5fdb2-cdaf-9455-926a-d65c16db1809</uuid>
> +  <memory unit='KiB'>592896</memory>
> +  <currentMemory unit='KiB'>403456</currentMemory>
> +  <vcpu placement='static'>1</vcpu>
> +  <os>
> +    <type arch='x86_64' machine='xenfv'>hvm</type>
> +    <loader type='rom'>/usr/lib/xen/boot/hvmloader</loader>
> +    <boot dev='cdrom'/>
> +  </os>
> +  <features>
> +    <acpi/>
> +    <apic/>
> +    <pae/>
> +  </features>
> +  <clock offset='utc' adjustment='reset'/>
> +  <on_poweroff>destroy</on_poweroff>
> +  <on_reboot>restart</on_reboot>
> +  <on_crash>restart</on_crash>
> +  <devices>
> +    <emulator>/usr/lib/xen/bin/qemu-dm</emulator>
> +    <disk type='block' device='disk'>
> +      <driver name='phy' type='raw'/>
> +      <source dev='/dev/HostVG/XenGuest2'/>
> +      <target dev='hda' bus='ide'/>
> +    </disk>
> +    <disk type='file' device='cdrom'>
> +      <driver name='qemu' type='raw'/>
> +      <source file='/root/boot.iso'/>
> +      <target dev='hdc' bus='ide'/>
> +      <readonly/>
> +    </disk>
> +    <interface type='bridge'>
> +      <mac address='00:16:3e:66:92:9c'/>
> +      <source bridge='xenbr1'/>
> +      <script path='vif-bridge'/>
> +      <model type='e1000'/>
> +    </interface>
> +    <input type='mouse' bus='ps2'/>
> +    <input type='keyboard' bus='ps2'/>
> +    <graphics type='spice' port='590' tlsPort='500' autoport='no'
> listen='127.0.0.1' passwd='thebeast'>
> +      <listen type='address' address='127.0.0.1'/>
> +      <mouse mode='client'/>
> +      <clipboard copypaste='yes'/>
> +    </graphics>
> +  </devices>
> +</domain>
> diff --git a/tests/xlconfigdata/test-spice.xml
> b/tests/xlconfigdata/test-spice.xml
> index bd004fc..e5b43d9 100644
> --- a/tests/xlconfigdata/test-spice.xml
> +++ b/tests/xlconfigdata/test-spice.xml
> @@ -41,6 +41,8 @@
>      <input type='keyboard' bus='ps2'/>
>      <graphics type='spice' port='590' tlsPort='500' autoport='no'
> listen='127.0.0.1' passwd='thebeast'>
>        <listen type='address' address='127.0.0.1'/>
> +      <mouse mode='server'/>
> +      <clipboard copypaste='no'/>
>      </graphics>
>    </devices>
>  </domain>
> diff --git a/tests/xlconfigtest.c b/tests/xlconfigtest.c
> index 0b47fbb..952b504 100644
> --- a/tests/xlconfigtest.c
> +++ b/tests/xlconfigtest.c
> @@ -195,6 +195,7 @@ mymain(void)
>
>      DO_TEST("new-disk", 3);
>      DO_TEST("spice", 3);
> +    DO_TEST("spice-features", 3);
>
>  #ifdef LIBXL_HAVE_BUILDINFO_USBDEVICE_LIST
>      DO_TEST("fullvirt-multiusb", 3);
> --
> 1.8.4.5
>
>
> _______________________________________________
> Xen-devel mailing list
> Xen-devel at lists.xen.org
> http://lists.xen.org/xen-devel
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20150509/1473f890/attachment-0001.htm>


More information about the libvir-list mailing list