G A C E T A   D E   L I N U X
...haciendo a Linux un poco más divertido!

Un caso común de fallo de startx/xinit
Por Yufei Yuan
Traducción al español por José Gregorio Del Sol Cobos
el día 2 de Octubre 2003, para La Gaceta de Linux

Muchos de los usuarios de gnu/linux han tenido una terrible experiencia como ésa. Cuando te identificas y escribes el dulce startx como siempre, sólo recibes líneas y más líneas de mensajes de error. Una copia del mensaje de error se almacena ahabitualmente en /var/log/XFree86.0.log. Si usted puede acceder al archivo de log, notará que las últimas líneas del fichero pueden parecer como esto:

	
  Could not init font path element unix/:7100, removing from list!
   
  Fatal server error: 
  could not open default font 'fixed' 

(Traducción:


    No se puedo iniciar el elemento de ruta de fuente unix/:7100, ¡quitándolo de la lista!

		Error fatal de servidor:
		no se puedo abrir la fuente por defecto 'fixed'
)

Debo admitir que me entró el pánico cuando vi este mensaje las primeras veces. Como usuario intermediario de un sistema linux, no me sentía tan cómodo empleando la consola de texto para la sintonización del modem o navegando con lynx. Así que tenía que gastar un montón de tiempo en otra caja y usar Google para buscar ayuda en la web. Era asombroso que tanta gente como yo tenga justo esa misma terrible experiencia y aquellas respuestas en los foros de la web y las listas de correo generalmente ofrecen más simpatía que ayuda real. Usando nuestro sentido común y alguna investigación, la mayoría de nosotros nos podemos imaginar que este fallo tiene algo que ver con el servidor de fuentes de las X.

Después de haber investigado un poco más, ahora creo que este fallo puede no ser tan serio como parece. Sígame por favor por los pasos de más abajo, en la mayoría de los casos usted tendrá sus ventana X comenzando de nuevo.

Nota: Los siguientes ejemplos corren sólo sobre mi Red Hat. Sin embargo, creo que son bastante generales para usarse con otras distribuciones.


1. Pruebe si el servidor de fuentes de las X está ejecutándose.

Algunas personas como yo tienden a sospechar que está causado por fallos (bugs) del servidor de fuentes de las X, pero resultó que ese servidor es bastante robusto. Podemos ejecutar el guión xfs desde /etc/init.d para ver si el servidor de fuentes está ejecutándose.


  [root@localhost /root]# /etc/init.d/xfs status 
  xfs (pid 1385) is running... 

En algunos casos, la única razón del fallo es que el servidor de fuentes se ha muerto. Entonces, usted tiene que reiniciarlo así:


  [root@localhost /root]# /etc/init.d/xfs start 
  Starting xfs:                                              [  OK  ] 

Bueno, la lección que yo aprendí es que no hay que tomar al pie de la letra lo del '[OK]'. Debe probar el estado de nuevo para ver si se está ejecutando. Si lo hace, puede intentar startx para ver si puede iniciar las ventanas X. Si usted aún no puede iniciar el servidor X cuando el servidor de fuentes funciona, significa que está teniendo problemas más serios. Necesita emplear un poco más de tiempo leyendo los siguientes pasos.

Nota: en un caso asqueroso, mi partición raíz se llenó por completo con dos enorme ficheros log que ocupaban más de 2 GB. El servidor de fuentes muere cuando no puede escribir en /tmp. así que la solución sencilla fue encontrar los archivos enorme y borrarlos.

2. Pruebe si la fuente 'fixed' está accesible.

Ahora es el momento de asegurarse de que la fuente 'fixed' está accesible. Primero, podemos usar el comando fslsfonts para ver si la fuente 'fixed' existe en la ruta de búsqueda:


  [root@localhost alex]# fslsfonts -server unix/:7100 -ll -fn fixed
  DIR  MIN  MAX EXIST DFLT ASC DESC NAME
  -->    0  255  some    0  11    2 fixed
  FONTNAME_REGISTRY    
  FOUNDRY    Misc
  FAMILY_NAME    Fixed
  WEIGHT_NAME    Medium
  SLANT    R
  SETWIDTH_NAME    SemiCondensed
  ADD_STYLE_NAME    
  PIXEL_SIZE    13
  POINT_SIZE    120
  RESOLUTION_X    75
  RESOLUTION_Y    75
  SPACING    C
  AVERAGE_WIDTH    60
  CHARSET_REGISTRY    ISO8859
  CHARSET_ENCODING    1
  COPYRIGHT    Public domain font.  Share and enjoy.
  CAP_HEIGHT    9
  X_HEIGHT    6
  FONT    -Misc-Fixed-Medium-R-SemiCondensed--13-120-75-75-C-60-ISO8859-1
  WEIGHT    10
  RESOLUTION    103
  QUAD_WIDTH    6

