SailfishOS:Chum icon

SailfishOS:Chum

A Sailfish OS software repository by the community

App icon of Waypipe

Waypipe

Network transparency with Wayland

v0.8.6

Waypipe

waypipe is a proxy for Wayland[0] clients. It forwards Wayland messages and serializes changes to shared memory buffers over a single socket. This makes application forwarding similar to ssh -X [1] feasible.

[0] https://wayland.freedesktop.org/ [1] https://wiki.archlinux.org/title/OpenSSH#X11_forwarding

Usage

waypipe should be installed on both the local and remote computers. There is a user-friendly command line pattern which prefixes a call to ssh and automatically sets up a reverse tunnel for protocol data. For example,

waypipe ssh user@theserver weston-terminal

will run ssh, connect to theserver, and remotely run weston-terminal, using local and remote waypipe processes to synchronize the shared memory buffers used by Wayland clients between both computers. Command line arguments before ssh apply only to waypipe; those after ssh belong to ssh.

Alternatively, one can launch the local and remote processes by hand, with the following set of shell commands:

/usr/bin/waypipe -s /tmp/socket-local client &
ssh -R /tmp/socket-remote:/tmp/socket-local -t user@theserver \
    /usr/bin/waypipe -s /tmp/socket-remote server -- \
    /usr/bin/weston-terminal
kill %1

It's possible to set up the local and remote processes so that, when the connection between the the sockets used by each end breaks, one can create a new forwarded socket on the remote side and reconnect the two processes. For a more detailed example, see the man page.

Installing

Build with meson[0]. A typical incantation is

cd /path/to/waypipe/ && cd ..
mkdir build-waypipe
meson --buildtype debugoptimized waypipe build-waypipe
ninja -C build-waypipe install

Core build requirements:

Optional dependencies:

[0] https://mesonbuild.com/ [1] https://git.sr.ht/~sircmpwn/scdoc

Reporting issues

Waypipe is developed at [0]; file bug reports or submit patches here.

In general, if a program does not work properly under Waypipe, it is a bug worth reporting. If possible, before doing so ensure both computers are using the most recently released version of Waypipe (or are built from git master).

A workaround that may help for some programs using OpenGL or Vulkan is to run Waypipe with the --no-gpu flag, which may force them to use software rendering and shared memory buffers. (Please still file a bug.)

Some programs may require specific environment variable settings or command line flags to run remotely; a few examples are given in the man page[1].

Useful information for bug reports includes:

[0] https://gitlab.freedesktop.org/mstoeckl/waypipe/ [1] https://gitlab.freedesktop.org/mstoeckl/waypipe/-/blob/master/waypipe.scd

Technical Limitations

Waypipe does not have a full view of the Wayland protocol. It includes a compiled form of the base protocol and several extension protocols, but is not able to parse all messages that the programs it connects send. Fortunately, the Wayland wire protocol is partially self-describing, so Waypipe can parse the messages it needs (those related to resources shared with file descriptors) while ignoring the rest. This makes Waypipe partially forward-compatible: if a future protocol comes out about details (for example, about window positioning) which do not require that file descriptors be sent, then applications will be able to use that protocol even with older versions of Waypipe. The tradeoff to allowing messages that Waypipe can not parse is that Waypipe can only make minor modifications to the wire protocol. In particular, adding or removing any Wayland protocol objects would require changing all messages that refer to them, including those messages that Waypipe does not parse. This precludes, for example, global object deduplication tricks that could reduce startup time for complicated applications.

Shared memory buffer updates, including those for the contents of windows, are tracked by keeping a "mirror" copy of the buffer the represents the view which the opposing instance of Waypipe has. This way, Waypipe can send only the regions of the buffer that have changed relative to the remote copy. This is more efficient than resending the entire buffer on every update, which is good for applications with reasonably static user interfaces (like a text editor or email client). However, with programs with animations where the interaction latency matters (like games or certain audio tools), major window updates will unavoidably produce a lag spike. The additional memory cost of keeping mirrors is moderate.

The video encoding option for DMABUFs currently maintains a video stream for each buffer that is used by a window surface. Since surfaces typically rotate between a small number of buffers, a video encoded window will appear to flicker as it switches rapidly between the underlying buffers, each of whose video streams has different encoding artifacts.

The zwp_linux_explicit_synchronization_v1 Wayland protocol is currently not supported.

Waypipe does not work between computers that use different byte orders.

Download

The easiest way to download and install this software is by the SailfishOS:Chum GUI app. If you wish to download the RPM file by yourself, please expand the section below.

Download links

App information

Package name
waypipe
Version
0.8.6+git3-1.1.2.jolla
Licence
MIT
Developer
M. Stoeckl
Packager
nephros
Last updated
2024-06-19 11:17:19

Download size
233.2 KiB
Installed size
228.4 KiB
Checksum (sha256)
b804d731aa7af645625be621d1af95dda3a8ff044703f68086c2807393c1b4bf
Download size
79.5 KiB
Installed size
167.4 KiB
Checksum (sha256)
24d3717416ff7c0edf4f9e95b16c313bda848ec62a543d9b0e39aa93398379a1
Download size
71.2 KiB
Installed size
115.5 KiB
Checksum (sha256)
6d18c6fd215bd511f2521feaec2a49f43c5dd415132116c26eee1fec7b64e042
Download size
76.0 KiB
Installed size
196.5 KiB
Checksum (sha256)
b3a6b3bfe454c013d2c4eca91fc5a5b8bb194e773fc7c5b839c07a300bef4c40

Links