传奇世界私服 传世私服
网站首页 Linux博客  Linux网址导航  Linux下载  Linux群集  Linux搜索  网站地图
 


发新话题
打印

【转贴】 startx启动失败的几个解决方法

【转贴】 startx启动失败的几个解决方法

转自Linux公社 http://www.linuxfans.org
贴出者为 vbbjq

中文译文:
很多linux用户有如此一个惨痛经历。当你和平常一样登陆和输入这可爱的startx时,你只是接收到误信息。错误通常存储在/var/log/XFree86.0.log。如果你读取这个日志文件,你将会注意到文件的最后一行通常如这样:
Could not init font path element unix/:7100, removing from list!
Fatal server error:
could not open default font 'fixed'
我不得不承认当我最初几次看到这些信息的时候我感到恐慌。作为一个中级的linux系统用户,我感到用命令控制台拨号和用lynx冲浪不舒服。所以我不得不花费很多时间在另一台电脑的使用Google在网上搜索帮助,另人感到意外的是如此多人像我一样拥有如此恐怖的经历。那些网上论坛和邮件列表的答复一般提供更多的同情心而不是真正的帮助,用我们一般的理解和研究,我们大部分可以判断这是X字体服务的失败。
做完进一步的研究之后,我现在相信这不像人们想象中的那么严重,请跟着我做下面的这些步骤,在大部分的案例中你将可以重新进入X windows。(注意:这些例子在我的Red Hat系统上。但我相信他们通常足够应用在其它发行版上。)
1、检查X字体服务是否正在运行。
一些人像我一样趋向于怀疑这是由X字体服务的bugs引起的,但它证明这X字体服务是良好的。我们可以运行这xfs格本文件夹在/etc/init.d去看是否字体服务正在运行。
[root@localhost /root]# /etc/init.d/xfs status
xfs (pid 1385) is running...
在一些案例,唯一失败的原因是字体服务停止。所以,你需要重新启动字体服务象这样:
[root@localhost /root]# /etc/init.d/xfs start
Starting xfs: [ OK ]
好,我的以往的经验告诉我这个[ OK ]未必是真的,所以你必须再次检查状况去看看是否正在运行。如果它不运行,你可以尝试startx去看看是否可以开始X windows。当字体服务运行时,如果你仍然不可以运行X服务,它意味着你拥有更严重的错误,你需要花费更多的一点时间阅读以下的步骤。(注意:在一个古怪的案例,我的根目录是被两个大于2GB的信息文件所占据满的,字体服务因为不能写进/tmp而停止,因此一些例子的解决办法是寻找巨大文件的删除掉他们。)
2.检查“fixed”字体是否可以访问到。现在是时侯确保字体“fixed”是受影响的。首先我们可以运行命令fslsfonts去看是否字体存在在所寻找的路径:
[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
当“fixed”是可用的,以上就是通常输出的情况。我们可以看到“fixed”实际上是字体'-Misc-Fixed-Medium-R-SemiCondensed--13-120-75-75-C-60-ISO8859-1'的别名,如果没有字体“fixed”,我们首先需要获得更多的信息以寻找字体“fixed”所在的路径。我们可以运用命令chkfontpath去看那些路径:
[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
这些字体路径在我的电脑上。它显示当它被修复的时候xfs观察这些路径寻找一个特殊的字体。有两种类型的重要文件:fonts.dir在每一个路径中,而fonts.alias在一些路径中。例如,让我们进入/usr/X11R6/lib/X11/fonts/100dpi,打开这个文件。文件象这样:
[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
...
这第一行详细说明字体的数量在当前目录。以下几行是字体文件的名字:
[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
...
这个文件显示字体文件的别名与原名,因此清楚知道从前字体的“fixed”是需要的,字体服务为了比赛(match,不知道该怎么翻译)在每一字体路径中寻找fonts.alias文件。如果比赛是存在,那相应的字体文件是指定在fonts.dir;如果比赛不存在,那是非常罕见的情形,字体服务不可以运行我们需要重建字体列表。这重建的过程将会产生新的fonts.dir和fonts.alias文件。

3.重建字体列表。运用格本文件xfs在/etc/init.d下,字体列表可以被重建。以下是格本文件的摘录:
...
buildfontlist() {
pushd . &> /dev/null
for d in $(/usr/sbin/chkfontpath --list | cut -f 2 -d ':') ;do
if [ -d "$d" ]; then
cd $d
# Check if we need to rerun 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
}
...
因为读者不熟悉运行命令程序,这格本文件的意思是每次xfs格本在运行,它将会检查是否有fonts.dir在列表中的每一个字本路径中。当fonts.dir在路径中消失,字体列表需要重建。如果fonts.dir不存在于每一路径中,它将会检查是否所有文件在字体目录是被改变在fonts.dir最后一次改变。如果这是真实的,字体列表也需要被重建。

作为网络新手是对学习命令不感兴趣的,我们玩一个小窍门在子程序,我们可以设置"NEEDED=yes" 在第一情况下强制重建字体列表。

4.字体确实不见了?如果以上所有的步骤都失败了。如果真正地被一些程序删去,你就需要重新安装字体。

TOP

【转贴】 startx启动失败的几个解决方法

A common case of startx/xinit failure
By Yufei Yuan
http://www.linuxgazette.com/issue93/yuan.html

Many of us gnu/linux users have had such a terrible experience. When you login and type the sweet startx as usual, you only receive scrolling lines of error messages. One copy of the error message is usually stored in /var/log/XFree86.0.log. If you can access the log file, you will notice the last lines of the file may look like this:



Could not init font path element unix/:7100, removing from list!

Fatal server error:
could not open default font 'fixed'

I have to admit that I was in panic when I saw this message in the first several times. As an intermediate user of linux system, I was not so comfortable using text console for modem dialup and surfing with lynx. So I had to spend a lot of time on another box and use Google to search for help on web. It was amazing that so many people like me have this exact terrible experience and those replies in web forums and mailing lists generally offer more sympathy than real help. Using our common sense and some research, most of us can figure out this failure has something to do with X font server.

After having done a little more research, now I believe that this failure may not be so serious as it looks. Please follow me by doing the steps below, in most of the cases you will get your X windows starting up again.

Note: The following examples run on my Red Hat box. But I believe they are general enough to be used for other distributions.


1. Check if the X font server is running.

Some people like me tend to suspect it is caused by bugs in the X font server, but it turned out that X font server is quite robust. We can run the xfs script under /etc/init.d to see if the font server is running.


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

In some cases, the only reason for the failure is that the font server is dead. So, you need to restart font server like this:


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

Well, my learned lesson is don't take this '[OK]' for granted. You have to check the status again to see if it is running. If it does run, you can try startx to see if you can start X windows. If you still cannot start X server when the font server runs, it means you are having more serious trouble. You need to waste a little more time reading on the following steps.

Note: In a weird case, my root partition was fully filled by two huge log files occupying more than 2 GB. The font server dies when it cannot write to /tmp. So the simple solution was finding the huge files and deleting them.


2. Check if the font 'fixed' is accessible.

Now it is time to ensure that the font 'fixed' is accessible. First, we can use command fslsfonts to see if font 'fixed' exists in the search path:


[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

This is the normal output when 'fixed' is available. Here, we can see that 'fixed' is actually an alias for the font '-Misc-Fixed-Medium-R-SemiCondensed--13-120-75-75-C-60-ISO8859-1'. If there is no font 'fixed', we first need to gain knowledge of the search path for fonts. We can use command chkfontpath to look at those paths:


[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

These are the font paths on my box. It shows that xfs looks into these paths seeking a specific font when it is required. There are two types of important files: fonts.dir in each of these paths, and fonts.alias in some of the paths. For example, let's go to /usr/X11R6/lib/X11/fonts/100dpi, and open the files. The files look like this:


[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
...

The first line specifies the number of fonts under current directory. Following lines map file names to font names.


[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
...

This file maps font alias to font names. So it is clear that once font 'fixed' is needed, the font server search fonts.alias in each font path for a match. If the match exists, the corresponding font file is specified in fonts.dir. If no match exists, which is a rare situation, the X server cannot start and we need to rebuild the font lists. The rebuilding process will generate new fonts.dir and fonts.alias files.


3. Rebuild font list.

Font list can be rebuilt using the script file xfs under /etc/init.d. Following is an excerpt of the script:


...
buildfontlist() {
pushd . &> /dev/null
for d in $(/usr/sbin/chkfontpath --list │ cut -f 2 -d ':') ;do
if [ -d "$d" ]; then
cd $d
# Check if we need to rerun 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
}
...

For readers not familiar with shell programming, this excerpt means that each time xfs script is run, it will check whether there is a fonts.dir file in each listed font path. If fonts.dir is missing in a path, font list needs to be rebuilt. If a fonts.dir does exist for each path, it will check if the status of any file in the font directory is changed after the last change of fonts.dir. If this is true, the font list also needs to be rebuilt.

For newbies not interested in learning shell programming, we play a small trick in the subroutine buildfontlist(). We can set "NEEDED=yes" in the first instance to force the rebuilding of font list.


4. Fonts really missing?

If all steps above fail. My last suggestion is to check if the font file is really removed by some processes. Then you need to reinstall the font.

TOP

发新话题