mirror of https://github.com/tLDP/LDP
603 lines
31 KiB
Plaintext
603 lines
31 KiB
Plaintext
<!DOCTYPE ARTICLE PUBLIC "-//OASIS//DTD DocBook V4.1//EN">
|
|
<article id="XWindow-Overview-HOWTO">
|
|
<articleinfo>
|
|
<title>X Window System Architecture Overview HOWTO</title>
|
|
|
|
<author>
|
|
<firstname>Daniel</firstname>
|
|
<surname>Manrique</surname>
|
|
<affiliation>
|
|
<address><email>roadmr@entropia.com.mx</email> </address>
|
|
</affiliation>
|
|
</author>
|
|
|
|
<revhistory>
|
|
<revision>
|
|
<revnumber>1.0.1</revnumber>
|
|
<date>2001-05-22</date>
|
|
<authorinitials>dm</authorinitials>
|
|
<revremark>
|
|
Some grammatical corrections, pointed out by Bill Staehle
|
|
</revremark>
|
|
</revision>
|
|
<revision>
|
|
<revnumber>1.0</revnumber>
|
|
<date>2001-05-20</date>
|
|
<authorinitials>dm</authorinitials>
|
|
<revremark>
|
|
Initial LDP release.
|
|
</revremark>
|
|
</revision>
|
|
</revhistory>
|
|
|
|
<abstract>
|
|
|
|
<para>This document provides an overview of the X Window
|
|
System's architecture, give a better understanding of its design,
|
|
which components integrate with X and fit together to provide a
|
|
working graphical environment and what choices are there regarding
|
|
such components as window managers, toolkits and widget libraries, and
|
|
desktop environments.</para>
|
|
</abstract>
|
|
</articleinfo>
|
|
|
|
|
|
|
|
<sect1 id="preface">
|
|
<title>Preface</title>
|
|
<para>
|
|
This document aims to provide an overview of the X Window System's
|
|
architecture, hoping to give people a better understanding of why it's
|
|
designed the way it's designed, which components integrate with X and
|
|
fit together to provide a working graphical environment and what
|
|
choices are there regarding those components.
|
|
</para>
|
|
<para>
|
|
We explore several concepts that get mentioned a lot but might be a
|
|
bit unclear for those without a technical background, such as widgets
|
|
and toolkits, window managers and desktop environments. Some examples
|
|
of how these components interact during day-to-day use of applications
|
|
are provided.
|
|
</para>
|
|
<para>
|
|
This document is, deliberately, not too technically oriented. It's
|
|
based on the author's (empirical) knowledge of the subject, and while
|
|
it's primarily meant as a non-technical introduction, it can certainly
|
|
benefit from any kind of comments, further examples and explanations,
|
|
and technical corrections. The author welcomes all questions and
|
|
comments regarding this document and can be reached at <ulink url="mailto:roadmr@entropia.com.mx"><citetitle>roadmr@entropia.com.mx</citetitle></ulink>.
|
|
</para>
|
|
</sect1>
|
|
|
|
<sect1 id="introduction">
|
|
<title>Introduction</title>
|
|
|
|
<para>Back when UNIX was a new thing, around 1970, graphical user
|
|
interfaces were only a weird thing being played with in a laboratory
|
|
(Xerox's PARC to be precise). Nowadays, however, any operating system
|
|
in hopes of being competitive needs to have a GUI subsystem. GUIs are
|
|
supposed to be easier to use. This is not much of a concern under
|
|
UNIX, which has traditionally been, to some extent, pretty
|
|
user-hostile, preferring versatility over ease of use. However, there
|
|
are several reasons why a GUI is desirable even on a UNIX system. For
|
|
instance, given UNIX's multitasking nature, it's natural to have a lot
|
|
of programs running at any given time. A GUI gives more control over
|
|
how things are displayed on-screen, thus providing with better
|
|
facilities for having a lot of programs on-screen at the same time.
|
|
Also, some kinds of information are better displayed in graphical form
|
|
(some, even, can only be displayed in graphical form; like pr0n and
|
|
other inherently graphical data).
|
|
</para>
|
|
<para>Historically, UNIX has had a lot of improvements done by
|
|
academic types. A good example is the BSD networking code added to it
|
|
in the late 1970's, which was, of course, the product of work at
|
|
the University of California at
|
|
Berkeley. As it turns out, the X Window System (also called X, but
|
|
never X Windows), which is the foundation for most GUI subsystems
|
|
found in modern UNIX (unices?), Linux and the BSD's included, was also
|
|
the result of an academic project, namely the Athena project at the Massachusetts Institute of Technology (MIT).
|
|
</para>
|
|
<para>Unix has been a multiuser, multitasking, timesharing operating
|
|
system since its beginnings. Also, since the incorporation of
|
|
networking technologies, it's had the ability to allow a user to
|
|
connect remotely and perform work on the system. Previously this was
|
|
accomplished either via dumb serial terminals, or network connections
|
|
(the legendary telnet).
|
|
</para>
|
|
<para>When the time came to develop a GUI system that could run
|
|
primarily under Unix, these concepts were kept in mind and
|
|
incorporated into the design. Actually, X has a pretty complex design,
|
|
which has often been mentioned as a disadvantage. However, because of
|
|
its design, it's also a really versatile system, and this will become
|
|
quite clear as we explain how all the parts comprising a GUI under
|
|
Unix fit together.
|
|
</para>
|
|
<para>Before taking a look at X's architecture, a really brief tour of
|
|
its history, and how it ended up on your Linux system, is in order.
|
|
</para>
|
|
<para>X was developed by the Athena project, and released in 1984. In
|
|
1988 an entity called the "X Consortium" took over X, and to this day
|
|
handles its development and distribution. The X specification is
|
|
freely available, this was a smart move as it has made X almost
|
|
ubiquitous. This is how XFree86 came to be. XFree86 is the
|
|
implementation of X we use on our Linux computers. XFree86 also works
|
|
on other operating systems, like the *BSD lineage, OS/2 and maybe
|
|
others. Also, despite its name, XFree86 is also available for other
|
|
CPU architectures. </para>
|
|
</sect1>
|
|
|
|
<sect1 id="arch-overview">
|
|
<title>The X Window System Architecture: overview</title>
|
|
|
|
<para>X was designed with a client-server architecture. The
|
|
applications themselves are the clients; they communicate with the
|
|
server and issue requests, also receiving information from the server.
|
|
</para>
|
|
<para>The X server maintains exclusive control of the display and
|
|
services requests from the clients. At this point, the advantages of
|
|
using this model are pretty clear. Applications (clients) only need to
|
|
know how to communicate with the server, and need not be concerned
|
|
with the details of talking to the actual graphics display device. At
|
|
the most basic level, a client tells the server stuff like "draw a
|
|
line from here to here", or "render this string of text, using this
|
|
font, at this position on-screen".
|
|
</para>
|
|
<para>This would be no different from just using a graphics library to
|
|
write our application. However the X model goes a step further. It
|
|
doesn't constrain the client being in the same computer as the server.
|
|
The protocol used to communicate between clients and server can work
|
|
over a network, or actually, any "inter-process communication
|
|
mechanism that provides a reliable octet stream". Of course, the
|
|
preferred way to do this is by using the TCP/IP protocols. As we can
|
|
see, the X model is really powerful; the classical example of this is
|
|
running a processor-intensive application on a Cray computer, a
|
|
database monitor on a Solaris server, an e-mail application on a small
|
|
BSD mail server, and a visualization program on an SGI server, and
|
|
then displaying all those on my Linux workstation's screen.
|
|
</para>
|
|
<para>So far we've seen that the X server is the one handling the
|
|
actual graphics display. Also, since it's the X server which runs on
|
|
the physical, actual computer the user is working on, it's the X
|
|
server's responsibility to perform all actual interactions with the
|
|
user. This includes reading the mouse and keyboard. All this
|
|
information is relayed to the client, which of course will have to
|
|
react to it.
|
|
</para>
|
|
<para>X provides a library, aptly called Xlib, which handles all
|
|
low-level client-server communication tasks. It sounds obvious that,
|
|
then, the client has to invoke functions contained within Xlib to get
|
|
work done.
|
|
</para>
|
|
<para>At this point everything seems to be working fine. We have a
|
|
server in charge of visual output and data input, client applications,
|
|
and a way for them to communicate between each other. In picturing a
|
|
hypothetical interaction between a client and a server, the client
|
|
could ask the server to assign a rectangular area on the screen. Being
|
|
the client, I'm not concerned with where i'm being displayed on the
|
|
screen. I just tell the server "give me an area X by Y pixels in
|
|
size", and then call functions to perform actions like "draw a line
|
|
from here to there", "tell me whether the user is moving the mouse in
|
|
my screen area" and so on.
|
|
</para>
|
|
</sect1>
|
|
|
|
<sect1 id="window-managers">
|
|
<title>Window Managers</title>
|
|
|
|
<para>However, we never mentioned how the X server handles
|
|
manipulation of the clients' on-screen display areas (called
|
|
windows). It's obvious, to anyone who's ever used a GUI, that you need
|
|
to have control over the "client windows". Typically you can move and
|
|
arrange them; change size, maximize or minimize windows. How, then,
|
|
does the X server handle these tasks? The answer is: it doesn't.
|
|
</para>
|
|
<para>One of X's fundamental tenets is "we provide mechanism, but not
|
|
policy". So, while the X server provides a way (mechanism) for window
|
|
manipulation, it doesn't actually say how this manipulation behaves
|
|
(policy).
|
|
</para>
|
|
<para>All that mechanism/policy weird stuff basically boils down to
|
|
this: it's another program's responsibility to manage the on-screen
|
|
space. This program decides where to place windows, gives mechanisms
|
|
for users to control the windows' appearance, position and size, and
|
|
usually provides "decorations" like window titles, frames and buttons,
|
|
that give us control over the windows themselves. This program, which
|
|
manages windows, is called (guess!) a "window manager".
|
|
</para>
|
|
<para>"The window manager in X is just another client -- it is not
|
|
part of the X window system, although it enjoys special privileges --
|
|
and so there is no single window manager; instead, there are many,
|
|
which support different ways for the user to interact with windows and
|
|
different styles of window layout, decoration, and keyboard and
|
|
colormap focus."
|
|
</para>
|
|
<para>The X architecture provides ways for a window manager to
|
|
perform all those actions on the windows; but it doesn't actually
|
|
provide a window manager.
|
|
</para>
|
|
<para>There are, of course, a lot of window managers, because since
|
|
the window manager is an external component, it's (relatively) easy to
|
|
write one according to your preferences, how you want windows to look,
|
|
how you want them to behave, where do you want them to be, and so on.
|
|
Some window managers are simplistic and ugly (twm); some are flashy
|
|
and include everything but the kitchen sink (enlightenment); and
|
|
everything in between; fvwm, amiwm, icewm, windowmaker, afterstep,
|
|
sawfish, kwm, and countless others. There's a window manager for every
|
|
taste.
|
|
</para>
|
|
<para>A window manager is a "meta-client", whose most basic mission is
|
|
to manage other clients. Most window managers provide a few additional
|
|
facilities (and some provide a lot of them). However one piece of
|
|
functionality that seems to be present in most window managers is a
|
|
way to launch applications. Some of them provide a command box where
|
|
you can type standard commands (which can then be used to launch
|
|
client applications). Others have a nice application launching menu of
|
|
some sort. This is not standardized, however; again, as X dictates no
|
|
policy on how a client application should be launched, this
|
|
functionality is to be implemented in client programs. While,
|
|
typically, a window manager takes on this task (and each one does it
|
|
differently), it's conceivable to have client applications whose sole
|
|
mission is to launch other client applications; think a program
|
|
launching pad. And of course, people have written large amounts of
|
|
"program launching" applications.
|
|
</para>
|
|
</sect1>
|
|
|
|
<sect1 id="client-applications">
|
|
<title>Client Applications</title>
|
|
|
|
<para>Let's focus on the client programs for a moment. Imagine you
|
|
wanted to write a client program from scratch, using only the
|
|
facilities provided by X. You'd quickly find that Xlib is pretty
|
|
spartan, and that doing things like putting buttons on screen, text,
|
|
or nice controls (scrollbars, radio boxes) for the users, is terribly
|
|
complicated.
|
|
</para>
|
|
<para>Luckily, someone else went to the trouble of programming these
|
|
controls and giving them to us in a usable form; a library. These
|
|
controls are usually known as "widgets" and of course, the library is
|
|
a "widget library". Then I just have to call a function from this
|
|
library with some parameters and have a button on-screen. Examples of
|
|
widgets include menus, buttons, radio buttons, scrollbars, and
|
|
canvases.
|
|
</para>
|
|
<para>A "canvas" is an interesting kind of widget, because it's
|
|
basically a sub-area within the client where i can draw
|
|
stuff. Understandably, since I shouldn't use Xlib directly, because
|
|
that would interfere with the widget library, the library itself gives
|
|
a way to draw arbitrary graphics within the canvas widget.
|
|
</para>
|
|
<para>Since the widget library is the one actually drawing the
|
|
elements on-screen, as well as interpreting user's actions into input,
|
|
the library used is largely responsible for each client's aspect and
|
|
behavior. From a developer's point of view, a widget library also has
|
|
a certain API (set of functions), and that might define which widget
|
|
library i'll want to use.
|
|
</para>
|
|
</sect1>
|
|
|
|
<sect1 id="toolkits">
|
|
<title>Widget Libraries or toolkits</title>
|
|
|
|
<para>The original widget library, developed for the Athena Project,
|
|
is of course the Athena widget library, also known as Athena
|
|
Widgets. It's very basic, very ugly, and the usage is not intuitive by
|
|
today's standards (for instance, to move a scrollbar or slider
|
|
control, you don't drag it; instead, you click the right button to
|
|
scroll up and the left button to scroll down). As such, it's pretty
|
|
much not used a lot these days.
|
|
</para>
|
|
<para>Just as it happens with window managers, there are a lot of
|
|
toolkits, with different design goals in mind. One of the earliest
|
|
toolkits is the well-known Motif, which was part of the Open Software
|
|
Foundation's Motif graphical environment, consisting of a window
|
|
manager and a matching toolkit. The OSF's history is beyond the scope
|
|
of this document. the Motif toolkit, being superior to the Athena
|
|
widgets, became widely used in the 1980's and early 1990's.
|
|
</para>
|
|
<para>These days, Motif is not a popular toolkit choice. It's not free
|
|
(speech), and OSF Motif costs money if you want a developer license
|
|
(i.e. to compile your own programs with it), altough it's OK to
|
|
distribute a binary linked against Motif. Perhaps the best-known Motif
|
|
application, for Linux users at least, is Netscape
|
|
Navigator/Communicator (prior to Mozilla).
|
|
</para>
|
|
<para>For a while Motif was the only decent toolkit available, and
|
|
there's a lot of Motif software around. Of course people started
|
|
developing alternatives, and there are plenty of toolkits, such as
|
|
XForms, FLTK and a few others.
|
|
</para>
|
|
<para>Motif is not heard of much these days, specially in the free
|
|
software world. The reason is that there are now better alternatives,
|
|
in terms of licensing, performance (Motif is widely regarded as quite
|
|
a pig) and features.
|
|
</para>
|
|
<para>One such toolkit, the widely known and used Gtk, was
|
|
specifically created to replace Motif in the GIMP project (one
|
|
possible meaning of Gtk is "GIMP ToolKit, altough, with its widespread
|
|
use, it could be interpreted as the GNU ToolKit). Gtk is now very
|
|
popular because it's relatively lightweight, feature-rich, extensible
|
|
and totally free (speech). The 0.6 release of the GIMP included
|
|
"Bloatif has been zorched" in the changelog. This sentence is a
|
|
testament to Motif's bloatedness.
|
|
</para>
|
|
<para>Another very popular toolkit these days is Qt. It was not too
|
|
well-known until the advent of the KDE project, which utilizes Qt for
|
|
all its GUI elements. We certainly won't get into Qt's licensing
|
|
issues and the KDE/GNOME disjunctive. Gtk gets a lengthy mention
|
|
because its history as a Motif replacement is interesting; Qt gets a
|
|
brief mention because it's really popular.
|
|
</para>
|
|
<para>Finally, another alternative worth mentioning is LessTif. The
|
|
name is a pun on Motif, and LessTif aims to be a free, API-compatible
|
|
replacement for Motif. It's not clear to what extent LessTif aims to
|
|
be used in new development, rather than just helping those with Motif
|
|
code use a free alternative while they (conceivably) port their apps
|
|
to some other toolkit.
|
|
</para>
|
|
</sect1>
|
|
|
|
<sect1 id="so-far">
|
|
<title>What we have so far</title>
|
|
|
|
<para>Up to this point we have an idea of how X has a client-server
|
|
architecture, where the clients are our application programs. Under
|
|
this client-server graphic system, we have several possible window
|
|
managers, which manage our screen real estate; we also have our client
|
|
applications, which are where we actually get our work done, and
|
|
clients can be programmed using several possible different toolkits.
|
|
</para>
|
|
<para>Here's where the mess begins. Each window manager has a
|
|
different approach to managing the clients; the behavior and
|
|
decorations are different from one to the next. Also, as defined by
|
|
which toolkit each client uses, they can also look and behave
|
|
differently from each other. Since there's nothing that says authors
|
|
have to use the same toolkit for all their applications, it's
|
|
perfectly possible for a user to be running, say, six different
|
|
applications, each written using a different toolkit, and they all
|
|
look and behave differently. This creates a mess because behavior
|
|
between the apps is not consistent. If you've ever used a program
|
|
written with the Athena widgets, you'll notice it's not too similar to
|
|
something written using Gtk. And you'll also remember it's a mess
|
|
using all these apps which look and feel so different. This basically
|
|
negates the advantage of using a GUI environment in the first place.
|
|
</para>
|
|
<para>On a more technical standpoint, using lots of different toolkits
|
|
increases resource usage. Modern operating systems support the concept
|
|
of dynamic shared libraries. This means that if I have two or three
|
|
applications using Gtk, and I have a dynamic shared version of Gtk,
|
|
then those two or three applications share the same copy of Gtk, both
|
|
on the disk and in memory. This saves resources. On the other hand, if
|
|
I have a Gtk application, a Qt application, something Athena-based, a
|
|
Motif-based program such as Netscape, a program that uses FLTK and
|
|
another using XForms, I'm now loading six different libraries in
|
|
memory, one for each of the different toolkits. Keep in mind that all
|
|
the toolkits provide basically the same functionality.
|
|
</para>
|
|
<para>There are other problems here. The way of launching programs
|
|
varies from one window manager to the next. Some have a nice menu for
|
|
launching apps; others don't, and they expect us to open a
|
|
command-launching box, or use a certain key combination, or even open
|
|
an xterm and launch all your apps by invoking the commands. Again,
|
|
there's no standarization here so it becomes a mess.
|
|
</para>
|
|
<para>Finally, there are niceties we expect from a GUI environment
|
|
which our scheme hasn't covered. Things like a configuration utility,
|
|
or "control panel"; or a graphical file manager. Of course, these can
|
|
be written as client apps. And, in typical free software fashion,
|
|
there are hundreds of file managers, and hundreds of system
|
|
configuration programs, which conceivably, further the mess of having
|
|
to deal with a lot of disparate software components.
|
|
</para>
|
|
</sect1>
|
|
|
|
<sect1 id="desktop-environments">
|
|
<title>Desktop environments to the rescue</title>
|
|
|
|
<para>Here's where the concept of a desktop environment kicks in. The
|
|
idea is that a desktop environment provides a set of facilities and
|
|
guidelines aiming to standardizing all the stuff we mentioned so that
|
|
the problems we mentioned earlier are minimized.
|
|
</para>
|
|
<para>The concept of a desktop environment is something new to people
|
|
coming for the first time to Linux because it's something that other
|
|
operating systems (like Windows and the Mac OS) intrinsically
|
|
have. For example, MacOS, which is one of the earliest graphical user
|
|
interfaces, provides a very consistent look-and-feel during the entire
|
|
computing session. For instance, the operating system provides a lot
|
|
of the niceties we mentioned: it provides a default file manager (the
|
|
finder), a systemwide control panel, and single toolkit that all
|
|
applications have to use (so they all look the same). Application
|
|
windows are managed by the system (strictly speaking there's a window
|
|
manager working there). Finally, there are a set of guidelines that
|
|
tell developers how their applications should behave, recommend
|
|
control looks and placement, and suggest behaviors according to those
|
|
of other applications on the system. All this is done in the sake of
|
|
consistency and ease of use.
|
|
</para>
|
|
<para>This begs the question, "why didn't the X developers do things
|
|
that way in the first place?". It makes sense; after all, it would
|
|
have avoided all the problems we mentioned earlier. The answer is that
|
|
in designing X, its creators chose to make it as flexible as
|
|
possible. Going back to the policy/mechanism paradigm, the MacOS
|
|
provides mostly policies. Mechanisms are there, but they don't
|
|
encourage people to play with those. As a result I lose versatility;
|
|
if I don't like the way MacOS manages my windows, or the toolkit
|
|
doesn't provide a function I need, I'm pretty much out of luck. This
|
|
doesn't happen under X, altough as seen before, the price of
|
|
flexibility is greater complexity.
|
|
</para>
|
|
<para>Under Linux/Unix and X, it all comes down to agreeing on stuff
|
|
and sticking to it. Let's take KDE for example. KDE includes a single
|
|
window manager (kwm), which manages and controls the behavior of our
|
|
windows. It recommends using a certain graphic toolkit (Qt), so that
|
|
all KDE applications look the same, as far as their on-screen controls
|
|
go. KDE further extends Qt by providing a set of environment-specific
|
|
libraries (kdelibs) for performing common tasks like creating menus,
|
|
"about" boxes, program toolbars, communicating between programs,
|
|
printing, selecting files, and other things. These make the
|
|
programmer's work easier and standardize the way these special
|
|
features behave. KDE also provides a set of design and behavior
|
|
guidelines to programmers, with the idea that, if everybody follows
|
|
them, programs running under KDE will both look and behave very
|
|
similarly. Finally, KDE provides, as part of the environment, a
|
|
launcher panel (kpanel), a standard file manager (which is, at the
|
|
time being, Konqueror), and a configuration utility (control panel)
|
|
from which we can control many aspects of our computing environment,
|
|
from settings like the desktop's background and the windows' titlebar
|
|
color to hardware configurations.
|
|
</para>
|
|
<para>The KDE panel is an equivalent to the MS Windows taskbar. It
|
|
provides a central point from which to launch applications, and it
|
|
also provides for small applications, called "applets", to be
|
|
displayed within it. This gives functionality like the small, live
|
|
clock most users can't live without.
|
|
</para>
|
|
</sect1>
|
|
|
|
<sect1 id="specific-desktop-environments">
|
|
<title>Specific Desktop Environments</title>
|
|
|
|
<para>We used KDE as an example, but it's by no means the earliest
|
|
desktop environment for Unix systems. Perhaps one of the earliest is
|
|
CDE (Common Desktop Environment), another sibling of the OSF. As per
|
|
the CDE FAQ: "The Common Desktop Environment is a standard desktop for
|
|
UNIX, providing services to end-users, systems administrators, and
|
|
application developers consistently across many platforms." The key
|
|
here is consistency. However CDE wasn't as feature-rich and easy as it
|
|
needed to be. Along with Motif, CDE has practically disappeared from
|
|
the free software world, having been replaced by better alternatives.
|
|
</para>
|
|
<para>Under Linux, the two most popular desktop environments are KDE
|
|
and GNOME, but they're not the only ones. A quick internet search will
|
|
reveal about half a dozen desktop environments: GNUStep, ROX,
|
|
GTK+XFce, UDE, to name a few. They all provide the basic facilities we
|
|
mentioned earlier. GNOME and KDE have had the most support, both from
|
|
the community and the industry, so they're the most advanced ones,
|
|
providing a large amount of services to users and applications.
|
|
</para>
|
|
<para>We mentioned KDE and the components that provide specific
|
|
services under that environment. As a good desktop environment, GNOME
|
|
is somewhat similar in that. The most obvious difference is that GNOME
|
|
doesn't mandate a particular window manager (the way KDE has kwm). The
|
|
GNOME project has always tried to be window manager-agnostic,
|
|
acknowledging that most users get really attached to their window
|
|
managers, and forcing them to use something that manages windows
|
|
differently would detract from their audience. Originally GNOME
|
|
favored the Enlightenment window manager, and currently their
|
|
preferred window manager is Sawfish, but the GNOME control panel has
|
|
always had a window manager selector box.
|
|
</para>
|
|
<para>Other than this, GNOME uses the Gtk toolkit, and provides a set
|
|
of higher-level functions and facilities through the gnome-libs set of
|
|
libraries. GNOME has its own set of programming guidelines in order to
|
|
guarantee a consistent behavior between compliant applications; it
|
|
provides a panel (called just "panel"), a file manager (gmc, altough
|
|
it's probably going to be superseded by Nautilus), and a control panel
|
|
(the gnome control center).
|
|
</para>
|
|
</sect1>
|
|
|
|
<sect1 id="fit-together">
|
|
<title>How it all fits together</title>
|
|
|
|
<para>Each user is free to choose whichever desktop environment feels
|
|
the best. The end result is that, if you use an all-kde or all-gnome
|
|
system, the look and feel of the environment is very consistent; and
|
|
your applications all interact between them pretty nicely. This just
|
|
wasn't possible when we had apps written in a hodgepodge of different
|
|
toolkits. The range of facilities provided by modern desktop
|
|
environments under Linux also enable some other niceties, like
|
|
component architectures (KDE has Kparts and GNOME uses the Bonobo
|
|
component framework), which allow you to do things like having a live
|
|
spreadsheet or chart inside a word processing document; global
|
|
printing facilities, similar to the printing contexts found in
|
|
Windows; or scripting languages, which let more advanced users write
|
|
programs to glue applications together and have them interact and
|
|
cooperate in interesting ways.
|
|
</para>
|
|
<para>Under the Unix concept of "desktop environment", you can have
|
|
programs from one environment running in another. I could conceivably
|
|
use Konqueror within GNOME, or Gnumeric under KDE. They're just
|
|
programs, after all. Of course the whole idea of a desktop environment
|
|
is consistency, so it makes sense to stick to apps that were designed
|
|
for your particular environment; but if you're willing to cope with an
|
|
app that looks "out of place" and doesn't interact with the rest of
|
|
your environment, you are completely free to do so.
|
|
</para>
|
|
</sect1>
|
|
|
|
<sect1 id="a-day">
|
|
<title>A day in the life of an X system</title>
|
|
|
|
<para>This is an example of how a typical GNOME session goes, under a
|
|
modern desktop environment in a Linux system. It's very similar to how
|
|
things work under other environments, assuming they work on top of X.
|
|
</para>
|
|
<para>When a Linux system starts X, the X server comes up and
|
|
initializes the graphic device, waiting for requests from
|
|
clients. First a program called gnome-session starts, and sets up the
|
|
working session. A session includes things such as applications I
|
|
always open, their on-screen positions, and such. Next, the panel gets
|
|
started. The panel appears at the bottom (usually) and it's sort of a
|
|
dashboard for the windowing environment. It will let us launch
|
|
programs, see which ones are running, and otherwise control the
|
|
working environment. Next, the window manager comes up. Since we're
|
|
using GNOME, it could be any of several different window managers, but
|
|
in this case we'll assume we're running Sawfish. Finally, the file
|
|
manager comes up (gmc or Nautilus). The file manager handles
|
|
presentation of the desktop icons (the ones that appear directly on
|
|
the desktop). At this point my GNOME environment is ready to work.
|
|
</para>
|
|
<para>So far all of the programs that have been started are clients,
|
|
connecting to the X server. In this case the X server happens to be in
|
|
the same computer, but as we saw before, it need not be.
|
|
</para>
|
|
<para>We'll now open an xterm to type some commands. When we click on
|
|
the xterm icon, the panel spawns, or launches, the xterm
|
|
application. It's another X client application, so it starts, connects
|
|
to the X server and begins displaying its stuff. When the X server
|
|
assigns screen space for my xterm, it lets the window manager
|
|
(Sawfish) decorate the window with a nice titlebar, and decide where
|
|
it will be on screen.
|
|
</para>
|
|
<para>Let's do some browsing. We click on the Netscape icon on the
|
|
panel, and up comes a browser. Keep in mind that this browser doesn't
|
|
use GNOME's facilities, nor does it use the Gtk toolkit. It looks a
|
|
bit out of place here... also, it doesn't interact very nicely with
|
|
the rest of the environment. I'll open the "File" menu. Motif is
|
|
providing the on-screen controls, so it's the Motif library's job to
|
|
make the appropriate calls to the underlying Xlib, draw the necessary
|
|
on-screen elements to display the menu and let me select the "exit"
|
|
option, closing the application.
|
|
</para>
|
|
<para>Now I open a Gnumeric spreadsheet and start doing some stuff. At
|
|
some point I need to do some work on the xterm I had open, so I click
|
|
on it. Sawfish sees that, and, being in charge of managing windows,
|
|
brings the xterm to the top and gives it focus so I can work there.
|
|
</para>
|
|
<para>After that, I go back to my spreadsheet, now that I'm finished I
|
|
want to print my document. Gnumeric is a GNOME application, so it can
|
|
use the facilities provided by the GNOME environment. When I print,
|
|
Gnumeric calls the gnome-print library, which actually communicates
|
|
with the printer and produces the hard copy I need.
|
|
</para>
|
|
</sect1>
|
|
<sect1 id=copyright>
|
|
<title>Copyright and License</title>
|
|
<para>Copyright (c) 2001 by Daniel Manrique</para>
|
|
<para>
|
|
Permission is granted to copy, distribute and/or modify this document
|
|
under the terms of the <ulink
|
|
url="http://www.gnu.org/copyleft/fdl.html"><citetitle>GNU Free Documentation
|
|
License</citetitle></ulink>, Version 1.1 or any later version
|
|
published by the Free Software Foundation with no Invariant Sections,
|
|
no Front-Cover Texts, and no Back-Cover Texts. A copy of the license
|
|
can be found <ulink url="http://www.gnu.org/copyleft/fdl.html">here</ulink>.
|
|
</para>
|
|
|
|
</sect1>
|
|
|
|
</article>
|
|
|