There are a lot of tricks to the fonts and colors used in X. They are not quite as simple as in some other systems, for instance, the font is not just a one-word name. You specify these resources quite explicitly, and it seems rather complex at first, but with a little explanation you'll be a whiz in no time.
The X Logical Font Description (``XLFD'') is the full name for a font. It consists of the following fields:
fndry- font foundry, the company or individual which made the font
fmly- font family, the popular nickname of the font
wght- font weight (bold, medium, etc.)
slant- font slant (italics, oblique, roman (normal), etc.)
sWdth- font width (normal, condensed, extended, etc.)
adstyl- additional style (sans serif, serif, etc.)
pxlsz- pixel size, the number of pixels vertically in a character
ptSz- approximate point size of the text (similar to pxlsz)
resx- horizontal resolution, in dpi
resy- vertical resolution, in dpi
spc- spacing, only useful, apparently, in the Schumacher fonts
avgWidth- average character width of the font
rgstry- the recognized registry that lists the font
encdng- nationality encoding
In light of this chaos, the program xfontsel (the default X
Window font selection program) will come in enormously useful to you.
launching it right now. You will see a strange nothing helpful in the
main window, but try holding the left button down on the
button. If all your fonts are in order, you will see a menu of
forth. Select one such as
b&h and you will notice that the
font in the lower window changes to something intelligible. This is
generally the way you will select fonts with this program, starting
the left, which is the most general selection, and moving toward the
right, to the more specific options. Selecting an option toward the
rightmost end will not make much sense before the foundry, for
is selected, because the options are generally ordered by their
dependence on each other.
When you go to select from the
fmly selection, you will see
of the options greyed out, and only three remaining. That means that
these three are the only families of font made by this foundry. Some
families appear under more than one foundry, for instance, both
Adobe and Bitstream make a variation of the Courier
font. Now you can select the
wght, and so forth. After you get
far enough you will have narrowed it down to the font that you want.
don't necessarily have to fill in all the options to choose a single
there's not that many fonts on your system! The options that
do not select will be represented by a
* indicating that any
option will do in that spot.
When you are happy with your font selection, you can hit the select
button, and your selection will be placed in the X clipboard, ready to
pasted into your document or whatever you are working on. For instance,
go to your xterm window and type in something like
-font followed by an opening quotation mark. Then point to that
spot on your screen, and click your middle mouse button (or click both
the left and right, if you're middle-button impaired). This will paste
the selection from the clipboard, which should be the font you just
selected. Then enter the closing quote, and hit
instance, a nice big xterm with a Courier font specified would
look like this:
A fresh xterm
should the pop up using the font that you selected.
The utility xfd is very helpful for examining a font. If you
launch it with a command line such as
xfd -fn fixed, it will
show you the character set for the font, much like the keycaps utility
a Macintosh. Note that you can also limit the number of fonts that you
want xfontsel to display with the command line option
-pattern, followed by a quoted font specification, as
Sometimes it gets tiresome to remember all of the long font names, and very impractical too. Luckily, it is not necessary to type in a hundred keystrokes or so just to get the font name you want, for X provides something called font aliases.
If you look in the directory
you will find shortcut names for many of the fonts. For example,
8x16 is listed as a shortcut for
anywhere you enter
8x16 as an X font resource or at a command
for a font name, the long version of the font will be substituted. The
75dpi and 100dpi directories have similar aliases to
advantage of, on most systems the Lucida Sans font has a nice shortcut.
If you add fonts or aliases to your system, you will have to issue a few commands (probably as root). If you add fonts, you will have to issue the following two commands (these are examples, you will have to put in the correct directory, or perhaps leave it off altogether, to have your fonts re-read correctly.
mkfontdir /usr/lib/X11/fonts/misc xset fp rehash
If you change the alias file for a font, you may only have to issue the last command above, but it may be a good idea to issue them both, to be sure. With the xset command you can explicitly issue a font path you wish the server to use, you can delete a specific directory from your font path, see the man page for more information.
Another common problem is that some distributions (notably Red Hat 5.2, at the moment) come with the fonts configured in the wrong order. If you take a look at your /etc/XF86Config (it may be somewhere else in some distributions, unfortunately, and I'm not sure where it is in Red Hat at the moment, so maybe locate it...) Take a look at this file if your fonts are ugly in X (as in, very difficult to read even at large sizes). You will see a bunch of entries that look something like this:
FontPath "/usr/X11R6/lib/X11/fonts/misc/" FontPath "/usr/X11R6/lib/X11/fonts/75dpi/:unscaled" FontPath "/usr/X11R6/lib/X11/fonts/100dpi/:unscaled" FontPath "/usr/X11R6/lib/X11/fonts/Type1/" FontPath "/usr/X11R6/lib/X11/fonts/Speedo/"
The important thing to note here is that we have the unscaled
bitmapped fonts (the directories misc, 75dpi, 100dpi) before the
scaled fonts (such as Type1 and Speedo). Bitmapped fonts are
preferred for the X Server, because scaled fonts don't look very
pretty for common use, they're better for things like The Gimp or
Netscape, perhaps. You should also do a sanity check to see that
these directories all do, in fact exist, and if you have modified any
lately, you might need to (as root) go in and issue an
* command in the fonts directory.
Note that if you are running a more recent distribution, such as one based on Red Hat 6.0 or later, you won't have to worry about this, as the xttfs True Type font server is the default, and does not use the path system to find your fonts.
The font types X generally accepts are of limited use, considering that about the only place you'll find fonts of that kind used are in the X Window System itself, and unfortunately most media junkies and fontaholics work in operating systems that prefer other formats. Type 1 fonts, most commonly used in conjunction with PostScript document formats, can be found for free on the internet with considerable ease. Try ftp://ftp.cdrom.com/pub/os2/fonts/ for starters.
To make use of these fonts is not that difficult, and graphics programs
like GIMP will take advantage of them tremendously, and best
of all, the Linux X servers understand Type 1 fonts ``out of the box.''
To use them, first unpack the archive using the appropriate commands,
and put the fonts with a
.pfb extension in
/usr/X11R6/lib/X11/fonts/type1/ on your system. Then, add
mention of those fonts in the
fonts.scale file in that
directory, using the format for the other fonts, already there. Then
save the file.
Now, you should be able to
mkfontdir to tell the X server about
the updates, and then run
xset fp rehash to re-read the font
path. If this doesn't work for you, you might have to restart X to see
If you find yourself using Type 1 fonts a lot, and for things other than just X (GhostScript, for instance, can handle this font format as well), you'll want to check out the type1inst utility by James Macnicol. This program can configure Type 1 fonts for GhostScript and X, and it can also generate sample sheets for your fonts, and does most of the work of configuration for you. This program can usually be found at ftp://metalab.unc.edu/pub/Linux/X11/xutils/.
If you have been using an operating system such as Windows or the MacOS, you may have lots of fonts sitting on your computer already that are TrueType fonts. TrueType fonts are considered best on smaller, low-resolution displays, such as your computer monitor, and attempt to provide nice features like shading and antialiasing, making your display look smoother. It is also really easy to find cheap TrueType fonts in bulk, and CD's featuring upwards of 500 fonts in the TrueType format are common in computer stores.
X does not understand TrueType fonts, and has no innate capability (at present) to do so, and so it needs a separate program to do the font rendering for it. There is a FreeType library to do this, but if you just want to use them on your computer, all you will need is a program called xfstt, the X font server for TrueType. This program should be available at ftp://metalab.unc.edu/pub/Linux/X11/fonts/.
Installation is fairly straightforward. Extract the archive, and
make the file, and then
make install. You may get a
few errors that don't make sense after the second command; ignore them.
What you need to do next is create a writable directory called
/usr/ttfonts and put some of your
.ttf fonts there,
just to make sure it's going to work. Then synchronize the font server
with the command
If you got no errors there, run the font server in the background with
xfstt & and tell your X11 server about the font
service with the command
xset fp+ unix/:7100. If you got no
errors, you should be able to run Netscape, the GIMP, even xfontsel,
and have those fonts available to you. Your biggest problem may be
finding the font you want, but that's not really a bad thing.
It has been brought to my attention that more recent versions of
xset require a slightly modified version of this command, because of
changes in the code of xset. If you are running a distribution based
on Red Hat 6.0 or later, or something equivalent, you will first want
xset fp+ unix/:7101.
If everything seems to be working fine, at this point you will want to
configure your system so that the fonts will be working when you start
X. If you are just starting X from the command line, this is easy.
All you have to do is add the two commands from the previous paragraph
.xinitrc file, in that order. When you next start X,
it should work just fine. If you are starting X via xdm, you
will need to add
/usr/X11R6/bin/xfstt & to
/usr/X11R6/lib/X11/xdm/Xsetup_0. Got that? Then add
fp+ unix/:7100 as well.
Bear in mind that the installation of a TrueType font server can be
tricky business. Remember that the order that you issue the above
commands is important. The font server must be started before X is
started, otherwise you will run into problems. Be sure to read
the FAQ file that came with the distribution, and the
man page too. Many newer Linux versions come with this already working,
so see if that's not already the case before worrying too much about
Let's go back to our terminal window and try some more things. Try opening an xterm with a command line like the following:
xterm -fg darkslateblue -bg red3 &
While that window may not be pretty, and you may not do much of your best work in it, it demonstrates one interesting theme of X, the names of the colors. While not very precise, this is a nice way to remember the colors more easily than remembering a series of hexadecimal numbers. Note that color names are never case-sensitive.
If you're interested in the gory details, or want to see the samples, or even want to replace those silly color names with your own for some strange reason, you can find the file listing all the colors with their hexadecimal representation in /usr/X11R6/lib/X11/rgb.txt on your system. There are also some extremely useful utilities with names like xcolorsel and such. They can be found in the usual locations, on http://metalab.unc.edu/pub/Linux/ and elsewhere.
A more precise way of specifying colors is through the numerical definition. This consists of a color space name and a set of values in the following syntax:
An RGB Device, which you will most likely be using, is specified with the prefix "rgb:" and has the following syntax:
rgb:<red>/<green>/<blue> , where <color> is a 1 to 4 digit hexadecimal number.
As an example, you might represent the color red with
rgb:ffff/0/0. For backward compatibility, you can also
specify red with a syntax such as
#ffff00000000, and you will likely be seeing that
(older) syntax a lot.