From ArchWiki
(Redirected from Emoji)
Jump to navigation Jump to search

From Wikipedia:Computer font: "A computer font (or font) is an electronic data file containing a set of glyphs, characters, or symbols such as dingbats."

Note that certain font licenses may impose some legal limitations.

Font formats

Most computer fonts used today are in either bitmap or outline data formats.

Bitmap fonts
Consist of a matrix of dots or pixels representing the image of each glyph in each face and size.
Outline or vector fonts
Use Bézier curves, drawing instructions and mathematical formulae to describe each glyph, which make the character outlines scalable to any size.

Bitmap formats

These formats can also be gzipped. See #Bitmap for the available bitmap fonts.

Outline formats

  • PostScript fonts by Adobe – has various formats, e.g: Printer Font ASCII (PFA) and Printer Font Binary (PFB)
  • TrueType by Apple and Microsoft (file extension: ttf)
  • OpenType by Microsoft, built on TrueType (file extensions: otf, ttf)

For most purposes, the technical differences between TrueType and OpenType can be ignored.

Other formats

The typesetting application TeX and its companion font software, Metafont, traditionally renders characters using its own methods. Some file extensions used for fonts from these two programs are *pk, *gf, mf and vf. Modern versions can also use TrueType and OpenType fonts.

FontForge (fontforge), a font editing application, can store fonts in its native text-based format, sfd, spline font database.

The SVG format also has its own font description method.


There are various methods for installing fonts.


Fonts and font collections in the enabled repositories can be installed using pacman.

Available fonts may be found by querying packages (e.g. for font or ttf).

Creating a package

You should give pacman the ability to manage your fonts, which is done by creating an Arch package. These can also be shared with the community in the AUR. The packages to install fonts are particularly similar; see Font packaging guidelines.

The family name of a font file can be aquired with the use of fc-query for example: fc-query -f '%{family[0]}\n' /path/to/file. The formatting is described in FcPatternFormat(3).

Manual installation

The recommended way of adding fonts that are not in the repositories to your system is described in #Creating a package. This gives pacman the ability to remove or update them at a later time. Fonts can alternately be installed manually as well.

To install fonts system-wide (available for all users), move the folder to the /usr/share/fonts directory. The files need to be readable by every user, use chmod to set the correct permissions (i.e. at least 0444 for files and 0555 for directories). To install fonts for only a single user, use ~/.local/share/fonts/ (~/.fonts/ is now deprecated).

For Xserver to load fonts directly (as opposed to the use of a font server) the directory for your newly added font must be added with a FontPath entry. This entry is located in the Files section of your Xorg configuration file (e.g. /etc/X11/xorg.conf or /etc/xorg.conf). See #Older applications for more detail.

Then update the fontconfig font cache: (usually unnecessary as software using the fontconfig library does this)

$ fc-cache

Older applications

With older applications that do not support fontconfig (e.g. GTK 1.x applications, and xfontsel) the index will need to be created in the font directory:

$ mkfontscale
$ mkfontdir

Or to include more than one folder with one command:

$ for dir in /font/dir1/ /font/dir2/; do xset +fp $dir; done && xset fp rehash

Or if fonts were installed in a different sub-folders under the e.g. /usr/share/fonts:

$ for dir in * ; do if [  -d  "$dir"  ]; then cd "$dir";xset +fp "$PWD" ;mkfontscale; mkfontdir;cd .. ;fi; done && xset fp rehash

At times the X server may fail to load the fonts directory and you will need to rescan all the fonts.dir files:

# xset +fp /usr/share/fonts/misc # Inform the X server of new directories
# xset fp rehash                # Forces a new rescan

To check that the font(s) is included:

$ xlsfonts | grep fontname
Note: Many packages will automatically configure Xorg to use the font upon installation. If that is the case with your font, this step is not necessary.

This can also be set globally in /etc/X11/xorg.conf or /etc/X11/xorg.conf.d.

Here is an example of the section that must be added to /etc/X11/xorg.conf. Add or remove paths based on your particular font requirements.

# Let X.Org know about the custom font directories
Section "Files"
    FontPath    "/usr/share/fonts/100dpi"
    FontPath    "/usr/share/fonts/75dpi"
    FontPath    "/usr/share/fonts/cantarell"
    FontPath    "/usr/share/fonts/cyrillic"
    FontPath    "/usr/share/fonts/encodings"
    FontPath    "/usr/share/fonts/misc"
    FontPath    "/usr/share/fonts/truetype"
    FontPath    "/usr/share/fonts/TTF"
    FontPath    "/usr/share/fonts/util"

Pango Warnings

When Pango is in use on your system it will read from fontconfig to sort out where to source fonts.

