Fully Integrated KDE NX Client

Synopsis

A fully integrated, native KDE NX Client will be designed/implemented to bring a full speed "remote desktop" feature to KDE. NX is a remote desktop protocol, that is an order of magnitude faster than VNC or X11 and can run on bandwidth as narrow as 40 kBit/sec. This client will for now base itself on the "nxc" library of the FreeNX Project (http://freenx.berlios.de/), but will be able to use a different, improved library in the future.

Goals

My personal goal is to integrate an NX client fully into KDE. At the same time, the actual client app should go with as little bothering as possible about what the "outside NX world" decides to put into their next set of features.

I will use an external library to deal with the ins and outs of NX sessions. I will concentrate my work on the KDE Integration and User Interface side.

Context

As my first approximation to the final goal, I will use and build on the nxc library as hosted by the FreeNX Project. This library is said by the FreeNX people to be "roughly working", but needing "much more polish", "lots of feature additions" and "quite some bug fixing". The FreeNX people are hoping to be able to offer a better nxc or successor lib next spring, after implementing the new NX 1.5.0 features this autumn.

However, even the most complete NX client library in and of itself does not yet give a fully end-user fitting application, nor does it provide a full integration into modern desktop environments like KDE. My KDE NX Client will provide this missing link, but rely on an external NX client lib to provide the NX specific functions the user wants to use.

NoMachine NX

NoMachine NX is described on their Freshmeat website entry:

NoMachine NX is a fast terminal server system based on the X11 protocol.

In addition, NX also translates and embeds the MS Windows Terminal Server and VNC protocols into X/NX. NX is an order of magnitude faster than VNC or X11 and can run on bandwidth as narrow as 40 kBit/sec. NX lets you work fluently even across slow links like modems. The NX project provides efficient transport of X11, SMB, IPP, HTTP, and arbitrary protocols like audio over the Internet.

FreeNX is a free implementation of a NoMachine/NX-compatible terminal server. It makes use of NoMachine's NX command line tools more convenient and less error prone.

The State of NX Clients

The NoMachine NX client is working very well, but it is a mere standalone application, that does not integrate well into KDE.

KDE has an own NX client implementation ("knx" in the kdenonbeta Subversion source code repository). knx is shipped with SUSE-9.3 Professional (but only on the DVD, not the CD). It is characterised by one KDE Project member (Kurt Pfeifle) in a private mail exchange like this:

knx works.. well, sort of. But it never went beyond 'proof of concept' stage. It is the result of a half-day hack during LinuxTag 2004. Unfortunately, since that date, no progress was made. The original authors didn't have any time free to get it into a really polished shape, let alone to integrate it more deeply into KDE. It does not even work well as a standalone application. Other duties of life, such as university exams and job took their toll and let knx suffer from negligence. (Free)NX as well as KDE deserve better than the current proof-of-concept kNX state. (permission to quote this here given by Kurt)

Design Criteria of the KDE NX Client

Cooperation with Usability Experts from the Beginning
It seems that too often Linux GUI programs were started and completed without ever consulting with a software usability professional. I will register the KDE NX Client project ASAP with www.OpenUsability.org to ensure a good usability design.
Few Library dependencies
Other than the core NX libraries and runtime binaries, the KDE NX client should not rely on other libraries but the "nxc" lib; this dependency should be made easy to replace with any other generic NX client library that could appear.
Compatibility with FreeNX and NoMachine NX servers
The KDE NX client must be able to work with NoMachine and FreeNX server implementations - versions 1.4.0 and 1.5.0 of NoMachine Server, and FreeNX 0.4.0; precautions should be taken so that it will be easily adapted to support any changes introduced by NoMachine at a later date.
Features must match the current NoMachine 1.4.0 Client
Full Integration into the KDE Framework
While being able to work as a standalone NX client when running on a non-KDE desktop, the new KDE NX client should be designed to fully utilise the power of the KDE framework when running on its home turf. That means:
  • using KWallet for secure password storage and re-use without re-typing by their credentials
  • interfacing with KDM for starting a remote NX session even from the login screen (instead or in addition to a normal local KDE session)
  • providing a KPart for the NX session windows to embed themselves in (with the option of a "tabbed window" that holds multiple concurrent sessions, or that embeds into Konqueror)
  • evaluating the feasibility of an "nx://" KIO Slave to start NX sessions from a Konqueror URL address bar
  • merge the KDE NX client with the existing "krdc" client that provides remote RFB/VNC and RDP/Windows sessions
  • possible integration with one or more of the KDE VoIP programs, so that peer-to-peer NX session between cooperating friends and colleagues, or helpdesks and users can be enriched by live chats
Full User Documentation of the Progra
m
The KDE NX Client must be fully documented and documentation must meet KDE standards and integrate into the KDE documentation framework
Complete with WhatsThis Help in the GUI
KDE provides a mechanism to explain, on demand, each single UI widget and its functions to the user, called WhatsThis The KDE NX Client aims at a similarly complete implementation of the WhatsThis help for the end user.
Ability to read & write the NoMachine NX client config file format

Project Schedule

The Project will be completed by the end of August. I have started already with design discussions. I have already contacted Kurt Pfeifle (FreeNX Mentor) and Aaron J. Seigo (KDE Developer) with queries relating to this project and I will be in constant exchange with them over the projected work. I already had some great feedback and they promised they would help with their advices and mentoring for the wellbeing of the new KDE NX client.

Motivation

I have been a KDE user for many years since KDE2, but I have never contributed anything to it. I have started to learn Qt programming, but have not yet actually completed a project with it, and look forward to doing so.

The KDE NX Client would be a great way to start working with the Open Source community not just as a user, but also as a programmer.

One interesting use for NX technology is providing a centralised test server for projects such as KDE. Users may test applications remotely without being concerned with compiling or installing (a large issue with projects such as KDE). Contributors such as documenters, testers, artists, and those just "dipping there feet" in a project could benefit greatly.

NX may also be used in place of existing remote desktop technology such as VNC and others and would make a logical addition to the KDE project.

Additional Info about NX and FreeNX

NoMachine.com NX technology documentation -- http://www.nomachine.com/documentation.php
LinuxJournal, "Major Breakthrough in Linux Technology" -- http://www.linuxjournal.com/article/8342
Interview with FreeNX developers -- http://www.osnews.com/story.php?news_id=3D8139
FreeNX and nxc source repository -- http://developer.berlios.de/projects/freenx
FreeNX-kNX@kde.org mailing list -- https://mail.kde.org/mailman/listinfo/freenx-knx
FreeNX Freshmeat site -- http://freshmeat.net/projects/freenx

Summary

The primary aim of the project is to produce a remote desktop application capable of communicating via NX, and other protocols already supported by krfb.

The NX system provides remote desktop capability with low bandwidth requirements.

The project will use a range of existing KDE technologies, such as KWallet to securely store passwords, DCOP for interprocess communication, WhatsThis for interactive tooltips and help, and KPart for embedding into other applications such as Konqueror.

Usability and documentation are key features in the specification, design and implementation of this project.

[ Edit ]