qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH v2 8/9] vnc: add support for extended desktop resize


From: Daniel P . Berrangé
Subject: Re: [PATCH v2 8/9] vnc: add support for extended desktop resize
Date: Tue, 15 Dec 2020 10:20:40 +0000
User-agent: Mutt/1.14.6 (2020-07-11)

On Tue, Dec 15, 2020 at 11:15:03AM +0100, Gerd Hoffmann wrote:
> On Tue, Dec 08, 2020 at 06:13:28PM +0000, Daniel P. Berrangé wrote:
> > On Tue, Dec 08, 2020 at 12:57:36PM +0100, Gerd Hoffmann wrote:
> > > The extended desktop resize encoding adds support for (a) clients
> > > sending resize requests to the server, and (b) multihead support.
> > > 
> > > This patch implements (a).  All resize requests are rejected by qemu.
> > > Qemu can't resize the framebuffer on its own, this is in the hands of
> > > the guest, so all qemu can do is forward the request to the guest.
> > > Should the guest actually resize the framebuffer we can notify the vnc
> > > client later with a separate message.
> > > 
> > > This requires support in the display device.  Works with virtio-gpu.
> > > 
> > > https://github.com/rfbproto/rfbproto/blob/master/rfbproto.rst#extendeddesktopsize-pseudo-encoding
> > 
> > The spec says
> > 
> >    "The server must send an ExtendedDesktopSize rectangle in response 
> >     to a FramebufferUpdateRequest with incremental set to zero, assuming
> >     the client has requested the ExtendedDesktopSize pseudo-encoding 
> >     using the SetEncodings message. This requirement is needed so that
> >     the client has a reliable way of fetching the initial screen 
> >     configuration, and to determine if the server supports the 
> >     SetDesktopSize message.
> > 
> >     A consequence of this is that a client must not respond to an
> >     ExtendedDesktopSize rectangle by sending a FramebufferUpdateRequest
> >     with incremental set to zero. Doing so would make the system go into
> >     an infinite loop."
> > 
> > Historically gtk-vnc always sets incremental=0 after a resize message,
> > so it should trigger an infinite loop. This doesn't happen with QEMU's
> > impl, so I think QEMU isn't correctly following the sec here. IIUC,
> > tt needs to force send an ExtendedDesktopSize message every time
> > incremental=0, not merely when a resize happens.
> 
> There are three cases where qemu sends an ExtendedDesktopSize message:
> 
>   (1) during the initial handshake (to cover the feature detection).
>   (2) as response to a SetDesktopSize request, and
>   (3) when an resize happens.
> 
> So, yes, I skimmed the spec a bit to fast and didn't implement it
> correctly.  Which also explains why you can't trigger the infinite
> loop issue.
> 
> > Having said that, I find this part of the spec rather crazy. I dont
> > see why clients need more than the first ExtendedDesktopSize message
> > in order to detect the feature, rather than after every single
> > incremental=0 update request.
> 
> Yes, it doesn't make much sense.
> 
> > None the less the spec says we should get an infinite loop and with
> > my intentional attempt to cause this, QEMU doesn't play ball.
> 
> Not fully sure I should consider this a bug or a feature.
> This patch doesn't conform to the spec.
> But it clearly is more robust ...

I'm going to propose a spec change and see what response it gets

Regards,
Daniel
-- 
|: https://berrange.com      -o-    https://www.flickr.com/photos/dberrange :|
|: https://libvirt.org         -o-            https://fstop138.berrange.com :|
|: https://entangle-photo.org    -o-    https://www.instagram.com/dberrange :|




reply via email to

[Prev in Thread] Current Thread [Next in Thread]