Provided by: waypipe_0.8.6-2build1_amd64 bug

NAME

       waypipe - A transparent proxy for Wayland applications

SYNOPSIS

       waypipe [options...] ssh [ssh options] destination command...

       waypipe [options...] client
       waypipe [options...] server -- command...
       waypipe recon control_pipe new_socket_path
       waypipe bench bandwidth
       waypipe [--version] [-h, --help]

       [options...] = [-c, --compress C] [-d, --debug] [-n, --no-gpu] [-o, --oneshot] [-s, --socket S] [--allow-
       tiled]  [--control  C]  [--display  D]  [--drm-node R] [--remote-node R] [--remote-bin R] [--login-shell]
       [--threads T] [--unlink-socket] [--video[=V]]

DESCRIPTION

       Waypipe is a proxy for Wayland clients, with the aim of supporting behavior like ssh -X.

       Prefixing an ssh ... command to become waypipe ssh ... will automatically run waypipe  both  locally  and
       remotely,  and  modify  the  ssh  command  to set up forwarding between the two instances of waypipe. The
       remote instance will act like a Wayland compositor, letting Wayland applications that are run remotely be
       displayed locally.

       When run as waypipe client, it will open a socket  (by  default  at  /tmp/waypipe-client.sock)  and  will
       connect to the local Wayland compositor and forward all Wayland applications which were linked to it over
       the socket by a matching waypipe server instance.

       When  run  as waypipe server, it will run the command that follows in its command line invocation, set up
       its own Wayland compositor socket, and try to connect to its matching waypipe client socket  (by  default
       /tmp/waypipe-server.sock)  and  try  to  forward  all the Wayland clients that connect to fake compositor
       socket to the matching waypipe client.

       The waypipe recon mode is used to reconnect a waypipe server  instance  which  has  had  a  control  pipe
       (option --control) set. The new socket path should indicate a Unix socket whose connections are forwarded
       to the waypipe client that the waypipe server was initially connected to.

       The  waypipe  bench  mode can be used to estimate, given a specific connection bandwidth in MB/sec, which
       compression options produce the lowest latency. It tests two synthetic images, one made to be roughly  as
       compressible  as  images containing text, and one made to be roughly as compressible as images containing
       pictures.

OPTIONS

       -c C, --compress C
           Select the compression method applied  to  data  transfers.  Options  are  none  (for  high-bandwidth
           networks),  lz4  (intermediate),  zstd  (slow  connection).  The  default  compression  is none.† The
           compression level can be chosen by appending = followed by a number. For example,  if  C  is  zstd=7,
           waypipe will use level 7 Zstd compression.

           † In a future version, the default will change to lz4.

       -d, --debug
           Print debug log messages.

       -h, --help
           Show help message and quit.

       -n, --no-gpu
           Block protocols like wayland-drm and linux-dmabuf which require access to e.g. render nodes.

       -o, --oneshot
           Only permit a single connection, and exit when it is closed.

       -s S, --socket S
           Use  S  as  the  path  for  the Unix socket. The default socket path for server mode is /tmp/waypipe-
           server.sock; for client mode, it is /tmp/waypipe-client.sock; and in ssh mode,  S  gives  the  prefix
           used  by  both  the  client  and the server for their socket paths. The default prefix in ssh mode is
           /tmp/waypipe.

       --version
           Briefly describe Waypipe's version and the features it was built with, then quit. Possible  features:
           LZ4  compression  support,  ZSTD  compression support, ability to transfer DMABUFs, video compression
           support, VAAPI hardware video de/encoding support.

       --allow-tiled
           By default, waypipe filters out all advertised DMABUF formats which have format layout modifiers,  as
           CPU  access  to these formats may be very slow. Setting this flag disables the filtering. Since tiled
           images often permit faster GPU operations, most OpenGL applications will select tiling modifiers when
           they are available.

       --control C
           For server or ssh mode, provide the path to the "control pipe" that will be created the  the  server.
           Writing  (with  waypipe  recon  C T, or 'echo -n T > C') a new socket path to this pipe will make the
           server instance replace all running connections with connections to the  new  Unix  socket.  The  new
           socket  should  ultimately  forward  data to the same waypipe client that the server was connected to
           before.

       --display D
           For server or ssh mode, provide WAYLAND_DISPLAY and let waypipe configure its Wayland display  socket
           to  have  a  matching  path.  (If D is not an absolute path, the socket will be created in the folder
           given by the environment variable XDG_RUNTIME_DIR.)

       --drm-node R
           Specify the path R to the drm device that this instance of waypipe should use and  (in  server  mode)
           notify connecting applications about.

       --remote-node R
           In  ssh  mode,  specify  the path R to the drm device that the remote instance of waypipe (running in
           server mode) should use.

       --remote-bin R
           In ssh mode, specify the path R to the waypipe binary on the remote computer, or its name  if  it  is
           available in PATH. It defaults to waypipe if this option isn’t passed.

       --login-shell
           Only for server mode; if no command is being run, open a login shell.

       --threads T
           Set  the  number  of  total threads (including the main thread) which a waypipe instance will create.
           These threads will be used to parallelize compression operations. This flag is passed on  to  waypipe
           server  when  given  to  waypipe  ssh. The flag also controls the thread count for waypipe bench. The
           default behavior (choosable by setting T to 0) is to use half as many threads  as  the  computer  has
           hardware threads available.

       --unlink-socket
           Only for server mode; on shutdown, unlink the Unix socket that waypipe connects to.

       --video[=V]
           Compress  specific DMABUF formats using a lossy video codec. Opaque, 10-bit, and multiplanar formats,
           among others, are not supported. V is a  comma  separated  list  of  options  to  control  the  video
           encoding.  Using  the  --video  flag  without  setting any options is equivalent to using the default
           setting of: --video=sw,bpf=120000,h264. Later options supersede earlier ones.

           sw
               Use software encoding and decoding.

           hw
               Use hardware (VAAPI) encoding and decoding, if available. This can be finicky and may  only  work
               with specific window buffer formats and sizes.

           h264
               Use H.264 encoded video.

           vp9
               Use VP9 encoded video.

           bpf=B
               Set  the target bit rate of the video encoder, in units of bits per frame. B can be written as an
               integer or with exponential notation; thus --video=bpf=7.5e5 is equivalent to --video=bpf=750000.

       --hwvideo
           Deprecated option, equivalent to --video=hw .

