Go to your ~/NX directory and untar, from there, all the previous files. nx-X11 is a
modified XFree86 distribution, so, as usual:
> make World
This will also build nxcomp, nxcompext and all the required libs in nx-X11.
nxagent is usually run by leveraging Xcomp’s capability to provide transparent X
compressed transport. nx-X11 distribution provides a new Xlib X transport layer with
a new semantic of X display.
You can run:
> ./nxagent -display nx/nx,link=modem:1000
In this case the modified Xlib, linked by nxagent, will create a proxy process that will
listen for connection from a proxy peer running on the user's client. In this way any X
client can be NX-ized. Local (thin client) proxy is run with:
> ./nxproxy -S remote_host:1000
The local nxproxy will connect to the nxagent process and forward the X traffic to the
current display.
Special NX-ized clients, called "agents", were developed by NoMachine to
handle X, RDP and RFB sessions. The agent providing X transport of X session is nxagent.
This is based on the well known Xnest "nested" server. nxagent, like Xnest,
is an X server for its own clients, and at the same time, an X client for the
real X server.
The main scope of nxagent is to eliminate X round-trips or transform them into
asynchronous replies. nxproxy does not make any effort to minimize round-trips
by itself, this is demanded of nxagent. Being an X server, nxagent is able to
resolve locally all the property/atoms related requests, ensuring that the most
common source of round-trips are nearly reduced to zero.
As we have seen, good compression would be useless without a comparable effort
dedicated to reducing the X round-trips. Single applications running through an
nxproxy tunnel cannot currently leverage round-trip suppression offered by nxagent.
A rootless nxagent (that is a nxagent that is able to mix its own windows with windows
opened by local clients on the real X server) will be made available in the
future.
Concerning the original Xnest, distributed by the XFree86 project, NoMachine has
implemented significant improvements. By integrating frame-buffer functionalities,
we have eliminated many GetImage requests that were needed by original Xnest.
A lot of work was devoted to font handling to solve the problems you can find
described in the Xnest main page.
nxagent implements clipboard integration with the host X server and internal handling
of expose events. This last feature permits nxagent to greatly speed up repaints as it
does not have to wait for expose events coming from the real X server.
nxagent can be considered a better Xnest and it is, infact, able to run much faster
than Xnest, even without X compression functionalities provided by other NX components.
Xcompext library is used to tie together NX agents with compression capabilities of
Xcomp/nxproxy. Xcompext adds some Xlib functions and some primitives to the X protocol
that let agents compress images and perform X protocol operations in a way that helps
Xcomp to carry out its job.
For example, Xcomp provides streaming of big images in small chunks, so nxagent can put
demanding clients to sleep, and wake them up as soon as images (or other big requests)
have been completely transferred to the remote side. These interfaces are implemented in
Xcompext. This makes it very simple to develop further agents leveraging similar
functionalities.