xpra icon
Bug tracker and wiki

This bug tracker and wiki are being discontinued
please use https://github.com/Xpra-org/xpra instead.

Version 33 (modified by Antoine Martin, 4 years ago) (diff)


Project Ideas

Xpra is a remote desktop tool providing many exciting features as compared to other open source tools. It is developed with a mix of Python and C, and works on many platforms. The list below describes Google Summer of Code project ideas, aimed both at improving Xpra and at teaching the students about how a remote desktop solution works.

To contribute, you need to :

  • download, build and use Xpra a little
  • join the IRC channel
  • read the existing documentation to get the best possible understanding of what Xpra is
  • contribute at least one patch to the project, that is subsequently committed to the repository
  • discuss a project idea with the developers, in order to build your own understanding and goals for this project

1) Wayland

With the advent of Wayland, a modern replacement for X11, the basis of Xpra (the X Composite extension) disappears. Xpra is conceptually an X compositor, and it could be modified to also become a Wayland compositor. This project is about making Xpra Wayland-compatible so that Wayland gets a network "transparency" layer that is efficient with fully open source (aside from the existing Wayland RDP and VNC implementations). Tasks are :

  • Understand Wayland and its concepts ("surfaces", input devices, etc)
  • Make Xpra behave (optionally and in addition to X11) as a Wayland compositor
  • Promote the work towards the Wayland community, and submit it for review

Difficulty: medium/easy
Keywords: Wayland, compositor, C, X.org, X11, network transparency

2) Keyboard mapping improvements

The applications running on the server need to receive mouse and keyboard input. It is easy to map the client-side simple mouse-input to mouse events on the server side, but it's more difficult for the keyboard, because the keyboard mapping on the client side can be different from one client to another (US, french, german, ...). What transits over the wire are keycodes (the physical position of the key on the keyboard), and they are translated back to keysyms (the keymap-dependant symbol produced when the key is pressed) on the server side. Xpra uses obsolete X APIs to do this translation work, and sometimes gets it wrong. In addition, running virtual machines with e.g. VirtualBox inside Xpra adds another layer of keyboard translation, and the end result is often wrong.
The tasks for this project are:

  • Learn and understand the X11 keyboard input system (specifically Xkb)
  • Re-implement keyboard mapping logic using Xkb instead of core keyboard API (probably using the xkbcommon library), OR:
  • Possibly re-implement the keyboard input device using uinput, see #173
  • Keep in mind the needs of other platforms (see Win32 server project below)

Difficulty: hard
Keywords: Xkb, X11, uinput, C

3) Android client support

The objective is for Xpra to support as many platforms as possible for the client. An Android client exists but is not completely up-to-date in terms of features, and its usability is far from perfect. This project consists in improving Android client support, or, alternatively, implement Xpra client support for another mobile platform.
The tasks for Android consist in the following:

  • Support keyboard
  • Support pinch to zoom
  • Support video scaling
  • Add any required feature for comfortable, seamless remote desktop

The applicant is encouraged to propose implementing support for any other low-power/mobile platform, with an extensive list of tasks to be carried out and prior technical research. An understanding of Android development is a must.

Difficulty: Medium
Keywords: Android

4) Win32 server (shadow mode)

Xpra's client works on many platforms, but the server is only optimized for running on Unix-like operating systems (ie: Linux). The Microsoft Windows version of the server has a lot of room for improvement. This project is about improving support for Windows-based servers, so that it achieves satisfying usability. Tasks would include:

  • system service: the server process currently needs to be started by the logged in user, the screensaver and lock screen also prevent the screen capture, effectively stopping the server - using a system service would allow the server to bypass those restrictions
  • keyboard: using native win32 keycodes with win32 clients, rather than coercing the keyboard layer into using X11 keysyms

Difficulty: Medium
Keywords: win32, terminal services

Other possible projects

Here are some other areas of interest which could be expanded into a proper project:

  • Image Depth: improving high bit depth support with more codecs (vp9, hevc, etc)
  • Webcam: taking advantage of builtin image compression, manage bandwidth usage, etc
  • Encodings: new codecs (AV1?), hardware accelerated decoding, 30 bits per pixel codecs, etc
  • HTML5 client: native video support, browser integration, etc
  • port client to Vulcan
  • User interface: #1342, #1343
  • python3: port rootless server, etc