Persistent remote applications for X11; screen sharing for X11, MacOS and MSWindows. https://xpra.org/
  • Python 79.9%
  • Cython 14.7%
  • C 3%
  • Shell 0.7%
  • Roff 0.7%
  • Other 0.7%
Find a file
Antoine Martin e6cf67171f keep the chunks of an incremental clipboard transfer to themselves
`do_property_notify` kept the state of an `INCR` transfer on the proxy:
one size, one type, one list of chunks for the whole selection. Any
property notification arriving while that transfer was in progress was
taken as one of its chunks, whatever property it was actually written to.

Conversions of different targets do run at the same time - each remote
`clipboard-request` packet starts one, and a paste asks for several - so
a large answer delivered incrementally would swallow the answer to every
other target which arrived meanwhile:

    BIG=[('STRING', 8, b'small-valuefirst-half-second-half')]
    SMALL=[('', 0, b'')]
    Warning: selection request for 'SMALLTARGET' timed out

The other target's data ends up inside this one, and the conversion it
belonged to can only end in `timeout_get_contents`.

The owner delivers each transfer on the property its conversion named,
and those properties are already distinct, so that is what the state
hangs off now: `incr_transfers[atom]`, retired with its own timer.

A refusal names no property, but it does not have to: it is matched by
the ICCCM timestamp we now send. Between the two, a conversion can be
identified without giving each one a window of its own.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01R9N1SAyjQ56Ybd1VQbTz3c
2026-09-11 01:01:57 +07:00
.claude/skills say what the cursor and icon rows are actually missing 2026-08-02 00:38:06 +07:00
.codex/skills add skill for managing backports 2026-09-08 12:47:12 +07:00
.github test Wayland focus and input 2026-09-11 00:48:41 +07:00
docs document the real SSL certificate location 2026-09-06 15:38:52 +07:00
fs ship the same systemd units on Debian as on rpm 2026-09-06 16:14:48 +07:00
packaging derp: missed from 5a56a06f55 2026-09-07 15:21:07 +07:00
tests keep the chunks of an incremental clipboard transfer to themselves 2026-09-11 01:01:57 +07:00
xpra keep the chunks of an incremental clipboard transfer to themselves 2026-09-11 01:01:57 +07:00
.git-blame-ignore-revs Add .git-blame-ignore-revs file 2024-02-23 00:51:05 +02:00
.gitignore #5012 ignore the files generated with cythonize-more flag 2026-09-07 01:45:21 +07:00
.pre-commit-config.yaml ignore flake8 W503 2026-09-07 23:10:45 +07:00
CLAUDE.md CLAUDE.md: don't test against a real display 2026-09-08 15:01:51 +07:00
CODE_OF_CONDUCT.md use relative URLs so generated docs still work 2025-08-29 15:12:42 +07:00
CONTRIBUTING.md use a new invite for the discord channel 2025-01-08 20:24:12 +07:00
COPYING restructure so packaging files will be included in the releases 2021-01-22 20:56:39 +07:00
debian make it easier to build debian packages of xpra 2022-10-14 16:55:19 +07:00
MANIFEST.in split the jph helper per role so each extension owns its objects 2026-09-06 18:45:45 +07:00
pyproject.toml ignore flake8 W503 2026-09-07 23:10:45 +07:00
README.md point to github pages for documentation links 2026-07-30 23:11:09 +07:00
setup.py use Debian multiarch path for wireshark fallback 2026-09-07 15:00:50 +07:00
sonar-project.properties Create sonar-project.properties 2023-04-19 12:17:10 +02:00

  1. About
  2. Installation
  3. Usage
  4. Documentation
  5. Help

About

Xpra is known as "screen for X" : its seamless mode allows you to run X11 programs, usually on a remote host, direct their display to your local machine, and then to disconnect from these programs and reconnect from the same or another machine(s), without losing any state. Effectively giving you remote access to individual graphical applications. It can also be used to access existing desktop sessions and start remote desktop sessions.

Xpra is open-source (GPLv2+) with clients available for many supported platforms, and the server includes a built-in HTML5 client. Xpra is usable over a wide variety of network protocols and does its best to adapt to any network conditions.

Xpra forwards and synchronizes many extra desktop features, which allows remote applications to integrate transparently into the client's desktop environment: audio input and output, printers, clipboard, system trays, notifications, webcams, etc.

It can also open documents and URLs remotely, display high bit depth content, and it will try to honor the display's DPI.

Here's what a seamless session with two windows (an xterm and glxspheres) looks like when attached from an MS Windows 11 desktop client: Windows11-client (the windows may look like native windows, but they are running on a remote Linux server)


Installation

Official stable downloads

All the packages are signed. There are also LTS and beta builds available.
For more information and more build architecture options, see xpra downloads.

Build from source

git clone https://github.com/Xpra-org/xpra; cd xpra
python3 ./setup.py install

For more details, see building from source. To contribute to the project, please try to use pull-requests and follow our code of conduct. Unit test status: xpra


Usage

Initial requirements

xpra must be installed on the client and the host.

You can use the html5 client in which case xpra is only required on the host.

Seamless Mode

Run xterm on a remote host, display and interact with it locally (from the client machine):

xpra seamless ssh://USER@HOST/ --start=xterm
# hint: xterm must be installed on the HOST.

For more examples, see usage.

Shadow

View an existing desktop session running on a remote host:

xpra shadow ssh://USER@HOST/

Network Access

Xpra servers can support many different types of connections using a single TCP port: SSL, SSH, (secure) http / websockets, RFB, etc..
Connections can be secured using encryption and many authentication modules.
Sessions can be automatically announced on LANs using multicast DNS so that clients can connect more easily using a GUI (ie: xpra mdns-gui).
Its flexible proxy server can be used as a relay or front end for multiple server sessions.


Documentation

There is extensive documentation right here for the current development version. This documentation is also included with each release.

For more generic version-agnostic information, checkout the wiki.


Help

Make sure to check the FAQ, your question may already be answered there. You can ask your questions on the GitHub discussions, or on the IRC channel #xpra on libera.chat or using discord. If you have hit a bug (sorry about that!), please see reporting bugs.