|
G A C E T
A D E L I N U X |
| Un caso común de fallo de startx/xinit
Por Yufei Yuan Traducción al español por José Gregorio Del Sol Cobos
|
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.
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.