ésta es la salida normal cuando está disponible la 'fixed'. Aquí, podemos ver que esa 'fixed' es en realidad un alias para la fuente '-Misc-Fixed-Medium-R-SemiCondensed--13-120-75-75-C-60-ISO8859-1'. Si no hay fuente 'fixed', primero tenemos que enterarnos de la ruta de búsqueda para las fuentes. Podemos usar la orden chkfontpath para mirar en esas rutas:


  [root@localhost alex]# /usr/sbin/chkfontpath
  Current directories in font path:
  1: /usr/X11R6/lib/X11/fonts/misc:unscaled
  2: /usr/X11R6/lib/X11/fonts/75dpi:unscaled
  3: /usr/X11R6/lib/X11/fonts/100dpi:unscaled
  4: /usr/X11R6/lib/X11/fonts/misc
  5: /usr/X11R6/lib/X11/fonts/Type1
  6: /usr/X11R6/lib/X11/fonts/Speedo
  7: /usr/X11R6/lib/X11/fonts/CID
  8: /usr/X11R6/lib/X11/fonts/75dpi
  9: /usr/X11R6/lib/X11/fonts/100dpi
  10: /usr/share/fonts/default/Type1
  11: /usr/share/fonts/default/TrueType
  12: /usr/share/fonts/ja/TrueType
  13: /usr/X11R6/lib/X11/fonts/latin2/100dpi:unscaled
  14: /usr/X11R6/lib/X11/fonts/latin2/100dpi
  15: /usr/share/fonts/ISO8859-7/misc:unscaled
  16: /usr/share/fonts/ISO8859-7/75dpi:unscaled
  17: /usr/share/fonts/ISO8859-7/100dpi:unscaled
  18: /usr/share/fonts/ISO8859-7/misc
  19: /usr/share/fonts/ISO8859-7/Type1
  20: /usr/share/fonts/ISO8859-7/75dpi
  21: /usr/share/fonts/ISO8859-7/100dpi
  22: /usr/share/fonts/ISO8859-9/misc:unscaled
  23: /usr/share/fonts/ISO8859-9/100dpi:unscaled
  24: /usr/share/fonts/ISO8859-9/misc
  25: /usr/share/fonts/ISO8859-9/100dpi
  26: /usr/share/fonts/KOI8-R/100dpi:unscaled
  27: /usr/share/fonts/KOI8-R/100dpi
  28: /usr/share/fonts/zh_CN/TrueType
  29: /usr/share/fonts/zh_TW/TrueType
  30: /usr/share/AbiSuite/fonts

Éstas son las rutas de las fuentes de mi caja. Muestra que xfs mira en esas rutas buscando una fuente específica cuando se le requiere. Hay ds tipos de archivos importantes fonts.dir en cada una de esas rutas, y font.alias en algunas de las rutas. Por ejemplo, vayamos a /usr/X11R6/lib/X11/fonts/100dpi, y abramos los ficheros. Los archivos aparecen como éste:


  [fonts.dir]


  775
  UTI___14.pcf.gz -adobe-utopia-regular-i-normal--19-140-100-100-p-104-iso10646-1
  UTBI__14.pcf.gz -adobe-utopia-bold-i-normal--19-140-100-100-p-109-iso10646-1
  UTI___12.pcf.gz -adobe-utopia-regular-i-normal--17-120-100-100-p-89-iso10646-1
  UTI___24.pcf.gz -adobe-utopia-regular-i-normal--33-240-100-100-p-179-iso10646-1
  courO08.pcf.gz -adobe-courier-medium-o-normal--11-80-100-100-m-60-iso10646-1
  UTBI__12.pcf.gz -adobe-utopia-bold-i-normal--17-120-100-100-p-93-iso10646-1
  ...

