By

Añadir nuevas fuentes en Linux

Añadir nuevas fuentes a mi sistema Linux siempre ha sido una incógnita, al menos para mí. Supongo que es algo por lo que no me he preocupado demasiado o que quizás no me haya hecho falta saberlo, hasta ahora. El objetivo de este post, añadir nuevas fuentes a nuestro sistema GNU/Linux, está relacionado directamente con nuestro servidor X, es decir, nuestro servidor gráfico. Creo que este siempre ha sido un punto problemático en GNU/Linux ya que agregar una tipografía nueva a nuestro sistema no es tan sencillo como hacerlo, por ejemplo, en otro sistema operativo como Microsoft Windows, que básicamente consiste en copiar los ficheros de las fuentes en un directorio. Pero empecemos por el principio…

¿Cuál es mi servidor gráfico o servidor X?

Existen varios servidores gráficos disponibles para GNU/Linux, pero generalmente, en las distribuciones actuales, nos encontraremos principalmente con XFree86 4.x y X.org-X11, sobre todo con este último. Para cerciorarnos sobre cuál es nuestro servidor X podemos ejecutar la siguiente instrucción en una consola:

[email protected]:~# X -version
X.Org X Server 1.7.7
Release Date: 2010-05-04
X Protocol Version 11, Revision 0
Build Operating System: Linux 3.0.0-1-amd64 x86_64 Debian
Current Operating System: Linux debian 2.6.32-5-amd64 #1 SMP Wed Jan 12 03:40:32 UTC 2011 x86_64
Kernel command line: BOOT_IMAGE=/vmlinuz-2.6.32-5-amd64 root=/dev/mapper/debian-root ro quiet
Build Date: 29 October 2011  06:58:14PM
xorg-server 2:1.7.7-14 (Julien Cristau ) 
Current version of pixman: 0.16.4
        Before reporting problems, check http://wiki.x.org
        to make sure that you have the latest version.
[email protected]:~#

Como podeis observar, en mi caso estoy utilizando la versión 1.7.7 de Xorg en un sistema Debian 6.0, una versión de Xorg algo antigua ya, aunque todo lo que se explica en el post será aplicable a versiones más recientes.

Pero, ¿Qué tipos y formatos de fuentes hay?

Cuando hablamos de tipografías, o de fuentes, normalmente no sabemos con qué tipo de fuentes y formatos estamos tratando, quizás por prisa o bien, porque tampoco nos hace falta saberlo para trabajar con ellas; pero básicamente, con respecto a tecnologías, hay dos tipos:

  • Fuentes de mapa de bits: que son fuentes muy simples y bastante fáciles de manipular y visualizar. El problema es que hay que optimizar dicha fuente para que pueda visualizarse correctamente en diferentes resoluciones o dispositivos de visualización, como la pantalla o impresa en un papel. Debido a esto, una misma fuente puede constar de varios ficheros, para poderla representar en varios tamaños o dispositivos de visualización.
  • Fuentes escalables, que es el tipo de fuente más utilizado en la actualidad, ya que cada carácter se representa con una serie de curvas y lineas dentro de una matriz; evitando tener que producir varios ficheros para una misma fuente. Uno de los inconvenientes del escalado es que consume más CPU, pero esto ya no supone un problema con las CPUs utilizadas hoy en día.

En cuanto a los formatos de fuentes, básicamente vamos a encontrar TrueType, desarrollado inicialmente por Apple Computers (.ttf); y PostScript Type1, o Type1 (.pfa, .pfb), desarrollado por Adobe. Bueno, pues ya sabemos un poco más acerca de las fuentes. Ahora dejémonos de teoría y vayamos al tema que concierne a este post.

Conseguir nuevas fuentes

Es posible conseguir fuentes desde varios sitios, por ejemplo, desde el sistema de paquetería de nuestra distribución. En mi caso uso Debian, así que si busco el término xfonts con APT (Advanced Packaging Tools) seguro que encuentro algún que otro paquete con nuevas fuentes para mi distribución:

$ apt-cache search xfonts

Un paquete con una fuente, que a mi personalmente me gusta mucho para la terminal, se llama xfonts-terminus. Así que para instalarla ejecutamos la siguiente instrucción:

$ sudo apt-get install xfonts-terminus

