~~NOTOC~~ ====== X2Go KDrive ====== ===== What is X2Go KDrive ? ===== X2Go KDrive is a new kdrive X Server for X2Go. It could be used instead of x2goagent. X2Go KDrive works similar to Xephyr and based on it's code. It won't replace x2goagent, users will be able to chose if they want to run their sessions in x2goagent or in X2Go KDrive. ===== Why do we need X2Go KDrive? ===== The main reason - we want to be able to run modern desktops such as Unity, KDE-5, Gnome-3 and the applications built with the latest toolkits without limitations. ===== What is the difference between x2goagent and X2Go KDrive ===== x2goagent (or nxagent) is based on NX technologies. It's basically kind of X-proxy (like Xnest). It accepting X-protocol requests from X-Client and forwarding them to remote X-Server. In opposite, X2Go KDrive is a real X-Server (like Xephyr). It's processing the requests from X-Client and rendering images on the remote display, like normal X-Server rendering them into the graphic display, using the video driver. You could say, that the difference between x2goagent and X2Go KDrive it's the same as difference between Xnest and Xephyr. ===== Advantages and disadvantages of x2goagent ===== x2goagent (also called nxagent) is using the NX protocol, an optimized version of the X protocol. That means that instead of sending images over the network, it forwards the X-requests like "create window" or "move window from one position to another" or "write text in the window". This leads to a very good performance even over slow networks old (legacy X applications). In contrast x2gokdrive does not make use of this protocol and its optimizations. On the other hand there is also a disadvantage: x2goagent currently does not support some (nowadays) important X extensions like XInputExtension 2 or Composite. Some modern Desktop Environments require them and can therefor not work on x2goagent. ===== Advantages of X2Go KDrive ===== ==== 1. X2Go KDrive based on the recent X.Org code ==== Unlike the x2goagent, which is based on a rather old version of the X.Org sample server (somewhere between 7.0/7.1), X2Go KDrive is based on the recent X.Org-7, bringing multiple advantages: * We can run any modern Desktops and applications without any limitations * We don't need to support obsolete X code, which makes the development and support much easier. * We profit of bugfixes that might be missing in x2goagent ==== 2. X2Go KDrive is a real X-Server ==== While x2goagent is some kind of proxy between two X servers (on on the server and one on client side), X2Go KDrive is a standalone X server. That brings a lot of advantages over using the NX protocol: * We don't need an X server on the client side. This is the main advantage. If we want to use NX libraries, we always need a fully functional X server on the client side (like XQuartz on Mac or VCXsrv on Windows). X applications are not native to these OSes and are always the source of many troubles. Other OSes, e.g. Android or IOS, don't have any usable X server implementation at all. Using X2Go KDrive we can avoid these issues and build native clients for any platform and even develop an HTML5 client. * The X2Go KDrive architecture is better suited for modern applications like Firefox or Chromium. These applications are developed to run on different platforms and are using cross-platform graphic libraries like Skia. Modern browsers and some other applications working much better with X2Go KDrive than with NX. ===== How X2Go KDrive works===== X2Go KDrive works similar to Xephyr with only difference, that it's not rendering frames in the X-window but transferring them instead over the network to x2gokdriveclient. x2gokdriveclient running on the client computer, rendering the frames, capturing the input events and sending them back to the server. ===== How to use X2Go KDrive ===== x2gokdriveclient and x2gokdrive binaries are designed as drop-in replacements for nxproxy and nxagent/x2goagent. You can just rename x2gokdriveclient to nxproxy and x2gokdrive to x2goagent and start the X2Go session using X2Go Client. It works only if X2Go Client is running on Linux. Versions of X2Go Client and X2Go Server that can run both x2goagent and X2Go KDrive sessions will come soon. **Please keep in mind:** * This is not a stable software. * Use it on your own risk and don't use it in productive environments. * At the moment it's only a preview version. We assume you know how X2Go works and you know what are you doing. We don't have a binary builds yet. If you want to try it, you need to build it by yourself or wait until binary packages are ready. Or just take a look at screenshots: {{:wiki:advanced:x2gokdrive:screenshot_20181217_153306.png?direct&400|}} KDE-5 on Open SUSE Leap 42.3 {{:wiki:advanced:x2gokdrive:screenshot_20181217_153541.png?direct&400|}} x2gokdriveclient display menu {{:wiki:advanced:x2gokdrive:screenshot_20181217_154248.png?direct&400|}} Gnome-3 in SLE-classic mode on SLES 12sp1 {{:wiki:advanced:x2gokdrive:screenshot_20181217_155451.png?direct&400|}} Gnome-3 in modern look on Debian Stretch. ===== How to build X2Go KDrive ===== download the x2gokdrive from git: [[https://code.x2go.org/gitweb?p=x2gokdrive.git;a=summary|x2gokdrive]] We assuming, that you are familiar with make, Xorg and know how to build software from sources. You'll need a xorg-server sources (1.19.2), zlib, libpng and libjpeg. Configure Xorg to build xkdrive and start a build process (make). After that copy x2gokdrive directories in ''xorg-server/hw/kdrive'', than change to ''xorg-server/hw/kdrive/x2gokdrive'' and run ''make x2go''. This should build x2gokdrive binary. The simplest way to build x2gokdrive if you are using your system source packages. I'll give some examples for Debian, SLE12sp1 and OpenSUSE Leap 42.3 ==== Debian Stretch ==== * Install apt-source, and get source for xorg-server ''apt-build source xorg-server'' * Go to the source directory and build it with ''dpkg-buildpackage'' * Copy x2gokdrive sources to ''xorg-server-1.19.2/hw/kdrive/'' * Create directory 'x2gokdrive' in ''xorg-server-1.19.2/debian/build/main/hw/kdrive/'' * Link Makefile from ''xorg-server-1.19.2/hw/kdrive/x2gokdrive'' to ''xorg-server-1.19.2/debian/build/main/hw/kdrive/x2gokdrive'' * Go to ''xorg-server-1.19.2/debian/build/main/hw/kdrive/x2gokdrive'' and run ''make x2go'' ==== SLES 12SP1 or OpenSUSE Leap 42.3 ==== * Download xorg-server SRPM for your system and install it * Install all dependencies you need to build xorg-server * Build xorg-server from SPEC file * Copy x2gokdrive sources to ''BUILD/xorg-server-/hw/kdrive'' * You'll need apply a patch for your system: ''patch -p1 < patches/osuse_42.3.patch'' or ''patch -p1 < patches/sles12sp1.patch'' * Build binary: ''make x2go'' ===== How to build x2gokdrive client ===== To build x2gokdriveclient you'll need QT-5. * Get it from git: [[https://code.x2go.org/gitweb?p=x2gokdriveclient.git;a=summary|x2gokdriveclient]] * Build it like any qt project: ''qmake && make'' ===== What X2Go KDrive already can do ===== * Works with recent desktops and software * Supports SW 3D acceleration * Supports RANDR, works with multiply desktops in window and full screen modes * Supports JPEG and PNG compression * Supports frame caching * Can recognize windows scrolling and doesn't transfer frame areas, which are already in cache. * Works with 3D acceleration (if you are using Virtual GL) * Has QT client for Linux and Windows (Mac client not ready yet, but it's not complicated, only keyboard encoding is missing) ===== What need to be done (sorted by priority) ===== * Proper build scripts and integration with jenkins * Support in X2Go Client and X2Go Server (it's actually done, just need to discus how we'll integrate it in our builds) * Clipboard support * Mac client * Different optimizations for slow networks, frame dropping, etc * Single applications * Video encodings * HTML5 client * ....