RedHat 9下unix/:7100错误无法启动X windows


中午xx虚拟机上的RedHat 9无法启动,从喷出的出错信息看,是无法启动X-window进入桌面。
尝试startx,脚本运行失败,错误日志如下:

OS Kernel: Linux version 2.4.20-8 (bhcompile@porky.devel.redhat.com) (gcc version 3.2.2 20030222 (Red Hat Linux 3.2.2-5)) #1 Thu Mar 13 17:54:28 EST 2003 PF
Markers: (--) probed, (**) from config file, (==) default setting,
         (++) from command line, (!!) notice, (II) informational,
         (WW) warning, (EE) error, (NI) not implemented, (??) unknown.
(==) Log file: "/var/log/XFree86.0.log", Time: Tue Mar  3 12:13:22 2009
Could not init font path element unix/:7100, removing from list!

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

When reporting a problem related to a server crash, please send
the full server output, not just the last messages.
This can be found in the log file "/var/log/XFree86.0.log".
Please report problems to xfree86@xfree86.org.

从日志上看,是找不到字体文件。
头痛医头的办法是,以root身份用vim编辑“/etc/X11/XF86Config”,将“unix/:7100“一行加#号注释掉。reboot后成功启动X进入桌面。
但是没完,你是不是认为x的配置文件被篡改了?
不,unix/:7100是一个再正常不过的设置。

这要从X windows system的机制说起。X系统主要分为X Server、X Client(包括Window manager)。
X Server主要负责屏幕画面的绘制和显示,www.bkjia.com 它读取自己的配置文件(在Xorg使用/etc/X11/xorg.conf,XFree86则使用/etc/X11/XF86Config。RedHat 9的年代,Xorg还没有诞生。)。这些配置文件中就有涉及到采用什么字体。 

本来字体文件一般存放在本机/usr/X11R6/lib/X11/fonts上,这里用unix/:7100。实际是采用了XFS(X Font Server,默认端口7100)这个 daemon 来统一管理所有的字体。

有什么好处呢?
最大的好处就是提速,字体是存放在xfs内存中,而不是存放在磁盘上,取的时候速度就加快了。坏处也是显而易见的,会占用内存。
你可以把xfs运行在本地主机上,也可以运行到远程主机上。取决于/etc/X11/XF86Config中FontPath的设置。基本格式如下:
FontPath transport/hostname:port

当xfs运行在本机上时,最典型的设定值就是FontPath "unix/:7100"
unix表明采用的是本地套接口,7100呢,实际上并没有监听在7100端口,是个摆设。回忆一下,生成本地套接口(AF_LOCAL/AF_UNIX)的时候,套接口的地址实际使用的是unix文件名作为地址,而不是Internet地址,自然就没有包括进端口了。你可以netstat -a 一下,可以看到有这么一个文件/tmp/.font-unix/fs7100,X Server就从这里读取所需的字体。

这时候回到一开始找不到字体的错误,原因就十分明朗了。
1.xfs服务没有启动
2.xfs服务启动了,但是没有在/tmp下建立起本地套接口。
所以,下次出现这种情况,确保xfs在系统boot阶段能自动开启就可以了。
设置方法有很多,可以用services/ntsysv/chkconfig等。

当xfs运行在远程主机上时,一个典型的设定值可以是 FontPath "tcp/192.168.0.1:7100"
采用tcp连接到IP地址为192.168.0.1的主机的7100端口。
这个,有点crazy,但既然X 系统是C/S接口,这样有什么不可以呢?

题外话:我对xx使用虚拟机的方式颇有微词(纯属个人成见)。
1.在她看来,用虚拟机跑linux,仅仅是得到一个*nix环境和编译器,而且比mingw/cygwin安装起来方便。直接用root账户以图形界面方式登陆,desktop摆了一大堆东西,90%的操作是用鼠标右键完成,不学vimtutor当然也不知道强大的plugin,用未加语法高亮的gedit写程序也没用indent命令排版代码。
2.root的风险性导致她有不少误操作,出错的时候不读日志,或者是操作不正确得不到想要的实现时,一味说“虚拟机坏了”,乐此不疲地重装——vmware的方便至极的snapshot功能成了摆设。
3.追求快速关机的时候,不是用“power off“,而是直接关闭vmware窗口按钮,实际上就是“suspend“。一方面是虚拟机上的时钟就不准了,下次看日志的时候可能就不好推断,另一方面vmware软件本身如果失去响应,没有在关闭前正确存档当前虚拟机的上下文环境,那么下次打开vmware就会retoring失败,真的就坏掉了。

相关内容