方案概述:
1) 直接在 Linux 本机登录,zys 和 tlc 都非常美观,看着很舒服。我看过不少文章是介绍用 Simsun 和 Tahoma 增加系统字体解决中文问题,感觉太复杂了点,加字体改配置其实很简单的。
2) 通过 Xmanager Enterprise 连接,字体由 Font Server 提供。在 Xconfig 的 Font 增加 Font Server 192.168.100.60。其中 zys 字体非常美观,tlc比较粗糙,可能换别的工具会好看点。
3) 通过 Vnc Viewer 连接,zys 和 tlc 都找不到字体。原因是我不知道怎么配 置 Vnc 使它可以连 Font Server,或许某些高手以及软件开发商可以搞定这个问题,目前只能用第四种办法解决。
4) 以上三种连接方式中,如果先设置 JAVA_FONTS 环境再安装,同样可以显示 中文。可惜字体又小又模糊,可能伤害视力,而且系统报告有些字体找不到。
昨天我研究了很久,没办法彻底解决。 过程分析:
1) 所谓 zys 字体,就是-misc-ZYSong18030-,所谓 tlc 字体,就是-tlc-song-。 其中 zys 是 Redhat AS3_U6 自带的,tlc 需要到网上下载 Turbo Linux 的 字体然后安装,搜索一下就找到了。常见的是 1.4-13 和 1.5-1 这两个版本, 推荐用 1.4-13 的,结构比较简单。
使用 tlc 的话,就不需要改 Oracle 的 font.properties.zh 了。下载回来传到 Linux 主机,然后 su - 变成 root,安装命令是http://ftp.jaist.ac.jp/pub/Linux/TurboLinux/TurboLinux/ia32/Server/7/install/turbo/RPMS/
ttf-zh-song-1.4-13.noarch.rpm
ttf-zh-additional-1.4-13.noarch.rpm
http://ftp.jaist.ac.jp/pub/Linux/TurboLinux/TurboLinux/ia32/Server/8/install/turbo/RPMS/
ttf-zh-additional-1.5-1.noarch.rpm
ttf-zh-song-1.5-1.noarch.rpm
使用 zys 的话,首先要找 Oracle 的 font.properties.zh 文件,然后修改。rpm -ihv xxx.rpm
rpm -qa | grep ttf-zh
cd /home/oracle/setup/
rpm -ihv ttf-zh-song-1.4-13.noarch.rpm
rpm -ihv ttf-zh-additional-1.4-13.noarch.rpm
rpm -ql ttf-zh-song | grep ttf
ls -la /usr/X11R6/lib/X11/fonts/ttf-zh
装好了 tlc 字库并且改好了 zys 的配置文件,你就可以随时切换中文字体了。其实在 Linux 本机安装的时候,两种字体都非常美观,不相上下。有一点必须说明,通常服务器放在非常冷的机房里,专业服务器(无头机)多数不带显示器,人们喜欢一边用桌面电脑看资料一边操作,所以本机安装其实并不是那么完美。 2) 要实现对远程主机的访问,通常我们都会使用 X 窗口软件或者远程访问软件。 比较有名的是 Exceed,但是太大而且很贵,Xwin Pro 比较小,但功能简单。[oracle@rebeca oracle]$ cd setup ; pwd
/home/oracle/setup
![]()
[oracle@rebeca setup]$ find -name font*zh
./Disk1/stage/Components/oracle.swd.jre/1.3.1.0.0/1/DataFiles/Expanded/jre/linux/lib/font.properties.zh
![]()
[oracle@rebeca lib]$ cd ./Disk1/stage/Components/oracle.swd.jre/1.3.1.0.0/1/DataFiles/Expanded/jre/linux/lib/
[oracle@rebeca lib]$ cp -pf font.properties.zh font.properties.zh.tlc
[oracle@rebeca lib]$ cat font.properties.zh.tlc | sed 's/-tlc-song-/-misc-ZYSong18030-/g' > font.properties.zh.zys
[oracle@rebeca lib]$ cp -pf font.properties.zh.zys font.properties.zh
[oracle@rebeca lib]$ ls *zh*
font.properties.zh font.properties.zh.tlc font.properties.zh.zys
![]()
[oracle@rebeca lib]$ cat font.properties.zh.tlc | grep -e "-tlc-song-"
[oracle@rebeca lib]$ cat font.properties.zh.zys | grep -e "-tlc-song-"
[oracle@rebeca lib]$ cat font.properties.zh.zys | grep -e "-misc-ZYSong18030-"
Xmanager Enterprise 是一个优秀的 X 窗口服务器。Linux 服务器作为一个X 客户端把资料发给 Xmanager,由它负责解释并且作图。所以,这就带来一个问题,Linux 本机登录时已经安装的字体,但是 X 窗口服务器可能不认识。
解决方案是在 X 窗口服务器上安装对应的字体(厂家提供,不好找),或者是在 Linux 服务器(也就是 X 客户端)建立一个 Font Server。这样当 X 服务 器碰到解释不了的字体,就会到 Font Server 去查询并下载,然后显示出来。
用 root 登陆,RH菜单--->系统设置--->登录屏幕--->XDMCP,选"启用XDMCP"。你可以用 Broadcast 方式去搜索 XDMCP,也可以用 Passive 接受主机数据。
考虑到 Redhat AS3_U6 作为服务器,通常都启动了防火墙,那么我们首先要把一些端口打开。xdmcp 是 UDP 177,x11 是 TCP 6000,xfs 是 TCP 7100。
Vnc 一般是用 TCP 5900,但在 Linux 里从 5901 开始,每加一个端口递增。
如果上面的文字过于简略导致不便理解,请参考下面这篇文章,作者:laptop。service iptables stop
service iptables status
![]()
less /etc/rc.d/init.d/iptables
<-----
IPTABLES=iptables
IPTABLES_DATA=/etc/sysconfig/$IPTABLES
IPTABLES_CONFIG=/etc/sysconfig/$...{IPTABLES}-config
----->
![]()
vi /etc/sysconfig/iptables
<-----
# Firewall configuration written by redhat-config-securitylevel
# Manual customization of this file is not recommended.
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:RH-Firewall-1-INPUT - [0:0]
-A INPUT -j RH-Firewall-1-INPUT
-A FORWARD -j RH-Firewall-1-INPUT
-A RH-Firewall-1-INPUT -i lo -j ACCEPT
-A RH-Firewall-1-INPUT -p icmp --icmp-type any -j ACCEPT
-A RH-Firewall-1-INPUT -p 50 -j ACCEPT
-A RH-Firewall-1-INPUT -p 51 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 7778 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 7777 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 7100 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 6000 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 5902 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 5901 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 5900 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 4443 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 1521 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m udp -p udp --dport 177 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 25 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 23 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 21 -j ACCEPT
-A RH-Firewall-1-INPUT -j REJECT --reject-with icmp-host-prohibited
COMMIT
----->
![]()
vi /etc/services ...{用vi的"/数字"找到端口号附近的区域,填加下列信息}
<-----
oratns 1521/tcp # Oracle listener
......
vnc+0 5900/tcp # VNC Server Port + 0
vnc+1 5901/tcp # VNC Server Port + 1
vnc+2 5902/tcp # VNC Server Port + 2
......
oraSSL 4443/tcp # Oracle Apache 1.3.22
......
oraweb 7777/tcp # Oracle Apache 1.3.22
orassl 7778/tcp # Oracle Apache 1.3.22
----->
![]()
service iptables start
service iptables status
<-----
Chain RH-Firewall-1-INPUT (2 references)
target prot opt source destination
ACCEPT all -- anywhere anywhere
ACCEPT icmp -- anywhere anywhere icmp any
ACCEPT ipv6-crypt-- anywhere anywhere
ACCEPT ipv6-auth-- anywhere anywhere
ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED
ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:orassl
ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:oraweb
ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:xfs
ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:x11
ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:vnc+2
ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:vnc+1
ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:vnc+0
ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:oraSSL
ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:oratns
ACCEPT udp -- anywhere anywhere state NEW udp dpt:xdmcp
ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:http
ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:smtp
ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:telnet
ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:ssh
ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:ftp
REJECT all -- anywhere anywhere reject-with icmp-host-prohibited
----->
![]()
cat /etc/rc.d/init.d/xfs | grep -e config -e daemon
<-----
# chkconfig: 2345 90 10
# config: /etc/X11/fs/config
daemon xfs -droppriv -daemon
----->
![]()
vi /etc/rc.d/init.d/xfs
...{备注:一些资料说Unix默认是 -1,最好强制指定为 7100 断绝隐患}
<-----
daemon xfs -droppriv -daemon -port 7100
----->
![]()
vi /etc/X11/fs/config
...{备注:默认是关闭 TCP,要用时在 no-listen 前面加注解号,重启}
<-----
# don't listen to TCP ports by default for security reasons
# no-listen = tcp
----->
![]()
netstat -na | grep :7100
lsof -P | grep -e *:7100
![]()
xfsinfo -server 192.168.100.60:7100
<-----
name of server: 192.168.100.60:7100
version number: 2
vendor string: The XFree86 Project (experimental version)
vendor release number: 6600
maximum request size: 8192 longwords (32768 bytes)
number of catalogues: 1
all
Number of alternate servers: 0
number of extensions: 0
----->
![]()
vi /etc/X11/XF86Config
<-----
RgbPath "/usr/X11R6/lib/X11/rgb"
FontPath "/usr/share/fonts/zh_CN/TrueType"
FontPath "/usr/X11R6/lib/X11/fonts/ttf-zh"
FontPath "/usr/X11R6/lib/X11/fonts/75dpi"
FontPath "/usr/X11R6/lib/X11/fonts/misc"
FontPath "/usr/X11R6/lib/X11/fonts/CID"
FontPath "/usr/X11R6/lib/X11/fonts/Speedo"
FontPath "/usr/X11R6/lib/X11/fonts/100dpi"
FontPath "unix/:7100"
FontPath "tcp/192.168.100.60:7100"
----->
http://www.linuxforum.net/doc/xdmcp.html
基于XDMCP的远程X
重起 Linux 后,以上修改就生效了。在 WinXp 里可以用广播方式和被动方式 去访问主机。运行 Xmanager - Broadcast,在 Broadcast Chooser 对话框里会显示所找到的 XDMCP 主机,rebeca[192.168.100.60][Linux 2.4.21-37.EL],选中你的服务器并点 connect。如果没有连接成功,请检查是否本机具备两个或以上 IP,这时弹出一个 IP Selector,请选择跟主机同一个网段的 IP。连接成功后,RH菜单--->系统工具--->终端,点右键,选"将该启动器加入面板"。
没有配置 Xconfig,直接在 Xmanager 里安装 Oracle,执行 ./runInstaller出现报错信息,并显示大量的“口口”,说明 Linux 的字体在 Xman 里无效。Font specified in font.properties not found [-tlc-song-medium-r-normal--*-%d-*-*-c-*-gbk-0]
所以必须 Xconfig,把 XDMCP sample 设置成 Default,然后找 Font 栏目, Add Font Server,填写 Linux 主机 IP,例如 192.168.100.60,端口 7100。添加成功后,显示 tcp/192.168.100.60:7100。这时候再安装就有中文。
运行 Xmanager - Passive,用 SecureCRT 登录 Linux 主机 192.168.100.60。xhost +192.168.100.70
结果:192.168.100.70 being added to access control list,于是这个IP可以作为 X 窗口的主机了。权限变动后 Xmanager 会自动关闭,请重新运行。
export DISPLAY=192.168.100.70:0.0
执行 ./runInstaller 就发现安装界面跑到你的屏幕了,Xconfig 同上所述。 3) 首先用 SecureCRT 开一个新窗口登录 Linux 主机 192.168.100.60,帐号一般用 oracle。第一次运行 Vnc 会问你密码,关闭用 vncserver -kill xxx。
这时候运行 Vnc Viewer,Server 填写 192.168.100.60:5901,按 OK,输入密码,再按 OK。在 Vnc 里开一个终端,就可以进行安装了。可惜的是,我没有找到 Vnc Server 的相关资料,导致 Font Server 信息不可用,也就是说直接安装 Oracle9i 会导致“口口”的乱码。目前一般用方法四安装,否则我们必须 export LANG=C,只能用英文界面。[oracle@rebeca oracle]$ vncserver
New 'rebeca:1 (oracle)' desktop is rebeca:1
Starting applications specified in /home/oracle/.vnc/xstartup
Log file is /home/oracle/.vnc/rebeca:1.log
4) 在安装窗口输入:export JAVA_FONTS=/usr/share/fonts/zh_CN/TrueType然后再 cd setup/Disk1 ; ./runInstaller 就可以了。真是简单得无于伦比,但是也有些不足之处,系统报警说找不到某些字体,不用管它们,继续安装。
安装界面出现之后,可以顺利显示中文,但是字体比较小,不知道如何改进。
安装抓图:
1) Ora9i_Both_con.jpg,在 Linux 主机直接安装。

2) Ora9i_Xman_net.jpg,读取 Font Server 数据。

Ora9i_Xman_tlc.jpg,说明 tlc 字体比较粗糙。

Ora9i_Xman_zys.jpg,说明 zys 字体始终完美。

3) Ora9i_Vnc4_bad.jpg,Vnc 不认 Font Server。

4) Ora9i_Vnc4_jre.jpg,Vnc 用JAVA_FONTS安装。

本文已经原作者wwashington授权,感谢wwashington对IT168鼎力支持。
原文链接:http://bbs.boletips.com/blbbs/viewthread.php?tid=175&extra=page%3D2