Unix Programming - How to Choose among the Methods - Case Study: The XFree86 Server
The X windowing system is the engine that supports bitmapped
displays on Unix machines. Unix applications running through a client machine
with a bitmapped display get their input events through X and
send screen-painting requests to it. Confusingly, X ‘servers’
actually run on the client machine — they exist to serve requests to
interact with the client machine's display device. The applications
sending those requests to the X server are called ‘X
clients’, even though they may be running on a server machine.
And no, there is no way to explain this inverted terminology that is
not confusing.
X servers have a forbiddingly complex interface to their
environment. This is not surprising, as they have to deal with a wide
range of complex hardware and user preferences. The environment
queries common to all X servers, documented on the
X(1)
and
Xserver(1)
pages, therefore make a useful example for study. The implementation
we examine here is XFree86, the X implementation used under
Linux
and several other open-source Unixes.
At startup, the XFree86 server examines a systemwide
run-control file; the exact pathname varies between X builds on
different platforms, but the basename is XF86Config. The XF86Config
file has a shell-like syntax as described above. Example10.2 is a sample section of an XF86Config file.
The XF86Config file describes the host machine's display
hardware (graphics card, monitor), keyboard, and pointing device
(mouse/trackball/glidepad). It's appropriate for this information to
live in a systemwide run-control file, because it applies to all
users of the machine.
Once X has acquired its hardware configuration from the run
control file, it uses the value of the environment variable
HOME to find two dotfiles in the calling user's home
directory. These files are .Xdefaults and
.xinitrc.[105]
The .Xdefaults file specifies per-user,
application-specific resources relevant to X (trivial examples of
these might include font and foreground/background colors for a
terminal emulator). The phrase ‘relevant to X’ indicates a
design problem, however. Collecting all these resource declarations
in one place is convenient for inspecting and editing them, but it is
not always clear what should be declared in
.Xdefaults and what belongs in an
application-specific dotfile. The .xinitrc file
specifies the commands that should be run to initialize the user's X
desktop just after server startup. These programs will almost always
include a window or session manager.
X servers have a large set of command-line options. Some of
these, such as the -fp (font path) option, override
the XF86Config. Some are intended to help track server bugs, such as
the -audit option; if these are used at all, they are
likely to vary quite frequently between test runs and are therefore
poor candidates to be included in a run-control file. A very important
option is the one that sets the server's display number. Multiple
servers may run on a host provided each has a unique display number,
but all instances share the same run-control file(s); thus, the
display number cannot be derived solely from those files.
[an error occurred while processing this directive]
|