All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Daniel P. Berrangé" <berrange@redhat.com>
To: Gerd Hoffmann <kraxel@redhat.com>
Cc: qemu-devel@nongnu.org
Subject: Re: [PATCH v2 8/9] vnc: add support for extended desktop resize
Date: Tue, 15 Dec 2020 10:20:40 +0000	[thread overview]
Message-ID: <20201215102040.GH121272@redhat.com> (raw)
In-Reply-To: <20201215101503.obaq7ycm2zdxcnq5@sirius.home.kraxel.org>

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	other threads:[~2020-12-15 10:21 UTC|newest]

Thread overview: 23+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-12-08 11:57 [PATCH v2 0/9] vnc: support some new extensions Gerd Hoffmann
2020-12-08 11:57 ` [PATCH v2 1/9] console: drop qemu_console_get_ui_info Gerd Hoffmann
2020-12-08 12:27   ` Marc-André Lureau
2020-12-08 14:40   ` Daniel P. Berrangé
2020-12-08 11:57 ` [PATCH v2 2/9] console: allow con==NULL in dpy_{get, set}_ui_info and dpy_ui_info_supported Gerd Hoffmann
2020-12-08 12:26   ` Marc-André Lureau
2020-12-08 14:44   ` Daniel P. Berrangé
2020-12-08 11:57 ` [PATCH v2 3/9] vnc: use enum for features Gerd Hoffmann
2020-12-08 11:57 ` [PATCH v2 4/9] vnc: drop unused copyrect feature Gerd Hoffmann
2020-12-08 14:49   ` Daniel P. Berrangé
2020-12-08 11:57 ` [PATCH v2 5/9] vnc: add pseudo encodings Gerd Hoffmann
2020-12-08 14:49   ` Daniel P. Berrangé
2020-12-08 11:57 ` [PATCH v2 6/9] vnc: add alpha cursor support Gerd Hoffmann
2020-12-08 14:39   ` Daniel P. Berrangé
2020-12-08 11:57 ` [PATCH v2 7/9] vnc: force initial resize message Gerd Hoffmann
2020-12-08 14:53   ` Daniel P. Berrangé
2020-12-08 11:57 ` [PATCH v2 8/9] vnc: add support for extended desktop resize Gerd Hoffmann
2020-12-08 18:13   ` Daniel P. Berrangé
2020-12-15 10:15     ` Gerd Hoffmann
2020-12-15 10:20       ` Daniel P. Berrangé [this message]
2020-12-16 11:12         ` Daniel P. Berrangé
2020-12-08 11:57 ` [PATCH v2 9/9] vnc: move check into vnc_cursor_define Gerd Hoffmann
2020-12-08 12:40 ` [PATCH v2 0/9] vnc: support some new extensions Daniel P. Berrangé

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20201215102040.GH121272@redhat.com \
    --to=berrange@redhat.com \
    --cc=kraxel@redhat.com \
    --cc=qemu-devel@nongnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.