====== New features for X2Go ====== Below you find a list of new code projects that we are interested in, but no one has started working on them, yet. ===== X2Go Client ===== ==== X2Go Client / X2Go Plugin on Chromebooks ==== * As [[http://en.wikipedia.org/wiki/Chromebook|Chromebooks]] are a kind "Thin Client" "look-alikes", it would be a good idea to be able to access Linux machines via X2Go. * As it is only possible to install applications on chromeOS (running on an original chromebook) via the [[https://chrome.google.com/webstore/category/home|Googles webstore]] of Google Chrome, X2Go Client needs to packaged for [[https://chrome.google.com/webstore/category/home|Googles webstore]]. Preferences and maybe session files should be altered and committed, so that users can sync them with their Google account. ==== Better sound support, Part 1 ==== * Code has been developed to clean up how pulseaudio is called on all three platforms * This brings Pulseaudio sound to Mac OS X, which currently isn't available in the standard release * This also contains the option to make sound unidirectional, so you can mute the microphone directly in X2GoClient * The code needs to be rebased against the current mainline X2Go client * Status update: * Mihai (ionic) is working on this as time permits, * sponsored by an anonymous donor via BAUR-ITCS. * Additional donations always welcome, though, as it turned out to be way more work than expected. * no ETA yet ==== Android Client ==== * TheQVD project has an NX based remote desktop solution that uses nxproxy natively on Android (https://github.com/theqvd/theqvd/blob/master/nx/nxcomp-3.5.0-android.patch & https://github.com/theqvd/theqvd/tree/master/libqvdclient/android) * It should be easy to mix and match this with our codebase to create a functioning Android X2Go client. (According to Mike#1) * Here's a technology preview of how you can run X2Goclient on Android - no root required, but does have quite a few limitations: http://youtu.be/3h_kiY78Ks4 ===== X2Go Server ====== ==== Access X2Go Server Sessions via HTML5 Client ==== * It's difficult for the X2Go Project to offer clients on a number of mobile devices lacking an X.Org server and with rules that make it very difficult to submit GPL'ed software to their ecosystems. * An HTML5 Client could help to build native apps and render sessions on a [[https://en.wikipedia.org/wiki/Canvas_element|HTML5 Canvas]] * In the first step, it would be possible to use existing vnc<->canvas proxies like [[http://kanaka.github.com/noVNC/|noVNC]] or [[http://guac-dev.org/|Guacamole]]. ==== Better sound support, Part 2 ==== * While X data is compressed depending on the settings chosen in the client (available bandwidth and whatnot), no such compression takes place for the audio stream * Changing/fixing this may mean writing a wrapper around/a plugin to pulseaudio, or ditching PulseAudio altogether for some other sound system (which needs to be available on Windows, Mac OS X and Linux) ===== NX-Libs ===== ==== Rewrite of NX Agent/X2Go Agent ==== * Currently, NX Agent/X2Go Agent is based on old X-Server code * This needs to be rewritten so it can be built against current X.org * Care needs to be taken that there are no unresolvable licensing issues * HUGE Task * estimated cost at regular hourly rates of an average coder: 50.000 EUR * Crowdfunding planned, volunteers (both coders and funders) welcome * Status update: * This is now Work in Progress * NX-Rewrite is taking place with the Arctica Project (https://arctica-project.org/) * currently sponsored by Qindel (http://www.qindel.com/) * Worked on by Mike#1 and Ulrich * ETA: August 2017 ==== Upgrade GLX extension in NX (redistributed) ==== * With Ubuntu 12.10, Canonical has dropped Unity-2d support * Starting with Ubuntu 12.10, Unity requires a modern Xserver with GLX v8 included * The weakness of X2Go definitely is the NX Xserver used for display server session on the client * This coding project would be a start to gradually update the Xserver extensions shipped with NX * During this project you will get a deep insight into Xserver code. You need good C and Cplusplus skills to start this code project. You have to be a magician with C coding debugging tools!!! * Status update: * This will hopefully be fixed in "Rewrite of NX Agent/X2Go Agent" as well ===== Desktop Bindings ===== ==== X2Go Desktop Applet ==== * Status quo: for several desktop the X2Go project offers a desktop integration (=binding) package * One that can be used as a template and reference is the package: plasma-widget-x2go. It provides a Plasma widget that can dock into KDE4's panel and this widget then gives you control over your X2Go session * Unfortunately, the Plasma X2Go widget is for KDE4 only and of no use to users GNOME, Unity, XFCE, etc. * The idea: create a desktop independent applet that docks into the systems systray (or into the appindicator area). This applet then gives you control over your X2Go session from inside the X2Go session: unmount client-side folder, manage print job, suspend X2Go session, grant permission for desktop sharing, etc. * Please use the tools ''plasma-widget-x2go'' and ''x2godesktopsharing'' as reference and as a start point * Implementation shall be in C++ using Qt4. ===== X2Go Session Broker ====== ==== X2Go Session Broker WebGUI Service ==== * Similar to Canonical's [[https://uccs.landscape.canonical.com/|UCCS Service]] X2Go admins may want to provide a company-wide site where users of the infrastructure shall be able to configure their favourite (X2Go, RDP) servers in the company's network * This will need an extension of the X2Go Session Broker: * Add a session profile storage (on a per-user basis) based on e.g. MongoDB * Make these session profiles configurable through a nice WebGUI * The current public implementation of the X2Go Session Broker is written in Python. The difficulty is medium. Interests in Web2.0 development strategies is of advantage. ==== JSON based protocol for communication between X2Go Client and X2Go Session Broker ==== * JSON is a very appropriate data format when two applications what to exchange data objects via text base communication streams * Currently, X2Go Client and X2Go Session Broker currently communicate over a plain text base communication protocol. This protocol is not very tolerant about errors * To make the client<->broker communication more robust, this shall be changed to X2Go Client * However, transparent backward compatibility must be granted at the same time: new X2Go Clients must continue to be able to speak the older broker protocol, new X2Go Session Brokers must be able to understand old X2Go Clients * Good knowledge of Qt4 and Cplusplus are required for this task ===== PyHoca / Python X2Go ===== ==== PyHoca-PubAppDaemon - transparent X2Go Published Applications Integration into local Desktops ==== * This idea focuses on X2Go integration into Unity desktops (for providing hybrid fat/thin clients) * All multimedia intensive applications are run locally (using server-side dot files in a server-side home directory) * Anything else runs on an X2Go terminal server * The desktop shell's task is to merge both application types transparently with another * X2Go offers a feature called X2Go Published Applications * The feature allows starting of X2Go sessions of the type PUBLISHED on remote application servers. This session merely returns an application menu tree (and a slumbering x2goagent). Currently this menu tree is rendered by X2Go Client / PyHoca-GUI as a submenu of their systray icon. From this menu tree you then can select individual applications to get launched within your local desktop shell * However, how would it be if one could smoothly merge the remote menu tree into the local desktops application menu? * Or even more, drag'n'drop icons from the local desktop's menu tree onto the local desktop? * Or even better, dock those applications to Unity's Launcher? * An approach to realize this would be a split up of PyHoca-GUI: PyHoca-PubAppTrigger and PyHoca-PubAppDaemon. * On remote login (LightDM) a guest (Ubuntu) session gets launched and in the background PyHoca-PubAppDaemon waits for commands via a Unix domain socket file * PyHoca-PubAppDaemon can be queried for server-side provided applications (a list of .desktop files plus base64 encoded icons) * The returned menu items are merged into the local application menu * A click on one of those (local) .desktop files (executing a published application) will launch PyHoca-PubAppTrigger. This trigger talks to the PyHoca-PubAppDaemon and initiates the launch of the requested server-side application (via the X2Go Published Applications feature) The task is rather complex and demands quite a bit of understanding of the FreeDesktop.org specifications. The whole project will be in Python. A draft for the login process is already available on [[http://git.x2go.org|X2Go Git]] (projects: ''lightdm-remote-login-x2go'' and ''libpam-x2go'').