Pero esto no tiene ningún misterio para nosotros, ya que el paquete con las nuevas fuentes se instalará en el directorio correspondiente de nuestro sistema, y las tendremos disponibles sin tener nosotros que hacer nada. El problema de instalar fuentes, en GNU/Linux, es cuando nos encontramos una fuente que nos gusta en Internet. Hay muchos sitios en Internet desde donde se pueden descargar fuentes como Font Squirrel o 1001 Free Fonts. Desde esta última me he descargado una fuente llamada Video Phreak, que tiene una pinta muy retro y me ha gustado.

Preparando un directorio con fuentes

Si echamos un vistazo al fichero de configuración de nuestro servidor X, /etc/X11/xorg.conf si estamos usando Xorg-X11 o /etc/X11/XF86Config si estamos usando XFree86 4.x; podemos ver la sección llamada Files, que tendrá una forma similar a la siguiente:

Section "Files"
        ModulePath   "/usr/lib/xorg/modules"
        FontPath     "/usr/share/fonts/X11/misc"
        FontPath     "/usr/share/fonts/X11/cyrillic"
        FontPath     "/usr/share/fonts/X11/100dpi/:unscaled"
        FontPath     "/usr/share/fonts/X11/75dpi/:unscaled"
        FontPath     "/usr/share/fonts/X11/Type1"
        FontPath     "/usr/share/fonts/X11/100dpi"
        FontPath     "/usr/share/fonts/X11/75dpi"
        FontPath     "/var/lib/defoma/x-ttcidfont-conf.d/dirs/TrueType"
        FontPath     "built-ins"
EndSection

Cada linea FontPath indica una ruta al servidor X donde encontrar ficheros de fuentes. El orden establecido para los directorios de fuentes es influyente, es decir, el servidor X empieza a buscar en orden empezando por el primero hasta encontrar la fuente en uno de los directorios listados. De esta forma, si hay directorios con fuentes del mismo nombre, el servidor X utilizará la primera que encuentre según el orden establecido. Para hacer bien las cosas, no vamos a copiar nuestras fuentes en ninguno de esos directorios, ya que ahí se encuentran las fuentes básicas del servidor X. Crearemos nuestro propio directorio de fuentes. Siguiendo un poco el estándar FHS es posible crear un directorio en /opt o utilizar /usr/local. A mi personalmente me gusta más la opción de /usr/local. Dicho esto, procedemos a crear el directorio fonts en /usr/local:

$ sudo mkdir /usr/local/fonts

Ya tengo descargada mi fuente Video Phreak en mi directorio de descargas, asi que voy a descomprimir el paquete zip:

$ unzip VideoPhreak.zip 
Archive:  VideoPhreak.zip
  inflating: VideoPhreak.ttf

Como podemos ver, se trata de una fuete TrueType (.ttf). La moveremos a un directorio llamado truetype dentro de /usr/local/fonts/, por mantener separadas las fuentes por tipos, asi que ejecutaremos lo siguiente:

$ sudo mkdir /usr/local/fonts/truetype
$ sudo cp VideoPhreak.ttf /usr/local/fonts/truetype

El siguiente paso será crear los ficheros de resumen que describen las fuentes que vamos a instalar. Estos ficheros se llaman fonts.dir y fonts.scale y pueden tener un contenido como el siguiente:

10x20-ISO8859-1.pcf.gz -misc-fixed-medium-r-normal--20-200-75-75-c-100-iso8859-1

Esta linea por sí sola ya da miedo. Pero tranquilos porque no vamos a tener que escribir esta linea manualmente. Para automatizar la creación de estos ficheros existen dos comandos: mkfontdir y mkfontscale. Asi que el siguiente paso será movernos al directorio /usr/local/fonts/truetype y ejecutar cada uno de estos comandos, para generar los ficheros fonts.scale y fonts.dir:

$ sudo cd /usr/local/fonts/truetype
$ sudo mkfontscale
$ sudo mkfontdir

Estos dos comandos no generan ninguna salida, asi que si todo ha ido bien, deberemos tener los dos ficheros anteriormente comentados. En mi caso se han generado con el siguiente contenido:

$ cat fonts.dir 
1
VideoPhreak.ttf -macromedia-videophreak-medium-r-normal--0-0-0-0-p-0-iso10646-1
$ cat fonts.scale 
1
VideoPhreak.ttf -macromedia-videophreak-medium-r-normal--0-0-0-0-p-0-iso10646-1

