<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Mon, Oct 21, 2013 at 6:36 PM, Andrew Wedgbury <span dir="ltr"><<a href="mailto:andrew.wedgbury@realvnc.com" target="_blank">andrew.wedgbury@realvnc.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hi Jason,<br>
<br>
I think I'm starting to understand. I can definitely see the advantage of not having to define new interface for remote access, as we could then only work with compositors that chose to implement this.<br></blockquote>
<div><br></div><div>It also has the advantage that it makes no difference to your VNC server whether it is running a headless session or mirroring.  It simply acts as a SHM-only compositor in either case.  (There may be a slight difference on start-up for passing a live socket connection, but that's fairly trivial.)<br>
</div><div> <br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
The part I'm struggling with is how the compositor would mirror its outputs to the VNC server's compositor. Wouldn't this mean adding a lot of extra complexity? (although I guess it makes sense if you have other reasons for doing so).<br>
</blockquote><div><br></div><div>There should be no more complexity than your interface.  The "when do you sample" part would be replaced with frame events.  Input pass-through isn't that difficult (just look at compositor-wayland.c).  For output, it would just write out to a SHM buffer that is passed to the VNC server.<br>
</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Also, would there be much overhead in mirroring the outputs in this way? If there is then you'd probably only want to do it when you knew that there was a VNC client connected. For example, with my proposed interface, the VNC server would start requesting updates when the first client connects, and stop when the last client disconnects.<br>
</blockquote><div><br></div><div>I don't think it will suffer from overhead much more than with your proposed extension.  In the wayland protocol there is a concept of a "frame" event that tells the client when what it just passed to the compositor was actually shown on screen.  In the normal case, this allows the clients to throttle drawing to the compositor's refresh.  In the case of a VNC server, it would not send out *any* frame events if there are no clients connected.  With a client connected, you would only send out frame events after you have finished pushing the current frame to the client.  In this way, the primary compositor (GNOME shell or whatever) can listen for frame events and only snapshot on demand.  If you are working with a slow internet connection, the VNC server may only send out a couple of frame events per second (or fewer).  In that case, the primary compositor will only snapshot one frame out of 10 or one out of 100.<br>
<br></div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
---<br>
Andrew Wedgbury <<a href="mailto:andrew.wedgbury@realvnc.com">andrew.wedgbury@realvnc.com</a>><br>
<div class="im"><br>
----- Original Message -----<br>
> From: "Jason Ekstrand" <<a href="mailto:jason@jlekstrand.net">jason@jlekstrand.net</a>><br>
> To: "Andrew Wedgbury" <<a href="mailto:andrew.wedgbury@realvnc.com">andrew.wedgbury@realvnc.com</a>><br>
> Cc: "wayland" <<a href="mailto:wayland-devel@lists.freedesktop.org">wayland-devel@lists.freedesktop.org</a>><br>
> Sent: Saturday, 19 October, 2013 2:12:44 AM<br>
> Subject: Re: [RFC weston] remote access interface module<br>
><br>
><br>
><br>
><br>
><br>
><br>
> Andrew,<br>
> I've had ideas kicking around in the back of my head for a while now<br>
> about how to do just this. However, my ideas have taken a<br>
> substantially different route. I don't have any real problems with<br>
> what you suggested (although I didn't read it in careful detail).<br>
> What follows below is more of a counter-proposal.<br>
><br>
> Some time ago I proposed to the list a protocol for a fullscreen<br>
> shell that only runs one client at a time. The proposal can be found<br>
> here:<br>
> <a href="http://lists.freedesktop.org/archives/wayland-devel/2013-August/010720.html" target="_blank">http://lists.freedesktop.org/archives/wayland-devel/2013-August/010720.html</a><br>
</div>> . (As a disclaimer, I have since renamed it to wl_fullscreen_shell<br>
<div class="HOEnZb"><div class="h5">> because that's a bit more accurate and because I do not intend for<br>
> actual system compositors.) One of the purposes for this protocol is<br>
> to allow you to nest compositors and use the Wayland protocol itself<br>
> as an input/output abstraction. This way compositors (such as GNOME<br>
> shell or Weston) can run on another system without having to have<br>
> built-in back-end support for it. All that is needed is for someone<br>
> to write a fairly simple compositor that provides<br>
> wl_fullscreen_shell. This simple compositor could be, for instance,<br>
> a VNC or RDP server. In particular this would allow any other<br>
> compositor to run on top of Weston's backends because I have already<br>
> implemented the fullscreen shell in Weston.<br>
><br>
> You may be thinking, "But I don't want to start the compositor inside<br>
> my VNC server, I want it to mirror what's already on the screen." It<br>
> wouldn't have be restricted to headless operation. Weston (or any<br>
> other compositor) could spawn the VNC server and then immediately<br>
> connect to it as a wl_fullscreen_shell client. (For security<br>
> purposes, the connection could be established by passing an already<br>
> opened file descriptor via an environment variable.) Instead of<br>
> using that as the primary backend, Weston (or any other compositor)<br>
> would simply mirror outputs to the VNC server. The assignment of<br>
> seats would then be a compositor-configured thing (although I would<br>
> vote for just adding the VNC seats).<br>
><br>
> The advantage of this method is that it requires very little<br>
> repetition of protocol. If we run the VNC server as a client, we<br>
> have to repeat most of the Wayland protocol only in the opposite<br>
> direction. If we let the VNC server run as a server and the<br>
> compositor as a client, we get all of the input handling, buffer<br>
> passing, etc. for free.<br>
><br>
> Let me know what you think,<br>
> --Jason Ekstrand<br>
><br>
</div></div></blockquote></div><br></div></div>