From ArchWiki
Revision as of 08:49, 16 January 2013 by Thisoldman (talk | contribs) (Font Names)
Jump to: navigation, search

X Logical Font Description

Two different font systems are used by X11: the older or core X Logical Font Description, XLFD, and the newer X FreeType, Xft, systems. XLFD was originally designed for bitmap fonts and support for scalable fonts (Type1, TrueType and OpenType) was added later. XLFD does not support anti‑aliasing and sub‑pixel rasterization. Xft uses the FreeType and Fontconfig libraries and is more suitable when the smooth appearance of fonts is desired.

Font names

Font names are complex when using XLFD:


The name contains fourteen elements, with each element field preceded by a hyphen, -. Not all elements are required to be present in a font name and a field may be empty. Names can be simplified for the user by the wildcards * and ?. On the command line, surround the font name with quotes to prevent the shell from interpreting the wildcards and to avoid backslashing whitespace.

$ xterm -fn "-*-fixed-medium-r-s*--12-87-*-*-*-*-iso10???-1"
$ xterm -fn "-*-dejavu sans mono-medium-r-normal--*-80-*-*-*-*-iso10646-1"

Names can be simplified even more by using aliases:

$ xterm -fn 12x24

Two nearly indispensible utilities for working with XLFD names are xfontsel, xorg-xfontsel, and xlsfonts, xorg-xlsfonts. Xfontsel uses dropdown menus for selecting parts of a font name and previews the font selected. Xlsfonts can list fonts by name, with selectable degrees of detail, and can show how wildcards and aliases will be interpreted by the XLFD system. If a fontname is not working, check for a match with xlsfonts.

$ xlsfonts -fn "*-fixed-medium-r-n*--13-120-75-*-iso1*-1"
$ xlsfonts -ll -fn fixed

Font name elements

The following table provides a description of the font name fields. The elements are listed in the same order as they appear in a font name. The names used by xfontsel are listed below the longer uppercase names.

The supplier of the font.

Specify this field when two different fonts share the same FAMILY_NAME, for example, courier. Otherwise the wildcard, *, may be substituted.

The typeface name, defined by the foundry. Usually, fonts with the same family name are visually similar.
The degree of blackness of the glyphs, defined by the foundry. Common values are bold and medium.
Common values are r for Roman or upright, and i and o for the slanted italic and oblique typefaces.

Usually this needs to be specified.

Values are set by the designer, examples are normal, narrow or condensed identifying the width.

A value should be set, not wildcarded, when there are two or more possible values.

Often an empty field, but values may be supplied by the foundry.

In xfontsel, an empty field is chosen by selecting (nil) from the dropdown box. It's often safe to wildcard this field with *.

The body size of a font for a particular POINT_SIZE and RESOLUTION_Y. Changes the height of a font independent of the point size for which the font was designed.

A zero, 0 or a * may be used for scalable fonts.

The body heighth for which the font was designed. Values are expressed as tenths of a point (one point is nominally one seventy-secondth of an inch).

It may be better to use this value to select the size for scalable fonts than the PIXEL_SIZE field. Note that the selections are artificially limited in xfontsel; you can still change the value on the command-line or in the resource file.

Bitmap fonts do not scale well and attempts will often result in unmatched font names. It's sometimes better to use bitmap fonts at the sizes provided by the designers.

The horizontal resolution as an integer-string for which the font was designed. The values are expressed as pixels or dpi.

For scalable fonts this may safely be set to zero or *, bitmap fonts usually use 75 or 100.

The vertical dpi for which the font was designed.

Similar to RESOLUTION_X, scalable fonts can have this value set to zero or *. For bitmaps, only one of RESOLUTION_X or RESOLUTION_Y needs to be identified. The other may be wildcarded.

p– For proportional fonts

m – Monospace; all the glyphs have the same logical width.

c – Character cell; each glyph occupies a "frame" and the frames all have equal width. This is typewriter spacing. Some older applications may leave glyph fragments when the display is refreshed if fonts with the m spacing are used. For these applications, try using a font with c spacing.

Arithmetic mean of the widths of all glyphs. Zero is used for proportional fonts.

It is safe to wildcard this value with *.

Always paired with the next field, this names the registration authority for the character encoding used. Examples are iso10646 and koi8.

It's always safe to choose an available registry that is compatible with the user's locale settings.

An identifier for the character set encoding.

The Font Search Path

Please see Fonts for a guide to installing font files and modifying the font path. For a font to be available to the X server, the directory containing the font file must be on the user's font path. You can check your current font path with:

$ xset q

When a font is requested, the X server searches the font directories in the order given in the font path. Each font directory will contain a file named fonts.dir that serves as an index connecting a font's XLFD name to the file containing the font. The search ends with the first matching font is found.

The first line in a fonts.dir file is the number of fonts listed in the file. The following lines then list the fonts in that directory: filename first, followed by a single space, and finally the font name. Below are the first four lines of an example fonts.dir:

UTBI__10-ISO8859-1.pcf.gz -adobe-utopia-bold-i-normal--14-100-100-100-p-78-iso8859-1
UTBI__10-ISO8859-10.pcf.gz -adobe-utopia-bold-i-normal--14-100-100-100-p-78-iso8859-10
UTBI__10-ISO8859-13.pcf.gz -adobe-utopia-bold-i-normal--14-100-100-100-p-78-iso8859-13

mkfontscale and mkfontdir