Xpra Documentation

Display

This subsystem deals with the synchronization of the client’s display and its configuration (ie: DPI, HDR, etc), in particular sending updated screen configuration whenever the number of monitors or their configuration changes.

The client may also apply scaling, which changes the display size exposed to the server.
This can be used to reduce the amount of pixels needed to cover a monitor.

Implementations

Component Link
client xpra.client.subsystem.display
client connection xpra.server.source.display
server xpra.server.subsystem.display

Capabilities

Capability Value Information
desktop_size width: int, height: int The display size, covering all monitors
screen_sizes list of screens Geometry of all screens, scaled
screen_sizes.unscaled list of screens Unscaled geometry of all screens
monitors list of monitors Geometry of all monitors
dpi dictionary DPI configuration

Combining the clients’ displays

Normally, every client that shares a session sees the same virtual display: its size is the largest width and height requested by any of them.

With --sharing=combine, the virtual display is instead made large enough to hold every client’s monitors placed side by side, and each client is given its own area of it.

Each client is told that the display is exactly the size of its own area, and the server translates between the two coordinate spaces:

This is why combine requires XPRA_BACKWARDS_COMPATIBLE=0: without those monitor relative coordinates, the absolute positions sent by two different clients would be indistinguishable and could not be mapped back onto the combined display. It also requires a seamless server whose virtual display can be re-configured with RandR 1.6 (the dummy driver with 16 outputs). When any of those requirements is not met, the server warns and shares the display as it would with sharing=yes.

Every window is still sent to every client, so that moving one from one user’s screen to the next is just a metadata update rather than a new window: see window for how the windows outside a client’s area are hidden.

Note that each user can only move a window within their own screen, which covers their own area of the display: a window can straddle the boundary between two areas (and is then shown by both clients), but pushing it all the way onto another client’s area requires the application itself to move it, or a window manager request.

Network Packets

Packet Type Direction Arguments Information
display-show-desktop server to client show : boolean The server is requesting the client to show or hide the desktop
display-resized server to client width: int, height: int, max_w: int, max_h: int The server has updated its display, the client may need to adjust its scaling properties
display-configure client to server monitor configuration dictionary The client sends its updated monitor layout to the server
display-request-screenshot client to server   The client requests a screenshot from the server
display-screenshot server to client w, h, encoding, rowstride, data The server sends a screenshot in response to display-request-screenshot
display-request-icon client to server   The client requests the session icon
display-icon server to client w, h, encoding, rowstride, data The server sends the session icon