---
title: "Persistent remote X sessions with xpra"
date: 2020-01-15T18:29:57-05:00
draft: false
tags: [ "X11" ]
medium_enabled: true
---

[`xpra`](http://xpra.org/) allows one to run persistent X applications on a remote host and display it on a local machine. It's a combination of [SSH X11 Forwarding](https://wiki.archlinux.org/index.php/OpenSSH#X11_forwarding) and [Screen](https://www.gnu.org/software/screen/).

To get started you need to install the `xpra` package on both the server and client. On Ubuntu 18.04, this package isn't configured properly so one should use this PPA instead.

```bash
sudo add-apt-repository ppa:mikhailnov/xpra
```

To install,

```bash
sudo apt install xpra
```

Now you can from the client open up an application with one command

```bash
xpra start ssh:user@host --exit-with-children --start-child="executable"
```

If you want it to behave more like screen. Then on the server.

```bash
xpra start :100
```

Where you can replace `:100` with another high display number.

Then you can run the executable,

```bash
DISPLAY=:100 executable
```

From the client,

```bash
xpra attach ssh:user@host:100
```

`xpra` has heuristics that determines the encoding of the images passed. You can however override it using the `--encoding`s flag to better tailor to your needs.

- `rgb`: Raw pixel format that is lossless and uses compression. Best in high bandwidth environments.
- `png` compressed, lossless, but CPU intensive. May result in skipped frames
- `h264`, `vp8`, `vp9` are lossy formats that have tunable quality and speed parameters


More resources:
- [Arch Wiki](https://wiki.archlinux.org/index.php/Xpra)
- [Ubuntu Wiki](https://help.ubuntu.com/community/Xpra)