La primera línea especifica el número de fuentes bajo el directorio actual las líneas siguientes mapean nombres de archivo en nombres de fuente.


  [fonts.alias]

  lucidasans-bolditalic-8 -b&h-lucida-bold-i-normal-sans-11-80-100-100-p-69-iso8859-1
  lucidasans-bolditalic-10 -b&h-lucida-bold-i-normal-sans-14-100-100-100-p-90-iso8859-1
  lucidasans-bolditalic-12 -b&h-lucida-bold-i-normal-sans-17-120-100-100-p-108-iso8859-1
  lucidasans-bolditalic-14 -b&h-lucida-bold-i-normal-sans-20-140-100-100-p-127-iso8859-1
  lucidasans-bolditalic-18 -b&h-lucida-bold-i-normal-sans-25-180-100-100-p-159-iso8859-1
  lucidasans-bolditalic-24 -b&h-lucida-bold-i-normal-sans-34-240-100-100-p-215-iso8859-1
  ...

Este archivo mapea alias de fuentes en nombres de fuentes. Así que está claro que una vez que se necesita la fuente 'fixed', el servidor de fuentes busca fonts.alias en cada ruta de fuente en busca de coincidencias. Si la coincidencia existe, el archivo de fuente correspondiente se especifica en fonts.dir. Si la coincidencia no existe, lo que es una rara situación, el servidor X no puede comenzar y necesitamos reconstruir las listas de fuentes. El proceso de reconstrucción generará nuevos archivos fonts.dir y fonts.alias.


3. Reconstruir la lista de fuentes.

La lista de fuentes se puede reconstruir usando el archivo de guión xfs bajo /etc/init.d. Lo que sigue es un extracto del guión:


...
buildfontlist() {
  pushd . &> /dev/null
    for d in $(/usr/sbin/chkfontpath --list | cut -f 2 -d ':') ;do
      if [ -d "$d" ]; then
        cd $d
        # Prueba si tenemos que volver a ejecutar mkfontdir
        NEEDED=no
        if ! [ -e fonts.dir ]; then
          NEEDED=yes
        elif [ "$(find . -type f -cnewer fonts.dir 2>/dev/null)" != "" ];then
          NEEDED=yes
        fi
        if [ "$NEEDED" = "yes" ]; then
        ...
}
...
start() {
  if [ -L /usr/X11R6/bin/X ]; then
    echo -n $"Starting $prog: "
    [ -x /usr/sbin/chkfontpath ] && buildfontlist
    rm -fr /tmp/.font-unix
    daemon xfs -droppriv -daemon
    ret=$?
    [ $ret -eq 0 ] && touch /var/lock/subsys/xfs
    echo
    return $ret
  fi
}	
...

Para los lectores no familiarizados con la programación de la shell, este extracto significa que cada vez que el guión xfs sea ejecutado, comprobará si hay un archivo fonts.dir en cada ruta de fuentes listada. Si fonts.dir falta en una ruta, la lista de fuentes tiene que ser reconstruida. Si existe un fonts.dir para cada ruta, comprobará si el estado de cualquier fichero en el directorio de fuentes se ha cambiado después del último cambio de fonts.dir. Si esto es cierto, la lista de fuentes también tiene que ser reconstruida.

Para los novatos no interesados en aprender a programar para la shell, realizamos un pequeño truco en la subrutina buildfontlist(). Podemos hacer que sea "NEEDED=yes" la primera vez para forzar la reconstrucción de la lista de fuentes.


4. ¿Y si las fuentes realmente faltan?

Si todos los pasos anteriores fallan. Mi última sugerencia es comprobar si el archivo de la fuente realmente ha sido eliminado por algún proceso. Entonces usted tiene que reinstalar la fuente.

 

[BIO] Yufei es un estudiante de graduado en la Universidad de Alberta. Emplea GNU/Linux por trabajo y por diversión. Desarrolla algoritmos de compresión para imagen y vídeo sobre GNU/Linux para su proyecto de investigación. Su caja RH9 (Red Hat 9) en casa tiene un winmodem HSF de Conexant, que funciona bastante bien para navegar por la web y escuchar audio retransmitido al vuelo.


Copyright © 2003, Yufei Yuan. Licencia de copia http://www.linuxgazette.com/copying.html
Publicado en el Número 93 de Linux Gazette, Agosto de 2003