¡Ya tenemos nuestro directorio de fuentes preparado!

Añadir el directorio de fuentes al listado de fuentes de X

El siguiente paso será añadir la ruta /usr/local/fonts/truetype en la sección Files del fichero de configuración de nuestro servidor X, en mi caso es el fichero /etc/X11/xorg.conf. Para ello añadiremos la siguiente linea al final de la sección Files:

        FontPath     "/usr/local/fonts/truetype"

Aplicar la configuración

Ya está todo hecho, así que el último paso es recargar la configuración. Es posible hacerlo de dos maneras: la menos elegante sería parar el servidor X y volverlo a ejecutar, pero eso implica que tendríamos que dejar de utilizar el entorno gráfico por unos momentos y por tanto, obligando el cierre de todos los programas de los que estemos haciendo uso en ese momento o incluso más, desconectar a usuarios que esté conectados remotamente a sesiones gráficas de nuestro servidor X. La forma más elegante consiste en utilizar el comando xset. Si no está instalado en el sistema es posible conseguirlo instalando el paquete x11-xserver-utils, al menos en Debian.

$ sudo apt-get install x11-xserver-utils

El comando xset nos permitirá añadir nuestro directorio de fuentes mientras se ejecuta el servidor X, no es necesario parar su ejecución en ningún momento; ejecutando la siguiente instrucción:

$ sudo xset fp+ /usr/local/fonts/truetype

Esta instrucción añade el directorio indicado al final de la lista de directorios que hemos visto antes. Es posible añadirla al principio de la lista cambiando fp+ por +fp. Y por último tendremos que indicar al servidor X que vuelva a examinar todos los directorios de fuentes, con la siguiente instrucción:

$ sudo xset fp rehash

Comprobar el resultado

El resultado de todo esto es que deberiamos tener a nuestra disposición la nueva fuente instalado. Hay una utilidad llamada xfontsel que viene en el paquete x11-utils, y que seguramente ya tendréis instalado. xfontsel es una aplicación bastante arcaica y tosca, pero bueno, puede servir para ver si la instalación ha sido satisfactoria.

Aun así, es posible que no podais visualizar la nueva fuente instalada en el sistema. Esto es debido a que muchas aplicaciones no reconocen el formato de las fuentes o simplemente no las encuentran. Las fuentes básicas tampoco incluyen antialiasing, es decir, el suavizado de fuentes, etc.

Para solucionar esto, contamos con el sistema Xft.

¿Qué es el sistema Xft?

El sistema Xft es una biblioteca de código abierto para el renderizado de fuentes TrueType y Type1. Xft es un sistema en el lado del cliente, es decir, que accede a las fuentes instaladas en el sistema local y además permite el suavizado de fuentes o antialiasing, además de otras funcionalidades. Por suerte, los directorios de fuentes son compartidos, o mejor dicho, son los mismos que los del servidor X. Lo único que tenemos que hacer es añadir nuestro directorio de fuentes particular al fichero de configuración de fuentes Xft, que se encuentra en /etc/fonts/fonts.conf (al menos en Debian). Se trata de un fichero XML, así que deberemos buscar un bloque de configuración como el siguiente:

<!-- Font directory list -->

        <dir>/usr/share/fonts</dir>
        <dir>/usr/X11R6/lib/X11/fonts</dir> <dir>/usr/local/share/fonts</dir>
        <dir>~/.fonts</dir>

Como podeis observar, hay menos directorios listados que en el fichero /etc/X11/xorg.conf y es debido a que el sistema Xft permite añadir el directorio padre que contiene todas las fuentes. En nuestro caso, sólo bastará con añadir a la lista el directorio /usr/local/fonts, de la siguiente forma:

        <dir>/usr/local/fonts</dir>

Una vez hecho esto, tendremos que indicar al sistema Xft que vuelva a recorrer todos los directorios para crear la lista de fuentes. Así que ejecutaremos el comando fc-cache con privilegios de superusuario o root:

$ sudo fc-cache

Tras la ejecución del comando, deberíamos tener disponible la fuente en todos nuestros programas tipo Gimp, editores de texto, etc.

Espero que os sirva de ayuda o simplemente para aprender algo nuevo, como me ha pasado a mi :-)

Un saludo!