Fonts

Revision 31 as of 2012-06-25 06:07:07

Clear message
  • This page describes fonts in general. For the 2010 brand/logo typeface, see Ubuntu Font Family.

Fonts

Installing downloaded fonts in Ubuntu 10.04 LTS

Open the folder where you have downloaded the font file.

Double click on the font file to open it. This opens a font viewer window.

On the right there is a button, "Install Font". Click on it.

Wait until the button turns to greyed out "Installed".

Installing new fonts

This section describes two ways for how to install new fonts in Ubuntu.

The first uses the Synaptic Package Manager to install fonts from the Ubuntu repositories. As new fonts get added to the archive, this method offers fonts suitable for an increasing number of users, and is very easy.

The second method is useful if you have downloaded fonts from the web, bought them, or acquired them from other sources. It is a bit more manual, but allows you to use fonts (including restricted fonts when you can't find a free/libre/open font equivalent) from a wide range of sources.

Finally, at the end of this page, there are some links for further information on fonts on GNU/Linux.

Via Synaptic

Packages available through Synaptic are mostly programs, tools and libraries, but there are a few font packages in the system.

You will need to enable the Universe and Multiverse repositories to get all the fonts available. See AddingRepositoriesHowto for instructions, and SynapticHowto if you need more information on Synaptic.

Once the repositories are set up, search for "font" in Synaptic. You should get a list of over a hundred packages. (If you get far less, then you may need to press Reload, to make sure your repository data is up to date.) Not all of these packages are fonts, some are font utilities for editing or managing fonts. Clicking on a package will show a description.

The msttcorefonts package contains the Microsoft freeware (non-Free because they are non-modifiable) web fonts. (Note: Most Microsoft fonts are included in this package; however, it does not include Tahoma or Arial Narrow. For more information on installing msttcorefonts please refer to RestrictedFormats

As of Jaunty (9.04), this package is named ttf-mscorefonts-installer.

Info <!> Note: After you install a new font, you will need to make sure that programs in which you want to use the new fonts can recognize them. In most cases this is done by closing and reopening the programs; however, some programs may require you to log out and log back in.

Manually

There are various locations in GNU/Linux in which fonts can be kept. These locations are defined in /etc/fonts/fonts.conf; standard ones include /usr/share/fonts, /usr/local/share/fonts, and /home/<username>/.fonts (where <username> is your user name).

The easiest way to install a truetype font is to press alt-F2 and enter the following code (this will open nautilus in the right directory):

gksu nautilus /usr/share/fonts/truetype

Then create a new directory, name the directory whatever you like (choose a name that you remember if you ever need to backup your fonts personal fonts). Copy the fonts into that directory and finally rebuild the font information files by pressing alt-F2, mark 'run in terminal' so you can see the progress and entering the following code:

sudo fc-cache -f -v

Info <!> Note: After you install a new font, you will need to make sure that programs in which you want to use the new fonts can recognize them. In most cases this is done by closing and reopening the programs; however, some programs may require you to log out and log back in.

The easiest place for people to put their fonts is /home/<username>/.fonts. If you have not already done so, create this folder:

  • Open your home folder in Nautilus (GNOME) or Konqueror (KDE).
  • Since dot-folders are really hidden folders, you need to choose "Show Hidden Files" from the View menu.
  • Go to File -> Create Folder (GNOME), or right-click and choose Create New -> Folder (KDE).

  • Name the new folder ".fonts".

Now double click on the folder to open it, and drag and drop your fonts into the folder.

On GNOME, you can also directly open the virtual folder fonts:/ (within a Nautilus window, choose Go -> Location or press Ctrl+L) and drag and drop fonts into this folder. (Does not work in in Hardy Heron 8.04 due to changes. Please follow the method above.)

However, fonts that are added by either of the ways above will only be available for one user. To make them available system-wide, drag and drop them to the directory /usr/share/fonts. (Note: If you're on Kubuntu you may have to cd to /usr/share/fonts and run mkfontscale, mkfontdir, fc-cache after this. See the instructions below.)

As in the last method, on GNOME you can also add fonts directly to fonts:/. However, you must open the virtual folder as root. You can do this by opening a terminal window and running

gksudo nautilus fonts:

Enabling Bitmapped Fonts

If you'd like to use a fixed font in your terminal, use these commands:

cd /etc/fonts/conf.d/
sudo rm /etc/fonts/conf.d/10* && sudo rm -rf 70-no-bitmaps.conf && sudo ln -s ../conf.avail/70-yes-bitmaps.conf .
sudo dpkg-reconfigure fontconfig

Logout, and log back in again, and you'll be able to select some new fixed fonts in your gnome-terminal or XFCE terminal's or profile. This was tested on Ubuntu 11.04 (Natty Narwhal)

Font suggestions include terminus as suitable for terminals; to install this font in command line, run apt-get install xfonts-terminus or use Synaptic (see above). Alternatively, you can use Inconsolata, a monospaced font from Raph Levien. It is a very good font for the terminal. Or "fixed" which was the original xterm font who's 10pt semicondensed is compact and easy to read (a matter of taste of course).

Enabling a particular bitmap font

Beware though, that enabling bitmapped fonts may make e.g. Firefox use them too, and that may make some pages look horrible. E.g. an example page using "Lucida" font has jagged edges if all bitmapped fonts are enabled wholesale. Instead, I enabled exactly the fixed font I needed by (undoing the "70-yes-bitmaps.conf" steps above and) creating /etc/fonts/conf.d/50-enable-fixed.conf instead containing:

<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<fontconfig>
  <selectfont>
    <acceptfont>
      <pattern>
        <patelt name="family"><string>fixed</string></patelt>
      </pattern>
    </acceptfont>
  </selectfont>
</fontconfig>

Then run

sudo dpkg-reconfigure fontconfig

Logout, and log back in again, and you'll be able to use the "fixed" font in terminals, at least in Gnome and XFCE. This was tested on Ubuntu 11.04 (Natty Narwhal).

Ed Trager's "Unicode Font Guide For Free/Libre Open Source Operating Systems" lists free/open fonts: http://unifont.org/fontguide/

SIL provides high-quality fonts released under the Open Font License: http://scripts.sil.org/OFL_fonts

Luc Devroye's website has a huge list of links to free fonts, and other useful information: http://cg.scs.carleton.ca/%7Eluc/fonts.html and http://cg.scs.carleton.ca/%7Eluc/originalfonts.html

The TypOasis has some very good fonts: http://moorstation.org/typoasis/typoasis1.htm Manfred Klein's Fonteria is part of TypOasis, but worth special mention: http://moorstation.org/typoasis/designers/klein/ Paul Lloyd Fonts is as well: http://moorstation.org/typoasis/designers/lloyd/

League of Movable Type has some great free fonts: http://theleagueofmoveabletype.com/

The Linux Font Howto explains different font files, font styles and how they work in Linux: http://tldp.org/HOWTO/Font-HOWTO/

The XFree86 documentation has some instructions on installing bitmapped and scalable fonts: http://www.xfree86.org/current/fonts2.html

For information on installing fonts there is a community topic on fonts.

For specific information about fonts in OpenOffice, see http://wiki.services.openoffice.org/wiki/Font-FAQ

Font settings

Font Smoothing

Arguably the best results for smooth fonts can be obtained quite easily by deactivating any kind of manual font configuration you might have:

mv ~/.fonts.conf ~/fonts.conf.inactive

Then go to System -> Preferences -> Appearance, select the Fonts tab, click the Details button. In the window appearing set the options as follows:

Font smoothing settings

Close the settings, log out and back in and enjoy the sharpest, smoothest fonts ever.

Manual Font Smoothing

The following relates to tweaking the anti-aliasing rules for the 'msttcorefonts' collection. It was contributed by Obi Bok but is now unmaintained.

  • I'm currently working on font settings in XML (.fonts.conf). I noticed that after installing msttcorefonts things don't look quite as good in Firefox anymore. Most web pages request Arial which doesn't get hinted and anti-aliased too nicely, especially on LCD screens. I personally prefer the "sharp" non-anti-aliased look. I also noticed that many users coming from Windows® ask on the forums about getting fonts to look that way.

.fonts.conf

<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<fontconfig>

<!--
     .fonts.conf
     release 6.3.23
     Licensed under GNU GPL
     ================================
     LCD optimized 96 dpi
     "Sharp'N'Clear" font settings
     with emphasis on 'msttcorefonts'

     tested on Ubuntu GNU/Linux 5.10
     ================================
     by Obi Bok
     Gmail: obibok
     http://linuxtuneup.blogspot.com
     ================================
     Why was this conceived?

     - some font families look better hinted by Byte Code Interpreter (BCI)
       while other fonts look better hinted by Auto-Hinter
     - hinting type affects italic and bold fonts differently
     - antialiasing needs to be adjusted according to font families and sizes
     
     Essentially, there is no one single rule that works for all fonts.

     NOTE:
     - Verdana @ 8pt doesn't render '2' and '6' right
     - Arial shows 'Z' distorted in Firefox 1.5
-->

<!--
     Make font sizes match the dpi set in Xorg.

     Increase or decrease this value if fonts are too small or too large
     for your screen resolution.

     FIXME: this only affects QT-based apps?
-->
<match target="pattern">
 <edit name="dpi" mode="assign">
  <double>96</double>
 </edit>
</match>

<!--
     Enable anti-aliasing.

     This only works for outline and scalable fonts.
     Bitmap and PostScript fonts do not get anti-aliased.

     FIXME: is this correct?
-->
<match target="font">
 <edit name="antialias" mode="assign">
  <bool>true</bool>
 </edit>
</match>

<!--
     Set sub-pixel order if not detected.

     "X knows the sub pixel order already, and if this is enabled as well,
     Freetype produces some very strange results. However, if you do still
     have problems, consider (...) 'rgb' (the standard for LCD monitors),
     'bgr' (unusual), 'vrgb' (vertical rgb, if you have a monitor that
     has been rotated by 90 degrees[1]), 'vgbr' (as vrgb, but very rare)."
     <http://www.linuxquestions.org/linux/answers/Hardware/\
     LCD_TFT_Monitor_Configuration_in_X_Org>

     Find out your LCD's sub-pixel order:
     <http://grc.com/image/cleartype2c.gif>
-->
<match target="font">
 <test qual="all" name="rgba" compare="eq">
  <const>unknown</const>
 </test>
 <edit name="rgba" mode="assign">
  <const>rgb</const>
 </edit>
</match>

<!--
     Sub-pixel hinting via BCI enabled by default if compiled in.

     "Whole-pixel anti-aliasing does not represent a useful solution for
     improving small point-size type. (...) By 'borrowing' sub-pixels from
     adjacent whole pixels, we can fine-tune the placement and width of typeface
     features with three times more horizontal accuracy then ever before!"
     <http://grc.com/ctwhat.htm>
-->

<!--
     Disable anti-aliasing for select fonts based on size and style.

     | font                  | WinXP | Linux |
     =========================================
     Andale Mono IPA            14      13
     Arial                      12      13
     Arial Black                12      -
     Arial Narrow               14      13
     Berling Antiqua            12      13
     Book Antiqua               12      13
     Bookdings                  0       ?
     Bookman Old Style          22      13
     Century Gothic             16      16
     Comic Sans MS              11      9/11
     Courier New                26      22
     Franklin Gothic Medium     12      10/12
     Frutiger Linotype          12      10/12
     Garamond                   18      13/19
     Georgia                    12      12/13
     Impact                     16      0
     Kartika                    12      16
     Lucida Console             12      13
     Lucida Sans Typewriter     12      12
     Lucida Sans Unicode        12      10/13
     Marlett                    ?       ?
     Microsoft Sans Serif       12      12/13
     Palatino Linotype          12      13
     SylfaenARM                 -       13
     Symbol                     12      ?
     Tahoma                     12      12/13
     Times New Roman            12      13
     Trebuchet MS               12      12
     Verdana                    12      12
     Vrinda                     12      17
     Webdings                   20      ?
     Wingdings                  20      ?
     =========================================

     "The relationship of pixels to points depends on the number of pixels
     per inch, which is typically some 'standard' value corresponding to
     default screen fonts. For example, MS Windows has two standard sets of
     screen fonts initially designed for IBM display systems: 'small' (VGA)
     and 'large' (8514/A). 'Small' fonts are 96 pixels per inch, 'large' are
     120. Macintosh systems render type at a nominal 72 pixels per inch, i.e.
     one pixel = one point. Some display systems using scalable screen fonts
     allow fine tuning of pixels per inch to suit user preferences."
     <http://www.hpaa.com/css1/pxnpts.asp>

     X pt * 96 dpi / 72 dpi = Y px
-->

<!--
     font group #1: normal roman anti-aliased above 10pt/13.4px
-->
<match target="font">
 <test qual="any" name="family" compare="eq">
  <string>Franklin Gothic Medium</string>
  <string>Frutiger Linotype</string>
  <!-- Lucida Sans Unicode has no italic and uses artificial oblique -->
  <string>Lucida Sans Unicode</string>
 </test>
 <test qual="any" name="pixelsize" compare="less_eq">
  <double>13.4</double>
 </test>
 <test qual="any" name="weight" compare="less_eq">
  <const>medium</const>
 </test>
 <test qual="any" name="slant" compare="eq">
  <const>roman</const>
 </test>
 <edit name="antialias" mode="assign">
  <bool>false</bool>
 </edit>
</match>

<!--
     font group #2: normal roman anti-aliased above 11pt/14.7px

     Must use 15px instead of 14.7px for this to work in QT-based apps
-->
<match target="font">
 <test qual="any" name="family" compare="eq">
  <!-- Comic Sans MS has no italic and uses artificial oblique -->
  <string>Comic Sans MS</string>
 </test>
 <test qual="any" name="pixelsize" compare="less_eq">
  <double>15</double>
 </test>
 <test qual="any" name="weight" compare="less_eq">
  <const>medium</const>
 </test>
 <test qual="any" name="slant" compare="eq">
  <const>roman</const>
 </test>
 <edit name="antialias" mode="assign">
  <bool>false</bool>
 </edit>
</match>

<!--
     font group #3: normal roman anti-aliased above 12pt/16px
     
     Must use at least 16.1px instead of 16px for this to work in Firefox
-->
<match target="font">
 <test qual="any" name="family" compare="eq">
  <string>Georgia</string>
  <string>Lucida Sans</string>
  <string>Lucida Sans Typewriter</string>
  <!-- Microsoft Sans Serif has no italic and uses artificial oblique -->
  <string>Microsoft Sans Serif</string>
  <!-- Tahoma has no italic and uses artificial oblique -->
  <string>Tahoma</string>
  <string>Trebuchet MS</string>
  <string>Verdana</string>
 </test>
 <test qual="any" name="pixelsize" compare="less_eq">
  <double>16.1</double>
 </test>
 <test qual="any" name="weight" compare="less_eq">
  <const>medium</const>
 </test>
 <test qual="any" name="slant" compare="eq">
  <const>roman</const>
 </test>
 <edit name="antialias" mode="assign">
  <bool>false</bool>
 </edit>
</match>

<!--
     font group #4: normal roman anti-aliased above 13pt/17.4px
-->
<match target="font">
 <test qual="any" name="family" compare="eq">
  <string>Arial</string>
  <string>Arial Narrow</string>
  <string>Berling Antiqua</string>
  <string>Book Antiqua</string>
  <string>Bookman Old Style</string>
  <string>Garamond</string>
  <!-- Lucida Console has no italic and uses artificial oblique -->
  <string>Lucida Console</string>
  <string>Palatino Linotype</string>
  <string>SylfaenARM</string>
  <string>Times New Roman</string>
 </test>
 <test qual="any" name="pixelsize" compare="less_eq">
  <double>17.4</double>
 </test>
 <test qual="any" name="weight" compare="less_eq">
  <const>medium</const>
 </test>
 <test qual="any" name="slant" compare="eq">
  <const>roman</const>
 </test>
 <edit name="antialias" mode="assign">
  <bool>false</bool>
 </edit>
</match>

<!--
     font group #5: normal roman anti-aliased above 16pt/21.4px
-->
<match target="font">
 <test qual="any" name="family" compare="eq">
  <string>Century Gothic</string>
  <string>Kartika</string>
 </test>
 <test qual="any" name="pixelsize" compare="less_eq">
  <double>21.4</double>
 </test>
 <test qual="any" name="weight" compare="less_eq">
  <const>medium</const>
 </test>
 <test qual="any" name="slant" compare="eq">
  <const>roman</const>
 </test>
 <edit name="antialias" mode="assign">
  <bool>false</bool>
 </edit>
</match>

<!--
     font group #6: normal roman anti-aliased above 17pt/23px
-->
<match target="font">
 <test qual="any" name="family" compare="eq">
  <string>Vrinda</string>
 </test>
 <test qual="any" name="pixelsize" compare="less_eq">
  <double>23</double>
 </test>
 <test qual="any" name="weight" compare="less_eq">
  <const>medium</const>
 </test>
 <test qual="any" name="slant" compare="eq">
  <const>roman</const>
 </test>
 <edit name="antialias" mode="assign">
  <bool>false</bool>
 </edit>
</match>

<!--
     font group #7: normal roman anti-aliased above 22pt/29.4px
-->
<match target="font">
 <test qual="any" name="family" compare="eq">
  <string>Courier New</string>
 </test>
 <test qual="any" name="pixelsize" compare="less_eq">
  <double>29.4</double>
 </test>
 <test qual="any" name="weight" compare="less_eq">
  <const>medium</const>
 </test>
 <test qual="any" name="slant" compare="eq">
  <const>roman</const>
 </test>
 <edit name="antialias" mode="assign">
  <bool>false</bool>
 </edit>
</match>

<!--
     font group #8: bold roman anti-aliased above 9pt/12px
-->
<match target="font">
 <test qual="any" name="family" compare="eq">
  <string>Georgia</string>
 </test>
 <test qual="any" name="pixelsize" compare="less_eq">
  <double>12</double>
 </test>
 <test qual="any" name="weight" compare="more">
  <const>medium</const>
 </test>
 <test qual="any" name="slant" compare="eq">
  <const>roman</const>
 </test>
 <edit name="antialias" mode="assign">
  <bool>false</bool>
 </edit>
</match>

<!--
     font group #9: bold roman anti-aliased above 10pt/13.4px
-->
<match target="font">
 <test qual="any" name="family" compare="eq">
  <string>Tahoma</string>
  <string>Verdana</string>
 </test>
 <test qual="any" name="pixelsize" compare="less_eq">
  <double>13.4</double>
 </test>
 <test qual="any" name="weight" compare="more">
  <const>medium</const>
 </test>
 <test qual="any" name="slant" compare="eq">
  <const>roman</const>
 </test>
 <edit name="antialias" mode="assign">
  <bool>false</bool>
 </edit>
</match>

<!--
     font group #10: bold roman anti-aliased above 12pt/16px
-->
<match target="font">
 <test qual="any" name="family" compare="eq">
  <string>Courier New</string>
 </test>
 <test qual="any" name="pixelsize" compare="less_eq">
  <double>16</double>
 </test>
 <test qual="any" name="weight" compare="more">
  <const>medium</const>
 </test>
 <test qual="any" name="slant" compare="eq">
  <const>roman</const>
 </test>
 <edit name="antialias" mode="assign">
  <bool>false</bool>
 </edit>
</match>

<!--
     Enable FreeType Auto-Hinter for select fonts.

     Auto-Hinter is disabled by default if Bytecode Interpreter was compiled in.
     Some Linux "native" fonts look better hinted by Auto-Hinter,
     usually in sizes 11pt-13pt; others look better hinted by BCI.
-->

<!--
     Set Auto-Hinter to full hinting style.

     'slight' and 'medium' hinting often produce pixel discoloration.
-->
<match target="font">
 <edit name="hintstyle" mode="assign">
  <const>hintfull</const>
 </edit>
</match>

<!--
     font group #11: hinted via Auto-Hinter
-->
<match target="font">
 <test qual="any" name="family" compare="eq">
  <string>Bitstream Charter</string>
  <string>Courier 10 Pitch</string>
  <string>DejaVu Sans Condensed</string>
  <string>DejaVu Serif Condensed</string>
  <string>FreeMono</string>
  <string>FreeSans</string>
  <string>FreeSerif</string>
  <string>Luxi Mono</string>
  <string>Luxi Sans</string>
  <string>Luxi Serif</string>
  <string>MgOpen Canonica</string>
  <string>MgOpen Cosmetica</string>
  <string>MgOpen Modata</string>
  <string>MgOpen Moderna</string>
  <string>URW Bookman L</string>
  <string>URW Chancery L</string>
  <string>URW Gothic L</string>
  <string>URW Palladio L</string>
 </test>
 <edit name="autohint" mode="assign">
  <bool>true</bool>
 </edit>
</match>

<!--
     font group #12: normal italic hinted via Auto-Hinter at 9-10pt

     Arial hinted via BCI at 9pt has distorted 'y', at 10pt - '2'
-->
<match target="font">
 <test qual="any" name="family" compare="eq">
  <string>Arial</string>
 </test>
 <test qual="any" name="pixelsize" compare="more_eq">
  <double>12</double>
 </test>
 <test qual="any" name="pixelsize" compare="less_eq">
  <double>13.4</double>
 </test>
 <test qual="any" name="weight" compare="less_eq">
  <const>medium</const>
 </test>
 <test qual="any" name="slant" compare="not_eq">
  <const>roman</const>
 </test>
 <edit name="autohint" mode="assign">
  <bool>true</bool>
 </edit>
</match>

<!--
     font group #13: normal italic hinted via Auto-Hinter at 12pt

     This fixes distorted 'K'
-->
<match target="font">
 <test qual="any" name="family" compare="eq">
  <string>Book Antiqua</string>
 </test>
 <test qual="any" name="pixelsize" compare="eq">
  <double>16</double>
 </test>
 <test qual="any" name="weight" compare="less_eq">
  <const>medium</const>
 </test>
 <test qual="any" name="slant" compare="not_eq">
  <const>roman</const>
 </test>
 <edit name="autohint" mode="assign">
  <bool>true</bool>
 </edit>
</match>

<!--
     font group #14: normal italic hinted via Auto-Hinter at all sizes
-->
<match target="font">
 <test qual="any" name="family" compare="eq">
  <!-- 10, 11, 12 -->
  <string>Frutiger Linotype</string>
  <!--  8-9: 'z', '2'; 10-15, 17, 19: 'z' -->
  <string>Times New Roman</string>
  <!-- 9-10: 'N' 'Q'; 12: 'w', 'C', 'D', 'O', 'Q', 'R', '2', '9', '0' -->
  <string>Verdana</string>
 </test>
 <test qual="any" name="weight" compare="less_eq">
  <const>medium</const>
 </test>
 <test qual="any" name="slant" compare="not_eq">
  <const>roman</const>
 </test>
 <edit name="autohint" mode="assign">
  <bool>true</bool>
 </edit>
</match>

<!--
     Set minimum allowed size to avoid illegible fonts.
-->
<!-- 7pt in QT-based apps -->
<match target="pattern">
 <test qual="any" name="size" compare="less">
  <double>7</double>
 </test>
 <edit name="size" mode="assign">
  <double>7</double>
 </edit>
</match>

<!-- 9.4px (7pt) in GTK-based apps -->
<match target="pattern">
 <test qual="any" name="pixelsize" compare="less">
  <double>9.4</double>
 </test>
 <edit name="pixelsize" mode="assign">
  <double>9.4</double>
 </edit>
</match>

<!--
     TODO: Create rules limiting minimum sizes for these *bold* fonts:

     Andale Mono | Andale Mono IPA
     Arial
     Arial Narrow
     Berling Antiqua
     Book Antiqua
     Bookman Old Style
     Century Gothic
     Comic Sans MS
     Courier New
     Franklin Gothic Medium
     Frutiger Linotype
     Garamond
     Georgia
     Kartika
     Lucida Console
     Lucida Sans Typewriter
     Lucida Sans Unicode
     Microsoft Sans Serif
     Palatino | Palatino Linotype
     SylfaenARM
     Tahoma
     Times New Roman
     Trebuchet MS
     Verdana
     Vrinda
-->

<!--
     font group #15: bold fonts no smaller than 10.7px (8pt)

     FIXME: for Firefox and other GTK-based apps?
-->
<match target="font">
 <test qual="any" name="family" compare="eq">
  <string>Arial</string>
 </test>
 <test qual="any" name="pixelsize" compare="less">
  <double>10.7</double>
 </test>
 <test qual="any" name="weight" compare="more">
  <const>medium</const>
 </test>
 <edit name="pixelsize" mode="assign">
  <double>10.7</double>
 </edit>
</match>

<!--
     Anti-alias fonts with "fake" styles.

     FIXME: QT only? GTK? Firefox?
-->
<!-- FIXME: dirty_hack(tm) - fontconfig reports syntax errors -->
<match target="font">
 <test qual="any" name="matrix" compare="not_eq">
  <double>0</double>
 </test>
<!-- another approach - no errors but freezes Firefox 1.5 -->
<!--
<match target="font">
 <test qual="any" name="matrix" compare="eq">
  <name>matrix</name>
 </test>
-->
 <edit name="antialias" mode="assign">
  <bool>true</bool>
 </edit>
</match>

<!--
     Substitute unavailable and/or unwanted fonts.

     Aliases will not work if the actual fonts are installed.
     Replacing font family works in Firefox (FIXME: and other GTK-based apps?)
     QT-based apps also need font foundry replaced.
     Grouping fonts for substitution doesn't work in Firefox, so we need each
     font family replaced individually.
-->

<!--
     sans-serif
     
     "If the font still has no generic name, add sans-serif"
     /etc/fonts.conf

     Therefore, we only substitute what we need.
-->
<match target="pattern">
 <test qual="any" name="family" compare="eq">
  <string>Bitstream Charter</string>
 </test>
 <edit name="family" mode="prepend" binding="same">
  <string>Arial</string>
 </edit>
</match>

<match target="pattern">
 <test qual="any" name="family" compare="eq">
  <string>Bitstream Vera Sans</string>
 </test>
 <edit name="family" mode="prepend" binding="same">
  <string>Arial</string>
 </edit>
</match>

<match target="pattern">
 <test qual="any" name="family" compare="eq">
  <string>DejaVu Sans</string>
 </test>
 <edit name="family" mode="prepend" binding="same">
  <string>Arial</string>
 </edit>
</match>

<match target="pattern">
 <test qual="any" name="family" compare="eq">
  <string>DejaVu Sans Condensed</string>
 </test>
 <edit name="family" mode="prepend" binding="same">
  <string>Arial</string>
 </edit>
</match>

<match target="pattern">
 <test qual="any" name="family" compare="eq">
  <string>FreeSans</string>
 </test>
 <edit name="family" mode="prepend" binding="same">
  <string>Arial</string>
 </edit>
</match>

<match target="pattern">
 <test qual="any" name="family" compare="eq">
  <string>Helvetica</string>
 </test>
 <edit name="family" mode="prepend" binding="same">
  <string>Arial</string>
 </edit>
</match>

<match target="pattern">
 <test qual="any" name="family" compare="eq">
  <string>Lucida</string>
 </test>
 <edit name="family" mode="prepend" binding="same">
  <string>Arial</string>
 </edit>
</match>

<match target="pattern">
 <test qual="any" name="family" compare="eq">
  <!-- FIXME: may need to use "Lucida Bright" instead -->
  <string>LucidaBright</string>
 </test>
 <edit name="family" mode="prepend" binding="same">
  <string>Arial</string>
 </edit>
</match>

<match target="pattern">
 <test qual="any" name="family" compare="eq">
  <string>Lucida Bright</string>
 </test>
 <edit name="family" mode="prepend" binding="same">
  <string>Arial</string>
 </edit>
</match>

<match target="pattern">
 <test qual="any" name="family" compare="eq">
  <string>Luxi Sans</string>
 </test>
 <edit name="family" mode="prepend" binding="same">
  <string>Arial</string>
 </edit>
</match>

<match target="pattern">
 <test qual="any" name="family" compare="eq">
  <string>MgOpen Cosmetica</string>
 </test>
 <edit name="family" mode="prepend" binding="same">
  <string>Arial</string>
 </edit>
</match>

<match target="pattern">
 <test qual="any" name="family" compare="eq">
  <string>MgOpen Modata</string>
 </test>
 <edit name="family" mode="prepend" binding="same">
  <string>Arial</string>
 </edit>
</match>

<match target="pattern">
 <test qual="any" name="family" compare="eq">
  <string>MgOpen Moderna</string>
 </test>
 <edit name="family" mode="prepend" binding="same">
  <string>Arial</string>
 </edit>
</match>

<match target="pattern">
 <test qual="any" name="family" compare="eq">
  <string>System</string>
 </test>
 <edit name="family" mode="prepend" binding="same">
  <string>Arial</string>
 </edit>
</match>

<match target="pattern">
 <test qual="any" name="family" compare="eq">
  <string>URW Gothic L</string>
 </test>
 <edit name="family" mode="prepend" binding="same">
  <string>Arial</string>
 </edit>
</match>

<!--
     FIXME: Verdana renders characters '2' and '6' slightly distorted
            so it will be substituted with Arial.
-->
<match target="pattern">
 <test qual="any" name="family" compare="eq">
  <string>Verdana</string>
 </test>
 <edit name="family" mode="prepend" binding="same">
  <string>Arial</string>
 </edit>
</match>

<!--
     serif
-->
<match target="pattern">
 <test qual="any" name="family" compare="eq">
  <string>Bitstream Vera Serif</string>
 </test>
 <edit name="family" mode="prepend" binding="same">
  <string>Georgia</string>
 </edit>
</match>

<match target="pattern">
 <test qual="any" name="family" compare="eq">
  <string>DejaVu Serif</string>
 </test>
 <edit name="family" mode="prepend" binding="same">
  <string>Georgia</string>
 </edit>
</match>

<match target="pattern">
 <test qual="any" name="family" compare="eq">
  <string>DejaVu Serif Condensed</string>
 </test>
 <edit name="family" mode="prepend" binding="same">
  <string>Georgia</string>
 </edit>
</match>

<match target="pattern">
 <test qual="any" name="family" compare="eq">
  <string>FreeSerif</string>
 </test>
 <edit name="family" mode="prepend" binding="same">
  <string>Georgia</string>
 </edit>
</match>

<match target="pattern">
 <test qual="any" name="family" compare="eq">
  <string>Luxi Serif</string>
 </test>
 <edit name="family" mode="prepend" binding="same">
  <string>Georgia</string>
 </edit>
</match>

<match target="pattern">
 <test qual="any" name="family" compare="eq">
  <string>MgOpen Canonica</string>
 </test>
 <edit name="family" mode="prepend" binding="same">
  <string>Georgia</string>
 </edit>
</match>

<match target="pattern">
 <test qual="any" name="family" compare="eq">
  <string>New Century Schoolbook</string>
 </test>
 <edit name="family" mode="prepend" binding="same">
  <string>Georgia</string>
 </edit>
</match>

<match target="pattern">
 <test qual="any" name="family" compare="eq">
  <string>New York</string>
 </test>
 <edit name="family" mode="prepend" binding="same">
  <string>Georgia</string>
 </edit>
</match>

<match target="pattern">
 <test qual="any" name="family" compare="eq">
  <string>Palatino</string>
 </test>
 <edit name="family" mode="prepend" binding="same">
  <string>Georgia</string>
 </edit>
</match>

<match target="pattern">
 <test qual="any" name="family" compare="eq">
  <string>Times</string>
 </test>
 <edit name="family" mode="prepend" binding="same">
  <string>Georgia</string>
 </edit>
</match>

<match target="pattern">
 <test qual="any" name="family" compare="eq">
  <string>URW Bookman L</string>
 </test>
 <edit name="family" mode="prepend" binding="same">
  <string>Georgia</string>
 </edit>
</match>

<match target="pattern">
 <test qual="any" name="family" compare="eq">
  <string>URW Palladio L</string>
 </test>
 <edit name="family" mode="prepend" binding="same">
  <string>Georgia</string>
 </edit>
</match>

<!--
     monospace
-->
<match target="pattern">
 <test qual="any" name="family" compare="eq">
  <string>Andale Mono</string>
 </test>
 <edit name="family" mode="prepend" binding="same">
  <string>Courier New</string>
 </edit>
</match>

<match target="pattern">
 <test qual="any" name="family" compare="eq">
  <string>Bitstream Vera Sans Mono</string>
 </test>
 <edit name="family" mode="prepend" binding="same">
  <string>Courier New</string>
 </edit>
</match>

<match target="pattern">
 <test qual="any" name="family" compare="eq">
  <string>Courier</string>
 </test>
 <edit name="family" mode="prepend" binding="same">
  <string>Courier New</string>
 </edit>
</match>

<match target="pattern">
 <test qual="any" name="family" compare="eq">
  <string>DejaVu Sans Mono</string>
 </test>
 <edit name="family" mode="prepend" binding="same">
  <string>Courier New</string>
 </edit>
</match>

<match target="pattern">
 <test qual="any" name="family" compare="eq">
  <string>Fixedsys</string>
 </test>
 <edit name="family" mode="prepend" binding="same">
  <string>Courier New</string>
 </edit>
</match>

<match target="pattern">
 <test qual="any" name="family" compare="eq">
  <string>FreeMono</string>
 </test>
 <edit name="family" mode="prepend" binding="same">
  <string>Courier New</string>
 </edit>
</match>

<match target="pattern">
 <test qual="any" name="family" compare="eq">
  <!-- FIXME: Ubuntu Wiki uses "Lucida Typewriter" instead -->
  <string>LucidaTypewriter</string>
 </test>
 <edit name="family" mode="prepend" binding="same">
  <string>Courier New</string>
 </edit>
</match>

<match target="pattern">
 <test qual="any" name="family" compare="eq">
  <string>Lucida Typewriter</string>
 </test>
 <edit name="family" mode="prepend" binding="same">
  <string>Courier New</string>
 </edit>
</match>

<match target="pattern">
 <test qual="any" name="family" compare="eq">
  <string>Luxi Mono</string>
 </test>
 <edit name="family" mode="prepend" binding="same">
  <string>Courier New</string>
 </edit>
</match>

<match target="pattern">
 <test qual="any" name="family" compare="eq">
  <string>Monaco</string>
 </test>
 <edit name="family" mode="prepend" binding="same">
  <string>Courier New</string>
 </edit>
</match>

<match target="pattern">
 <test qual="any" name="family" compare="eq">
  <string>Terminal</string>
 </test>
 <edit name="family" mode="prepend" binding="same">
  <string>Courier New</string>
 </edit>
</match>

<!--
     cursive
-->
<match target="pattern">
 <test qual="any" name="family" compare="eq">
  <string>Apple Chancery</string>
 </test>
 <edit name="family" mode="prepend" binding="same">
  <string>Comic Sans MS</string>
 </edit>
</match>

<match target="pattern">
 <test qual="any" name="family" compare="eq">
  <string>Lucida Handwriting</string>
 </test>
 <edit name="family" mode="prepend" binding="same">
  <string>Comic Sans MS</string>
 </edit>
</match>

<match target="pattern">
 <test qual="any" name="family" compare="eq">
  <string>URW Chancery L</string>
 </test>
 <edit name="family" mode="prepend" binding="same">
  <string>Comic Sans MS</string>
 </edit>
</match>

<match target="pattern">
 <test qual="any" name="family" compare="eq">
  <string>Zapf Chancery</string>
 </test>
 <edit name="family" mode="prepend" binding="same">
  <string>Comic Sans MS</string>
 </edit>
</match>

<!--
     fantasy
-->
<match target="pattern">
 <test qual="any" name="family" compare="eq">
  <string>Copperplate</string>
 </test>
 <edit name="family" mode="prepend" binding="same">
  <string>Impact</string>
 </edit>
</match>

<match target="pattern">
 <test qual="any" name="family" compare="eq">
  <string>Desdemona</string>
 </test>
 <edit name="family" mode="prepend" binding="same">
  <string>Impact</string>
 </edit>
</match>

<match target="pattern">
 <test qual="any" name="family" compare="eq">
  <string>Kino</string>
 </test>
 <edit name="family" mode="prepend" binding="same">
  <string>Impact</string>
 </edit>
</match>

<match target="pattern">
 <test qual="any" name="family" compare="eq">
  <string>Techno</string>
 </test>
 <edit name="family" mode="prepend" binding="same">
  <string>Impact</string>
 </edit>
</match>

<!--
     Provide required aliases for standard names.
-->
<alias>
 <family>sans-serif</family>
  <prefer>
   <family>Arial</family>
  </prefer>
</alias>

<alias>
 <family>serif</family>
  <prefer>
   <family>Georgia</family>
  </prefer>
</alias>

<alias>
 <family>monospace</family>
  <prefer>
   <family>Courier New</family>
  </prefer>
</alias>

<alias>
 <family>cursive</family>
  <prefer>
   <family>Comic Sans MS</family>
  </prefer>
</alias>

<alias>
 <family>fantasy</family>
  <prefer>
   <family>Impact</family>
  </prefer>
</alias>

</fontconfig>

If helvetica font is present then this might be useful :

<match target="font">
 <test qual="any" name="family" compare="eq">
  <string>Helvetica</string>
 </test>
 
 <edit name="antialias" mode="assign">
  <bool>true</bool>
 </edit>
 
 <edit name="autohint" mode="assign">
  <bool>true</bool>
 </edit>

<edit name="hintstyle" mode="assign">
  <const>hintslight</const>
 </edit>

</match>

For the above to work , change the substitution of Helvetica by Arial binding to weak.