(process:5741): Pango-WARNING **: failed to choose a font, expect ugly output. engine-type='PangoRenderFc', script='common'
(process:5741): Pango-WARNING **: failed to choose a font, expect ugly output. engine-type='PangoRenderFc', script='latin'

If you are seeing errors similar to this and/or seeing blocks instead of characters in your application then you need to add fonts and update the font cache. This example uses the ttf-liberation fonts to illustrate the solution (after successful installation of the package) and runs as root to enable them system-wide.

# fc-cache
/usr/share/fonts: caching, new cache contents: 0 fonts, 3 dirs
/usr/share/fonts/TTF: caching, new cache contents: 16 fonts, 0 dirs
/usr/share/fonts/encodings: caching, new cache contents: 0 fonts, 1 dirs
/usr/share/fonts/encodings/large: caching, new cache contents: 0 fonts, 0 dirs
/usr/share/fonts/util: caching, new cache contents: 0 fonts, 0 dirs
/var/cache/fontconfig: cleaning cache directory
fc-cache: succeeded

You can test for a default font being set like so:

$ fc-match
LiberationMono-Regular.ttf: "Liberation Mono" "Regular"

Font packages

This is a selective list that includes many font packages from the AUR along with those in the official repositories. Fonts are tagged "Unicode" if they have wide Unicode support.

Tip: Archfonts is a Python script that can be used to generate an overview of all the TTF fonts found in the official repositories and in the AUR.


Note: pango 1.44 dropped support for FreeType in favor of HarfBuzz thus losing support for traditional BDF/PCF bitmap fonts, so applications like e.g. gnome-terminal will not work with such fonts anymore, showing rectangles instead of glyphs. See FS#63297, Pango issue #386 and HarfBuzz issue #1897.

Works with pango 1.44:

Latin script


Packages providing a base font set:

Packages not providing a base font set:

Legacy Microsoft font packages:

  • Microsoft fonts (ttf-ms-fontsAUR) – Andalé Mono, Courier New, Arial, Arial Black, Comic Sans, Impact, Lucida Sans, Microsoft Sans Serif, Trebuchet, Verdana, Georgia, Times New Roman
  • Vista fonts (ttf-vista-fontsAUR) – Consolas, Calibri, Candara, Corbel, Cambria, Constantia


Fonts supporting programming ligatures are identified below with a ⟶ sign. For more monospaced fonts, also see #Bitmap and #Families.

Relevant websites:




Tango-edit-clear.pngThis article or section needs language, wiki syntax or style improvements. See Help:Style for reference.Tango-edit-clear.png