EXAMPLE

       The following waypipe ssh subcommand will attempt to run weston-flower on the server  exserv,  displaying
       the result on the local system.

                waypipe ssh user@exserv weston-flower

       One can obtain similar behavior by explicitly running waypipe and ssh:

                waypipe --socket /tmp/socket-client client  &
                ssh -R /tmp/socket-server:/tmp/socket-client user@exserv \
                     waypipe --socket /tmp/socket-server server -- weston-flower
                kill %1

       Waypipe may be run locally without an SSH connection by specifying matching socket paths. For example:

                waypipe --socket /tmp/waypipe.sock client &
                waypipe --socket /tmp/waypipe.sock server weston-simple-dmabuf-egl
                kill %1
                rm /tmp/waypipe.sock

       Using  transports  other than SSH is a bit more complicated. A recipe with ncat to connect to remote from
       computer local:

               $ waypipe --socket /tmp/waypipe-remote.sock client &
               $ ncat --ssl -lk 12345 --sh-exec 'ncat -U /tmp/waypipe-remote.sock' &
               $ ssh user@remote

               > ncat -lkU /tmp/waypipe-local.sock --sh-exec 'ncat --ssl local 12345' &
               > waypipe --display wayland-local \
                           --socket /tmp/waypipe-local.sock server -- sleep inf &
               > WAYLAND_DISPLAY=wayland-local application

       Given a certificate file, socat can also provide an encrypted  connection  (remove  'verify=0'  to  check
       certificates):

               $ waypipe --socket /tmp/waypipe-remote.sock client &
               $ socat openssl-listen:12345,reuseaddr,cert=certificate.pem,verify=0,fork \
                   unix-connect:/tmp/waypipe-remote.sock
               $ ssh user@remote

               > socat unix-listen:/tmp/waypipe-local.sock,reuseaddr,fork \
                   openssl-connect:local:12345,verify=0 &
               > waypipe --socket /tmp/waypipe-local.sock server -- application

       Many  applications  require  specific  environment  variables to use Wayland instead of X11. If ssh isn't
       configured to support loading  ~/.ssh/environment,  or  to  allow  specific  variables  to  be  set  with
       AcceptEnv/SetEnv,  one can run waypipe ssh without a command (and thereby open a login shell), or use env
       to set the needed variables each time:

                 waypipe ssh user@host env XDG_SESSION_TYPE=wayland dolphin

       In some cases, one may wish to set environment variables for the waypipe server process itself; the above
       trick with env will not do this, because the env process will be a child of waypipe server, not the other
       way around. Instead, one can use ~/.ssh/environment, or use the --remote-bin option to change the  remote
       Waypipe instance to a shell script that sets the environment before running the actual waypipe program.

       Waypipe  has  support  for  reconnecting a waypipe client and a waypipe server instance when whatever was
       used to transfer data between their sockets fails. For this to work, waypipe must  still  be  running  on
       both sides of the connection. As the waypipe ssh wrapper will automatically close both the waypipe client
       and  the waypipe server when the connection fails, the client and server modes must be run seprately. For
       example, to persistently forward applications running on server  rserv  to  a  local  Wayland  compositor
       running on lserv, one would first set up a waypipe client instance on lserv,

                waypipe -s /tmp/waypipe.sock client &

       and on server rserv, establish socket forwarding and run the server

                ssh -fN -L /tmp/waypipe-lserv.sock:/tmp/waypipe.sock user@lserv
                waypipe -s /tmp/waypipe-lserv.sock --control /tmp/ctrl-lserv.pipe \
                     --display wayland-lserv server -- sleep inf &

       then  set WAYLAND_DISPLAY=wayland-lserv and run the desired applications. When the ssh forwarding breaks,
       on rserv, reconnect with

                ssh -fN -L /tmp/waypipe-lserv-2.sock:/tmp/waypipe.sock user@lserv
                waypipe recon /tmp/ctrl-lserv.pipe /tmp/waypipe-lserv-2.sock

ENVIRONMENT

       When running as a server, by default WAYLAND_DISPLAY will be set for the invoked process.

       If the --oneshot flag is set, waypipe will instead set WAYLAND_SOCKET and inherit  an  already  connected
       socketpair  file  descriptor  to  the  invoked  (child)  process.  Some programs open and close a Wayland
       connection repeatedly as part of their initialization, and will not work correctly with this flag.

EXIT STATUS

       waypipe ssh will exit with the exit status code from the remote command, or with return code 1  if  there
       has been an error.

BUGS

       File bug reports at: https://gitlab.freedesktop.org/mstoeckl/waypipe/

       Some  programs  (gnome-terminal, firefox, kate, among others) have special mechanisms to ensure that only
       one process is running at a time. Starting those programs under Waypipe while they are  running  under  a
       different  Wayland  compositor may silently open a window or tab in the original instance of the program.
       Such programs may have a command line argument to create a new instance.

SEE ALSO

       weston(1), ssh(1), socat(1), ncat(1)

                                                   2024-04-01                                         waypipe(1)