On 06/30/2014 07:36 AM, Chris Angelico wrote:
> Hmm. I'm not sure that it's necessarily that bad; I've done 3G-based
> X11 forwarding fairly successfully on occasion. Yes, it's potentially
> quite slow, but it certainly works - I've used SciTE, for instance,
> and I've used some GTK2 apps without problems. What do you mean by
> "modern toolkit"?
Modern toolkit is defined as anything that uses client-side rendering.
In the good old days of Motif and Xaw widgets, if a program wanted to
draw, the toolkit would instruct the server to draw primitives.
Rectangles, lines, etc. Each widget would be created in its own window,
and events would be all handled on the server. Unfortunately we quickly
hit some limits with that idea, as good and fast as it was. First of
all, anti-aliased fonts were difficult to accomplish. There were hacks
to do this early on, but it quickly became apparent that the actual
application could do a better job of it if it would just do the
rendering itself and have the X server draw it. Not only anti-aliased
fonts, but also when you start talking about wanting to do layered
effects like alpha-blending. All of this the app could do better and
more efficiently than the X server could, since the X server would have
had to round-trip to the app anyway to get the information since the X
server is in a different process (or different computer) and cannot
access the memory the app is using to store things. Kieth Packard wrote
some X extensions to allow client-side rendering to be efficient and to
let the X server to handle RGBA images, and to composite them together.
Also, events in modern toolkits are done very differently than the
original X toolkits. Instead of using multiple windows, clients now
just establish one window and then handle events and figure out what
widgets should receive the events client-side instead of server-side.
This allows handling of things like scrollable canvases.
Anyway, all of this improved the behavior and appearance of
applications. When used locally, shared memory facilities make X pretty
fast, although latency is still quite high. There's no way to
synchronize frame redraws, so apps tear and stutter when you drag and
resize. But over a network now, the nature of the X protocol means a
lot of round-trips to the server to do things. This is very apparent
when you run on a very slow connection. You might see widgets get drawn,
then erase, then drawn again. Using a complex app like firefox, which
has another layer of abstraction over GTK that makes it even worse, is
very difficult on anything less than a LAN. Or try a Java Swing app!
I've done it on occasion. I'd rather run Xvnc on the remote host and vnc
in than forward X.
FreeNX makes things very usable.
http://en.wikipedia.org/wiki/NX_technology describes how NX works.
I love that X11 apps work over a forward connection. And I love that I
can run a remote window manager on a local X server if I wanted to. But
I recognize X has it's problems and I can see how Wayland will
eventually be so much better while still letting me remote apps, which
is essential to me.