5 fonts.conf -- Font configuration files
12 $XDG_CONFIG_HOME/fontconfig/conf.d
13 $XDG_CONFIG_HOME/fontconfig/fonts.conf
19 Fontconfig is a library designed to provide system-wide font
20 configuration, customization and application access.
24 Fontconfig contains two essential modules, the configuration module which
25 builds an internal configuration from XML files and the matching module
26 which accepts font patterns and returns the nearest matching font.
30 The configuration module consists of the FcConfig datatype, libexpat and
31 FcConfigParse which walks over an XML tree and amends a configuration with
32 data found within. From an external perspective, configuration of the
33 library consists of generating a valid XML tree and feeding that to
34 FcConfigParse. The only other mechanism provided to applications for
35 changing the running configuration is to add fonts and directories to the
36 list of application-provided font files.
38 The intent is to make font configurations relatively static, and shared by
39 as many applications as possible. It is hoped that this will lead to more
40 stable font selection when passing names from one application to another.
41 XML was chosen as a configuration file format because it provides a format
42 which is easy for external agents to edit while retaining the correct
45 Font configuration is separate from font matching; applications needing to
46 do their own matching can access the available fonts from the library and
47 perform private matching. The intent is to permit applications to pick and
48 choose appropriate functionality from the library instead of forcing them
49 to choose between this library and a private configuration mechanism. The
50 hope is that this will ensure that configuration of fonts for all
51 applications can be centralized in one place. Centralizing font
52 configuration will simplify and regularize font installation and
57 While font patterns may contain essentially any properties, there are some
58 well known properties with associated types. Fontconfig uses some of these
59 properties for font matching and font completion. Others are provided as a
60 convenience for the applications' rendering mechanism.
62 Property Type Description
63 --------------------------------------------------------------
64 family String Font family names
65 familylang String Languages corresponding to each family
66 style String Font style. Overrides weight and slant
67 stylelang String Languages corresponding to each style
68 fullname String Font full names (often includes style)
69 fullnamelang String Languages corresponding to each fullname
70 slant Int Italic, oblique or roman
71 weight Int Light, medium, demibold, bold or black
72 size Double Point size
73 width Int Condensed, normal or expanded
74 aspect Double Stretches glyphs horizontally before hinting
75 pixelsize Double Pixel size
76 spacing Int Proportional, dual-width, monospace or charcell
77 foundry String Font foundry name
78 antialias Bool Whether glyphs can be antialiased
79 hinting Bool Whether the rasterizer should use hinting
80 hintstyle Int Automatic hinting style
81 verticallayout Bool Use vertical layout
82 autohint Bool Use autohinter instead of normal hinter
83 globaladvance Bool Use font global advance data (deprecated)
84 file String The filename holding the font
85 index Int The index of the font within the file
86 ftface FT_Face Use the specified FreeType face object
87 rasterizer String Which rasterizer is in use
88 outline Bool Whether the glyphs are outlines
89 scalable Bool Whether glyphs can be scaled
90 scale Double Scale factor for point->pixel conversions
91 dpi Double Target dots per inch
92 rgba Int unknown, rgb, bgr, vrgb, vbgr,
93 none - subpixel geometry
94 lcdfilter Int Type of LCD filter
95 minspace Bool Eliminate leading from line spacing
96 charset CharSet Unicode chars encoded by the font
97 lang String List of RFC-3066-style languages this
99 fontversion Int Version number of the font
100 capability String List of layout capabilities in the font
101 embolden Bool Rasterizer should synthetically embolden the font
106 Fontconfig performs matching by measuring the distance from a provided
107 pattern to all of the available fonts in the system. The closest matching
108 font is selected. This ensures that a font will always be returned, but
109 doesn't ensure that it is anything like the requested pattern.
111 Font matching starts with an application constructed pattern. The desired
112 attributes of the resulting font are collected together in a pattern. Each
113 property of the pattern can contain one or more values; these are listed
114 in priority order; matches earlier in the list are considered "closer"
115 than matches later in the list.
117 The initial pattern is modified by applying the list of editing
118 instructions specific to patterns found in the configuration; each
119 consists of a match predicate and a set of editing operations. They are
120 executed in the order they appeared in the configuration. Each match
121 causes the associated sequence of editing operations to be applied.
123 After the pattern has been edited, a sequence of default substitutions are
124 performed to canonicalize the set of available properties; this avoids the
125 need for the lower layers to constantly provide default values for various
126 font properties during rendering.
128 The canonical font pattern is finally matched against all available fonts.
129 The distance from the pattern to the font is measured for each of several
130 properties: foundry, charset, family, lang, spacing, pixelsize, style,
131 slant, weight, antialias, rasterizer and outline. This list is in priority
132 order -- results of comparing earlier elements of this list weigh more
133 heavily than later elements.
135 There is one special case to this rule; family names are split into two
136 bindings; strong and weak. Strong family names are given greater
137 precedence in the match than lang elements while weak family names are
138 given lower precedence than lang elements. This permits the document
139 language to drive font selection when any document specified font is
142 The pattern representing that font is augmented to include any properties
143 found in the pattern but not found in the font itself; this permits the
144 application to pass rendering instructions or any other data through the
145 matching system. Finally, the list of editing instructions specific to
146 fonts found in the configuration are applied to the pattern. This modified
147 pattern is returned to the application.
149 The return value contains sufficient information to locate and rasterize
150 the font, including the file name, pixel size and other rendering data. As
151 none of the information involved pertains to the FreeType library,
152 applications are free to use any rasterization engine or even to take the
153 identified font file and access it directly.
155 The match/edit sequences in the configuration are performed in two passes
156 because there are essentially two different operations necessary -- the
157 first is to modify how fonts are selected; aliasing families and adding
158 suitable defaults. The second is to modify how the selected fonts are
159 rasterized. Those must apply to the selected font, not the original
160 pattern as false matches will often occur.
164 Fontconfig provides a textual representation for patterns that the library
165 can both accept and generate. The representation is in three parts, first
166 a list of family names, second a list of point sizes and finally a list of
167 additional properties:
169 <families>-<point sizes>:<name1>=<values1>:<name2>=<values2>...
172 Values in a list are separated with commas. The name needn't include
173 either families or point sizes; they can be elided. In addition, there are
174 symbolic constants that simultaneously indicate both a name and a value.
175 Here are some examples:
178 ----------------------------------------------------------
179 Times-12 12 point Times Roman
180 Times-12:bold 12 point Times Bold
181 Courier:italic Courier Italic in the default size
182 Monospace:matrix=1 .1 0 1 The users preferred monospace font
183 with artificial obliquing
186 The '\', '-', ':' and ',' characters in family names must be preceded by a
187 '\' character to avoid having them misinterpreted. Similarly, values
188 containing '\', '=', '_', ':' and ',' must also have them preceded by a
189 '\' character. The '\' characters are stripped out of the family name and
190 values as the font name is read.
192 Debugging Applications
194 To help diagnose font and applications problems, fontconfig is built with
195 a large amount of internal debugging left enabled. It is controlled by
196 means of the FC_DEBUG environment variable. The value of this variable is
197 interpreted as a number, and each bit within that value controls different
201 ---------------------------------------------------------
202 MATCH 1 Brief information about font matching
203 MATCHV 2 Extensive font matching information
204 EDIT 4 Monitor match/test/edit execution
205 FONTSET 8 Track loading of font information at startup
206 CACHE 16 Watch cache files being written
207 CACHEV 32 Extensive cache file writing information
208 PARSE 64 (no longer in use)
209 SCAN 128 Watch font files being scanned to build caches
210 SCANV 256 Verbose font file scanning information
211 MEMORY 512 Monitor fontconfig memory usage
212 CONFIG 1024 Monitor which config files are loaded
213 LANGSET 2048 Dump char sets used to construct lang values
214 OBJTYPES 4096 Display message when value typechecks fail
217 Add the value of the desired debug levels together and assign that (in
218 base 10) to the FC_DEBUG environment variable before running the
219 application. Output from these statements is sent to stdout.
223 Each font in the database contains a list of languages it supports. This
224 is computed by comparing the Unicode coverage of the font with the
225 orthography of each language. Languages are tagged using an RFC-3066
226 compatible naming and occur in two parts -- the ISO 639 language tag
227 followed a hyphen and then by the ISO 3166 country code. The hyphen and
228 country code may be elided.
230 Fontconfig has orthographies for several languages built into the library.
231 No provision has been made for adding new ones aside from rebuilding the
232 library. It currently supports 122 of the 139 languages named in ISO
233 639-1, 141 of the languages with two-letter codes from ISO 639-2 and
234 another 30 languages with only three-letter codes. Languages with both two
235 and three letter codes are provided with only the two letter code.
237 For languages used in multiple territories with radically different
238 character sets, fontconfig includes per-territory orthographies. This
239 includes Azerbaijani, Kurdish, Pashto, Tigrinya and Chinese.
241 Configuration File Format
243 Configuration files for fontconfig are stored in XML format; this format
244 makes external configuration tools easier to write and ensures that they
245 will generate syntactically correct configuration files. As XML files are
246 plain text, they can also be manipulated by the expert user using a text
249 The fontconfig document type definition resides in the external entity
250 "fonts.dtd"; this is normally stored in the default font configuration
251 directory (/etc/fonts). Each configuration file should contain the
254 <?xml version="1.0"?>
255 <!DOCTYPE fontconfig SYSTEM "fonts.dtd">
263 This is the top level element for a font configuration and can contain
264 <dir>, <cachedir>, <include>, <match> and <alias> elements in any order.
266 <dir prefix="default">
268 This element contains a directory name which will be scanned for font
269 files to include in the set of available fonts. If 'prefix' is set to
270 "xdg", the value in the XDG_DATA_HOME environment variable will be added
271 as the path prefix. please see XDG Base Directory Specification for more
274 <cachedir prefix="default">
276 This element contains a directory name that is supposed to be stored or
277 read the cache of font information. If multiple elements are specified in
278 the configuration file, the directory that can be accessed first in the
279 list will be used to store the cache files. If it starts with '~', it
280 refers to a directory in the users home directory. If 'prefix' is set to
281 "xdg", the value in the XDG_CACHE_HOME environment variable will be added
282 as the path prefix. please see XDG Base Directory Specification for more
283 details. The default directory is ``$XDG_CACHE_HOME/fontconfig'' and it
284 contains the cache files named ``<hash
285 value>-<architecture>.cache-<version'', where <version> is the font
286 configureation file version number (currently 3).
288 <include ignore_missing="no" prefix="default">
290 This element contains the name of an additional configuration file or
291 directory. If a directory, every file within that directory starting with
292 an ASCII digit (U+0030 - U+0039) and ending with the string ``.conf'' will
293 be processed in sorted order. When the XML datatype is traversed by
294 FcConfigParse, the contents of the file(s) will also be incorporated into
295 the configuration by passing the filename(s) to FcConfigLoadAndParse. If
296 'ignore_missing' is set to "yes" instead of the default "no", a missing
297 file or directory will elicit no warning message from the library. If
298 'prefix' is set to "xdg", the value in the XDG_CONFIG_HOME environment
299 variable will be added as the path prefix. please see XDG Base Directory
300 Specification for more details.
304 This element provides a place to consolidate additional configuration
305 information. <config> can contain <blank> and <rescan> elements in any
310 Fonts often include "broken" glyphs which appear in the encoding but are
311 drawn as blanks on the screen. Within the <blank> element, place each
312 Unicode characters which is supposed to be blank in an <int> element.
313 Characters outside of this set which are drawn as blank will be elided
314 from the set of characters supported by the font.
318 The <rescan> element holds an <int> element which indicates the default
319 interval between automatic checks for font configuration changes.
320 Fontconfig will validate all of the configuration files and directories
321 and automatically rebuild the internal datastructures when this interval
326 This element is used to black/white list fonts from being listed or
327 matched against. It holds acceptfont and rejectfont elements.
331 Fonts matched by an acceptfont element are "whitelisted"; such fonts are
332 explicitly included in the set of fonts used to resolve list and match
333 requests; including them in this list protects them from being
334 "blacklisted" by a rejectfont element. Acceptfont elements include glob
335 and pattern elements which are used to match fonts.
339 Fonts matched by an rejectfont element are "blacklisted"; such fonts are
340 excluded from the set of fonts used to resolve list and match requests as
341 if they didn't exist in the system. Rejectfont elements include glob and
342 pattern elements which are used to match fonts.
346 Glob elements hold shell-style filename matching patterns (including ? and
347 *) which match fonts based on their complete pathnames. This can be used
348 to exclude a set of directories (/usr/share/fonts/uglyfont*), or
349 particular font file types (*.pcf.gz), but the latter mechanism relies
350 rather heavily on filenaming conventions which can't be relied upon. Note
351 that globs only apply to directories, not to individual fonts.
355 Pattern elements perform list-style matching on incoming fonts; that is,
356 they hold a list of elements and associated values. If all of those
357 elements have a matching value, then the pattern matches the font. This
358 can be used to select fonts based on attributes of the font (scalable,
359 bold, etc), which is a more reliable mechanism than using file extensions.
360 Pattern elements include patelt elements.
362 <patelt name="property">
364 Patelt elements hold a single pattern element and list of values. They
365 must have a 'name' attribute which indicates the pattern element name.
366 Patelt elements include int, double, string, matrix, bool, charset and
369 <match target="pattern">
371 This element holds first a (possibly empty) list of <test> elements and
372 then a (possibly empty) list of <edit> elements. Patterns which match all
373 of the tests are subjected to all the edits. If 'target' is set to "font"
374 instead of the default "pattern", then this element applies to the font
375 name resulting from a match rather than a font pattern to be matched. If
376 'target' is set to "scan", then this element applies when the font is
377 scanned to build the fontconfig database.
379 <test qual="any" name="property" target="default" compare="eq">
381 This element contains a single value which is compared with the target
382 ('pattern', 'font', 'scan' or 'default') property "property" (substitute
383 any of the property names seen above). 'compare' can be one of "eq",
384 "not_eq", "less", "less_eq", "more", "more_eq", "contains" or
385 "not_contains". 'qual' may either be the default, "any", in which case the
386 match succeeds if any value associated with the property matches the test
387 value, or "all", in which case all of the values associated with the
388 property must match the test value. 'ignore-blanks' takes a boolean value.
389 if 'ignore-blanks' is set "true", any blanks in the string will be ignored
390 on its comparison. this takes effects only when compare="eq" or
391 compare="not_eq". When used in a <match target="font"> element, the
392 target= attribute in the <test> element selects between matching the
393 original pattern or the font. "default" selects whichever target the outer
394 <match> element has selected.
396 <edit name="property" mode="assign" binding="weak">
398 This element contains a list of expression elements (any of the value or
399 operator elements). The expression elements are evaluated at run-time and
400 modify the property "property". The modification depends on whether
401 "property" was matched by one of the associated <test> elements, if so,
402 the modification may affect the first matched value. Any values inserted
403 into the property are given the indicated binding ("strong", "weak" or
404 "same") with "same" binding using the value from the matched pattern
405 element. 'mode' is one of:
407 Mode With Match Without Match
408 ---------------------------------------------------------------------
409 "assign" Replace matching value Replace all values
410 "assign_replace" Replace all values Replace all values
411 "prepend" Insert before matching Insert at head of list
412 "prepend_first" Insert at head of list Insert at head of list
413 "append" Append after matching Append at end of list
414 "append_last" Append at end of list Append at end of list
417 <int>, <double>, <string>, <bool>
419 These elements hold a single value of the indicated type. <bool> elements
420 hold either true or false. An important limitation exists in the parsing
421 of floating point numbers -- fontconfig requires that the mantissa start
422 with a digit, not a decimal point, so insert a leading zero for purely
423 fractional values (e.g. use 0.5 instead of .5 and -0.5 instead of -.5).
427 This element holds four numerical expressions of an affine transformation.
428 At their simplest these will be four <double> elements but they can also
429 be more involved expressions.
433 This element holds the two <int> elements of a range representation.
437 This element holds at least one <int> element of an Unicode code point or
442 This element holds at least one <string> element of a RFC-3066-style
447 Holds a property name. Evaluates to the first value from the property of
448 the pattern. If the 'target' attribute is not present, it will default to
449 'default', in which case the property is returned from the font pattern
450 during a target="font" match, and to the pattern during a target="pattern"
451 match. The attribute can also take the values 'font' or 'pattern' to
452 explicitly choose which pattern to use. It is an error to use a target of
453 'font' in a match that has target="pattern".
457 Holds the name of a constant; these are always integers and serve as
458 symbolic names for common font values:
460 Constant Property Value
461 -------------------------------------
479 ultracondensed width 50
480 extracondensed width 63
482 semicondensed width 87
484 semiexpanded width 113
486 extraexpanded width 150
487 ultraexpanded width 200
488 proportional spacing 0
499 lcddefault lcdfilter 1
501 lcdlegacy lcdfilter 3
503 hintslight hintstyle 1
504 hintmedium hintstyle 2
508 <or>, <and>, <plus>, <minus>, <times>, <divide>
510 These elements perform the specified operation on a list of expression
511 elements. <or> and <and> are boolean, not bitwise.
513 <eq>, <not_eq>, <less>, <less_eq>, <more>, <more_eq>, <contains>,
516 These elements compare two values, producing a boolean result.
520 Inverts the boolean sense of its one expression element
524 This element takes three expression elements; if the value of the first is
525 true, it produces the value of the second, otherwise it produces the value
530 Alias elements provide a shorthand notation for the set of common match
531 operations needed to substitute one font family for another. They contain
532 a <family> element followed by optional <prefer>, <accept> and <default>
533 elements. Fonts matching the <family> element are edited to prepend the
534 list of <prefer>ed families before the matching <family>, append the
535 <accept>able families after the matching <family> and append the <default>
536 families to the end of the family list.
540 Holds a single font family name
542 <prefer>, <accept>, <default>
544 These hold a list of <family> elements to be used by the <alias> element.
546 EXAMPLE CONFIGURATION FILE
548 System configuration file
550 This is an example of a system-wide configuration file
552 <?xml version="1.0"?>
553 <!DOCTYPE fontconfig SYSTEM "fonts.dtd">
554 <!-- /etc/fonts/fonts.conf file to configure system font access -->
557 Find fonts in these directories
559 <dir>/usr/share/fonts</dir>
560 <dir>/usr/X11R6/lib/X11/fonts</dir>
563 Accept deprecated 'mono' alias, replacing it with 'monospace'
565 <match target="pattern">
566 <test qual="any" name="family"><string>mono</string></test>
567 <edit name="family" mode="assign"><string>monospace</string></edit>
571 Names not including any well known alias are given 'sans-serif'
573 <match target="pattern">
574 <test qual="all" name="family" mode="not_eq"><string>sans-serif</string></test>
575 <test qual="all" name="family" mode="not_eq"><string>serif</string></test>
576 <test qual="all" name="family" mode="not_eq"><string>monospace</string></test>
577 <edit name="family" mode="append_last"><string>sans-serif</string></edit>
581 Load per-user customization file, but don't complain
584 <include ignore_missing="yes" prefix="xdg">fontconfig/fonts.conf</include>
587 Load local customization files, but don't complain
590 <include ignore_missing="yes">conf.d</include>
591 <include ignore_missing="yes">local.conf</include>
594 Alias well known font names to available TrueType fonts.
595 These substitute TrueType faces for similar Type1
596 faces to improve screen appearance.
599 <family>Times</family>
600 <prefer><family>Times New Roman</family></prefer>
601 <default><family>serif</family></default>
604 <family>Helvetica</family>
605 <prefer><family>Arial</family></prefer>
606 <default><family>sans</family></default>
609 <family>Courier</family>
610 <prefer><family>Courier New</family></prefer>
611 <default><family>monospace</family></default>
615 Provide required aliases for standard names
616 Do these after the users configuration file so that
617 any aliases there are used preferentially
620 <family>serif</family>
621 <prefer><family>Times New Roman</family></prefer>
624 <family>sans</family>
625 <prefer><family>Arial</family></prefer>
628 <family>monospace</family>
629 <prefer><family>Andale Mono</family></prefer>
633 The example of the requirements of OR operator;
634 If the 'family' contains 'Courier New' OR 'Courier'
635 add 'monospace' as the alternative
637 <match target="pattern">
638 <test name="family" mode="eq">
639 <string>Courier New</string>
641 <edit name="family" mode="prepend">
642 <string>monospace</string>
645 <match target="pattern">
646 <test name="family" mode="eq">
647 <string>Courier</string>
649 <edit name="family" mode="prepend">
650 <string>monospace</string>
657 User configuration file
659 This is an example of a per-user configuration file that lives in
660 $XDG_CONFIG_HOME/fontconfig/fonts.conf
662 <?xml version="1.0"?>
663 <!DOCTYPE fontconfig SYSTEM "fonts.dtd">
664 <!-- $XDG_CONFIG_HOME/fontconfig/fonts.conf for per-user font configuration -->
668 Private font directory
670 <dir prefix="xdg">fonts</dir>
673 use rgb sub-pixel ordering to improve glyph appearance on
674 LCD screens. Changes affecting rendering, but not matching
675 should always use target="font".
677 <match target="font">
678 <edit name="rgba" mode="assign"><const>rgb</const></edit>
681 use WenQuanYi Zen Hei font when serif is requested for Chinese
685 If you don't want to use WenQuanYi Zen Hei font for zh-tw etc,
686 you can use zh-cn instead of zh.
687 Please note, even if you set zh-cn, it still matches zh.
688 if you don't like it, you can use compare="eq"
689 instead of compare="contains".
691 <test name="lang" compare="contains">
695 <string>serif</string>
697 <edit name="family" mode="prepend">
698 <string>WenQuanYi Zen Hei</string>
702 use VL Gothic font when sans-serif is requested for Japanese
705 <test name="lang" compare="contains">
709 <string>sans-serif</string>
711 <edit name="family" mode="prepend">
712 <string>VL Gothic</string>
720 fonts.conf contains configuration information for the fontconfig library
721 consisting of directories to look at for font information as well as
722 instructions on editing program specified font patterns before attempting
723 to match the available fonts. It is in XML format.
725 conf.d is the conventional name for a directory of additional
726 configuration files managed by external applications or the local
727 administrator. The filenames starting with decimal digits are sorted in
728 lexicographic order and used as additional configuration files. All of
729 these files are in XML format. The master fonts.conf file references this
730 directory in an <include> directive.
732 fonts.dtd is a DTD that describes the format of the configuration files.
734 $XDG_CONFIG_HOME/fontconfig/conf.d and ~/.fonts.conf.d is the conventional
735 name for a per-user directory of (typically auto-generated) configuration
736 files, although the actual location is specified in the global fonts.conf
737 file. please note that ~/.fonts.conf.d is deprecated now. it will not be
738 read by default in the future version.
740 $XDG_CONFIG_HOME/fontconfig/fonts.conf and ~/.fonts.conf is the
741 conventional location for per-user font configuration, although the actual
742 location is specified in the global fonts.conf file. please note that
743 ~/.fonts.conf is deprecated now. it will not be read by default in the
746 $XDG_CACHE_HOME/fontconfig/*.cache-* and ~/.fontconfig/*.cache-* is the
747 conventional repository of font information that isn't found in the
748 per-directory caches. This file is automatically maintained by fontconfig.
749 please note that ~/.fontconfig/*.cache-* is deprecated now. it will not be
750 read by default in the future version.
752 Environment variables
754 FONTCONFIG_FILE is used to override the default configuration file.
756 FONTCONFIG_PATH is used to override the default configuration directory.
758 FC_DEBUG is used to output the detailed debugging messages. see
759 [1]Debugging Applications section for more details.
761 FONTCONFIG_USE_MMAP is used to control the use of mmap(2) for the cache
762 files if available. this take a boolean value. fontconfig will checks if
763 the cache files are stored on the filesystem that is safe to use mmap(2).
764 explicitly setting this environment variable will causes skipping this
765 check and enforce to use or not use mmap(2) anyway.
769 fc-cat(1), fc-cache(1), fc-list(1), fc-match(1), fc-query(1)
773 Fontconfig version 2.10.91
778 1. file:///tmp/html-sp859j#DEBUG