Reason: This section should be absorbed into the Monospace/Serif/Sans-Serif structure (Discuss in Talk:Fonts#)

Non-latin scripts

Ancient Scripts

  • ttf-ancient-fontsAUR - Font containing Unicode symbols for Aegean, Egyptian, Cuneiform, Anatolian, Maya, and Analecta scripts



  • ttf-ubrailleAUR - Font containing Unicode symbols for braille

Chinese, Japanese, Korean, Vietnamese


See Localization/Chinese#Fonts.


See Localization/Japanese#Fonts.


See Localization/Korean#Fonts.

  • ttf-hannom - Vietnamese TrueType font for chữ Nôm characters


See also #Latin script.

  • ttf-paratypeAUR - Font family by ParaType: sans, serif, mono, extended cyrillic and latin, OFL license
  • otf-russkopisAUR - A free OpenType cursive font for Cyrillic script


Almost all Unicode fonts contain the Greek character set (polytonic included). Some additional font packages, which might not contain the complete Unicode set but utilize high quality Greek (and Latin, of course) typefaces are:

  • otf-gfsAUR - Selection of OpenType fonts from the Greek Font Society
  • ttf-mgopenAUR - Professional TrueType fonts from Magenta


  • opensiddur-hebrew-fontsAUR - Large collection of Open-source licensed Hebrew fonts. There are also few Latin, Greek, Cyrillic, Arabic, and Amharic.
  • culmusAUR - Nice collection of free Hebrew fonts


See Localization/Indic#Fonts.


Mongolic and Tungusic

  • ttf-abkaiAUR - Fonts for Sibe, Manchu and Daur scripts (incomplete, currently in development)



  • fonts-tlwgAUR - Collection of scalable Thai fonts
  • ttf-laoAUR - Lao TTF font (Phetsarath_OT)
  • ttf-lao-fontsAUR - Lao TTF fonts, both Unicode and non-Unicode for Windows


Emoji and symbols

A section of the Unicode standard is designated for pictographic characters called "emoji".

Emoji fonts come in different formats: CBDT/CBLC (Google), SBIX (Apple), COLR/CPAL (Microsoft), SVG (Mozilla/Adobe).

Emojis should work without any configuration once you have at least one emoji font installed of supported format. Emoji font fallback according to the standard requires extra code to handle emoji. To force emoji font for specific application, see Font configuration#Force emoji font.

Software CBDT/CBLC SBIX COLR/CPAL SVG Emoji font fallback
Freetype Yes Yes Yes No
Pango Freetype Yes
WebKitGTK Freetype Yes
Qt Freetype No
Chromium Freetype Yes
Firefox Freetype Yes No, see Firefox#Font troubleshooting for workaround.



  • otf-openmojiAUR — German University of Design in Schwäbisch Gmünd open-source Emoji 12.1.
  • ttf-twemoji-colorAUR — Twitter's open-source Emoji 13.0.

Outline only:

  • ttf-symbolaAUR — provides many Unicode symbols, including emoji.

Kaomoji are sometimes referred to as "Japanese emoticons" and are composed of characters from various character sets, including CJK and Indic fonts. For example, the following set of packages covers most of existing kaomoji: gnu-free-fonts, ttf-arphic-uming, and ttf-indic-otf.


Other operating system fonts

See Metric-compatible fonts, which lists available alternatives for Microsoft fonts.

Fallback font order

Fontconfig automatically chooses a font that matches the current requirement. That is to say, if one is looking at a window containing English and Chinese for example, it will switch to another font for the Chinese text if the default one does not support it.

Fontconfig lets every user configure the order they want via $XDG_CONFIG_HOME/fontconfig/fonts.conf. If you want a particular Chinese font to be selected after your favorite Serif font, your file would look like this:

<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
     <family>Your favorite Latin Serif font name</family>
     <family>Your Chinese font name</family>
  • If you use a Chinese locale, set LC_LANG to und to make this work. Otherwise both English and Chinese text will be rendered in the Chinese font.
  • After changing the configuration run fc-match -a monospace | head to verify your fallback font is set correctly.

You can add a section for sans-serif and monospace as well. For more information, have a look at the fontconfig manual.

See also Font configuration#Replace or set default fonts.

Font alias

There are several font aliases which represent other fonts in order that applications may use similar fonts. The most common aliases are: serif for a font of the serif type (e.g. DejaVu Serif); sans-serif for a font of the sans-serif type (e.g. DejaVu Sans); and monospace for a monospaced font (e.g. DejaVu Sans Mono). However, the fonts which these aliases represent may vary and the relationship is often not shown in font management tools, such as those found in KDE and other desktop environments.

To reverse an alias and find which font it is representing, run:

$ fc-match monospace
DejaVuSansMono.ttf: "DejaVu Sans Mono" "Book"

In this case, DejaVuSansMono.ttf is the font represented by the monospace alias.

Tips and tricks

List all installed fonts

You can use the following command to list all installed Fontconfig fonts that are available on your system.

$ fc-list

List installed fonts for a particular language

Applications and browsers select and display fonts depending upon fontconfig preferences and available font glyph for Unicode text. To list installed fonts for a particular language, issue a command fc-list :lang="two letter language code". For instance, to list installed Arabic fonts or fonts supporting Arabic glyph:

$ fc-list -f '%{file}\n' :lang=ar

List installed fonts for a particular Unicode character

To search for monospace fonts supporting a particular Unicode codepoint:

$ fc-match -s monospace:charset=1F4A9

Set terminal font on-the-fly

Tango-view-fullscreen.pngThis article or section needs expansion.Tango-view-fullscreen.png

Reason: Where is the documentation for the escape codes? (Discuss in Talk:Fonts#)

For terminal emulators that use X resources, e.g. xterm or rxvt-unicode, fonts can be set by using escape sequences. Specifically, echo -e "\033]710;$font\007" to change the normal font (*font in ~/.Xresources), and replace 710 with 711, 712, and 713 to change the *boldFont, *italicFont, and *boldItalicFont, respectively.

$font uses the same syntax as in ~/.Xresources and can be anything the terminal emulator will support. (Example: xft:dejavu sans mono:size=9)

Application-specific font cache

Matplotlib (python-matplotlib or python2-matplotlibAUR) uses its own font cache, so after updating fonts, be sure to remove ~/.matplotlib/fontList.cache, ~/.cache/matplotlib/fontList.cache, ~/.sage/matplotlib-1.2.1/fontList.cache, etc. so it will regenerate its cache and find the new fonts [1].

BiDirectional text in terminal

Run BiCon (bicon-gitAUR) in order to display correctly Arabic and Hebrew text inside the terminal.

See also