[RFC weston] remote access interface module
Ander Conselvan de Oliveira
conselvan2 at gmail.com
Mon Oct 21 15:00:52 CEST 2013
On 10/18/2013 05:50 PM, Andrew Wedgbury wrote:
> I've been working on a weston module to support an interface for remote access systems such as VNC. This is now at a point where it's usable (and works rather well with a suitably modified version of our VNC server) so I wanted to present it here with a view to including it in weston at some point.
> The module is named remote-access - which is intended to be a suitably generic name since it could be used by VNC or RDP (or others). It exposes a new global interface called remote-access, which can be used to create instances of remote-capture and remote-seat interfaces as required.
> The remote-capture interface allows a particular output to be captured. It is created by specifying a shared memory region of the required size, and the output to capture. The interface allows a single refresh to be requested, in which case an update event will signal when the update is ready to be read from the buffer. It can also operate in continuous mode, when update events are sent whenever the output changes and the buffer has been updated. The update event contains the coordinates of the rectangle that changed (in coordinates relative to the output). This part is loosely based on weston's screenshooter code.
> The remote-seat interface allows input events to be injected via a weston seat. The interface allows multiple remote-seat objects to be created, each of which can use an existing seat, or create a new seat. That way the remote access system has the flexibility of creating a separate seat for each connected user, or simply control an a single seat, as required.
> There are (at least!) two outstanding issues that I am aware of:
> * Access to these interfaces should be restricted somehow. This could be achieved in a way similar to screenshooter, where weston could launch the VNC/RDP server. Or weston could prompt the user somehow (although this would not be effective when trying to access a remote, unattended machine).
> * We need to be able to capture the pointer sprite, and detect when this changes. This would need to be part of the remote-seat interface since each seat can have a pointer. So far I've not found a method to reliably detect when the pointer changes, so I would appreciate some help on this one.
You probably want to set the field weston_compositor::disable_planes, as
the screenshooter does. That causes the compositor to not use hardware
cursor or other overlays and composite the whole scene using the
renderer, so that read_pixels() gives you the complete screen contents.
More information about the wayland-devel