歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux綜合 >> Red hat Linux >> 在紅帽子6.0中使用TrueType字體

在紅帽子6.0中使用TrueType字體

日期:2017/2/27 12:14:08   编辑:Red hat Linux

最近我在http://www.kegel.com/linux/tt.html讀了篇文章,文章詳細講述了在Red Hat Linux 6.0中運行TrueType字體的方法。如果不先讀參考文章的話,我壓根兒沒法寫出這篇簡單的HOWTO。請先讀一讀。

首先聲明我不是這方面的專家;我壓根兒不知道PostScript和TrueType字體之間的差異;現在我甚至不想知道。我希望的只是東西能運作。對那些細節,我要操心的還多的很。但當知道這些細節對一個過程或項目的成功很重要時,我的看法立刻變了。

開始著手…
在按照kegel.com的文檔操作後,天,我竟看不出我的字體在Netscape(4.61)與StarOffice 5.1中有什麼差別。“怎麼了?”我想。在浪費了許多時間與不停的詛咒後,我最終決定轉向RTFM。但沒用。如果你已知道xfs如何工作,那麼xfs手冊頁當然很好,但它竟連配置文件在哪兒都不告訴你(提示:/etc/X11/fs/config)。
我的第一個問題是,chkfontpath(8)確實將新字體路徑添加到xfs配置文件了,但如果你的機器配置為使用到你的字體目錄的直接路徑,它並不修改任何東西。這就是我的遭遇。

修改你的FontPath以便它使用xfs——第一部分
我要做的第一件事是讓X和我的字體服務器對話。雖然我的RedHat配置成xfs自動啟動,但我的X看來並未和它對話。事實上,我用lsof(8)試著找出xfs在聽哪個端口,它居然什麼端口也沒有聽。這可能顯示了我對xfs的無知,我的/etc/rc.d/init.d/xfs中xfs啟動行是這樣的:
daemon --check xfs su xfs -c \"xfs -port -1\" -s /bin/sh
xfs手冊頁描述端口選項為讓xfs服務器聽的端口。端口“-1”聽來似乎不對頭,或許它是我所不熟悉的什麼的縮寫(請糾正,別客氣),於是,我將xfs的端口設置為標准端口7100:
daemon --check xfs su xfs -c \"xfs -port -1\" -s /bin/sh (譯注:原文如此)
然後我以root重啟xfs(/etc/rc.d/init.d/xfs重啟)。好極了—xfs運行如我所願,可是為什麼我的字體在重啟X並登錄後並未更好看一些呢?

讓X和xfs服務器對話
看來我的xfs雖然很樂意服務,可是我的X服務器不去聽它。我有一個IBM Thinkpad 760e,知道配置X的痛苦。因此我保存了我的XF86Config文件的一個副本,而非每次試著去猜一個新配置(雖然Linux Mandrake這方面的能力給我很深映象)。我的舊XF86Config文件沒有任何與xfs服務器對話引用,我不得不手工編輯。這對你可能有用,也可能沒有,但對我來說還是有用的。
這是編輯前的舊節:
Section "Files"
RgbPath "/usr/X11R6/lib/X11/rgb"
FontPath "/usr/X11R6/lib/X11/fonts/misc/"
FontPath "/usr/X11R6/lib/X11/fonts/75dpi/:unscaled"
FontPath "/usr/X11R6/lib/X11/fonts/100dpi/:unscaled"
FontPath "/usr/X11R6/lib/X11/fonts/Type1/"
FontPath "/usr/X11R6/lib/X11/fonts/Speedo/"
FontPath "/usr/X11R6/lib/X11/fonts/75dpi/"
FontPath "/usr/X11R6/lib/X11/fonts/100dpi/"
FontPath "/usr/X11R6/lib/X11/fonts/cyrillic/"
FontPath "/usr/local/lib/X11/fonts/Type1/"
EndSection
我只是簡單地在這個文件裡加了一個到字體服務器的引用,並且不在本地目錄裡找字體:
Section "Files"
RgbPath "/usr/X11R6/lib/X11/rgb"
FontPath "tcp/localhost:7100"
EndSection
簡單多了,是吧?可是事實證明還有不止一個要修改的地方。

最後的稻草
我有許多字體,其實有許多看來是多余的,某天我會處理掉它們的。我的問題是X字體服務器會按xfs配置文件裡列出的順序過一遍列出的路徑。如果我指定一種特定字模的字體(a particular font from a particular foundry),這當然很好,但我只是簡單地說,我要“Helvetica”字體,它會給我一個最先找到的“Helvetica”字體——而我希望它先找到TrueType字體。
當我用chkfontpat添加Windows字體路徑時,我簡單地將新目錄加到字體路徑表的末尾。結果和我期望的相反。

# 尋找字體的地方
# 有一些被注釋掉了,例如在/usr/share中的TrueType與Type1目錄,因為它們不必強行隨X一起安裝。
#
catalogue = /usr/X11R6/lib/X11/fonts/misc,
/usr/X11R6/lib/X11/fonts/75dpi,
/usr/X11R6/lib/X11/fonts/100dpi,
/usr/X11R6/lib/X11/fonts/Type1,
/usr/X11R6/lib/X11/fonts/Speedo,
/usr/local/lib/X11/fonts/Type1,
/usr/X11R6/lib/X11/fonts/misc:unscaled,
/usr/X11R6/lib/X11/fonts/100dpi:unscaled,
/usr/X11R6/lib/X11/fonts/75dpi:unscaled,
/dos/windows/fonts
於是,為了得到我想要的結果,我簡單地修改了字體的順序:

# 尋找字體的地方
# 有一些被注釋掉了,例如在/usr/share中的TrueType與Type1目錄,因為它們不是隨X強行安裝的。
#
catalogue = /dos/windows/fonts,
/usr/X11R6/lib/X11/fonts/misc,
/usr/X11R6/lib/X11/fonts/75dpi,
/usr/X11R6/lib/X11/fonts/100dpi,
/usr/X11R6/lib/X11/fonts/Type1,
/usr/X11R6/lib/X11/fonts/Speedo,
/usr/local/lib/X11/fonts/Type1,
/usr/X11R6/lib/X11/fonts/misc:unscaled,
/usr/X11R6/lib/X11/fonts/100dpi:unscaled,
/usr/X11R6/lib/X11/fonts/75dpi:unscaled

終於成功了。

戲劇性的結果
對看到這一切的我們來說,結果好極了。

這是捕捉的一份StarOffice2文檔的部分畫面,有兩行:第一行使用TrueType型"Times New Roman"字體,第二行用了非TrueType的"Times"字體。

1.注:有些人並不花錢買軟件,但我的另一個分區確實有一份合法的Windows拷貝。我盡量為我所有的軟件付帳,即使它來自微軟。Fair is fair—我只希望物有所值。

2.本文全部用StarOffice 5.1打出來——老實說還不錯。HTML裡有太多無用的標記,但我想我得試試。我在Viper模式通常用Emacs。

參考文章:

讓GNU/Linux下的StarOffice的字體好看起來
by Zubin D. Dittia ([email protected])

我最近從Sun的Web主頁(http://www.sun.com/staroffice/)下載了StarOffice,成功地安裝在我的紅帽子6.0上。這套Office看起來真漂亮,它的演示工具甚至比Ms Office的Powerpoint還好,但是字體看起來髒而丑,讓人很不舒服。
很明顯,原因是XFree86現在還不支持TrueType字體。我知道,TrueType字體以曲線存儲了字體的描述而非位圖,因而可以很好地拉大縮小。X的未來版本即將支持TrueType字體,可是遠水救不了近火。
我發現至少有一個web頁在修正這個問題上非常有幫助:http://www.mindspring.net/~john_mcl/adding_fonts.html,作者是John Mclaughlin ([email protected])。盡管我按描述的步驟來有點問題,不過在花了點力氣後我終於能讓字體正確工作了。本頁描述了我的步驟,注意我僅在紅帽子6.0下測試過,在其他GNU/Linux發行版本下可能要做點修改。
Dan Kegel後來引我到他的Web頁(http://www.kegel.com/linux/tt.html),那裡有一個更簡單的法子讓字體在紅帽子6.0下正確工作。
我後來還聽Aaron Bredon說至少紅帽子發行版已經包括了對TrueType字體的支持,那麼你可以一步取代下面的第3~13步:只需編輯文件/etc/X11/fs/config,加入TrueType字體目錄,再運行/etc/rc.d/init.d/xfs restart。
這個法子我沒試過,不過我希望大家試一試,實在不行再回到下面的冗長的步驟來。
你得想盡法子從許多地方得到幾種不同的源代碼發行版,為簡單起見,我已將各種包的最新版本(99.9.4)打包在一起,你可下載:http://king.ccrc.wustl.edu/~zubin/fontstuff.tgz。下載會省你的事,但我沒計劃不斷地更新它,如果你要各個包的最新最強版本,你得自己到下面提到的地址下載。

第一步
$ cd /usr/X11R6/lib/X11/fonts
$ mkdir tt_fonts
$ cd tt_fonts
$ cp /dos/windows/fonts/*.ttf .
(用你的Windows目錄所在分區取代/dos,例如,/mnt/dos)

注:很不幸,不能免費得到一套好的TrueType字體。我只能假設你能弄到MS Windows使用的字體,我們後面要用它。你若沒有Windows,你可從他們的web頁得到一些免費的MS字體:http://www.microsoft.com/typography/fontpack/default.htm。你也可從web上的其他地方找到其他很好的TrueType字體,到這個URL看看一個免費字體的web地址列表:http://www.dcs.ed.ac.uk/home/jec/programs/xfsft/fonts.html。

第二步
弄到ttfmkdir(http://www.darmstadt.gmd.de/~pommnitz/xfsft.html),在tt_fonts目錄下運行它。紅帽子Linux的/usr/sbin下已經安裝了一個,所以我們無需去弄。
$ /usr/sbin/ttmkfdir > fonts.dir
你可忽略任何錯誤消息,或者如果你願意,你盡可刪除所有引起錯誤的字體文件,重新運行ttfmkdir。

第三步
從http://quadrant.netspace.net.au/ttf2pt1/弄到ttf2pt1。我用的版本在文件ttf2pt1-311.tgz?
$ cd /usr/local/src
$ tar xvfz ttf2pt1-311.tgz
$ cd ttf2pt1-311
在該目錄下編輯Makefile,注釋掉它聲明要注釋掉的兩行。運行make:
$make
生成三個二進制文件:t1asm,ttf2pfa和ttf2pt1

第四步
從http://www.moisty.org/linux/ttf.html下載ttfutils發行版,我用的版本在文件ttfutils-0.1.tar.gz。
$ cd /usr/local/src
$ tar xvfz ttfutils-0.1.tar.gz

第五步
執行下列命令:
$ setenv PATH ${PATH}:/usr/local/src/ttf2pt1-311
$ setenv PATH ${PATH}:/usr/local/src/ttfutils-0.1
$ cd /usr/X11R6/lib/X11/fonts/tt_fonts
$ ttf2type1 *.ttf
該命令會輸出一大堆關於字型和編碼的東西,還會花一點時間。你盡可忽略所有的輸出。

第六步
按連接http://www.dcs.ed.ac.uk/home/jec/programs/xfsft/所示得到xfsft。我是從ftp://ftp.dcs.ed.ac.uk/pub/jec/programs/xfsft/下載的預編譯了的Linux版本,文件名xfsft-1.1.6.linux-i386-libc6.tar.gz。
將包安裝到/usr/local/src:
$ cd /usr/local/src
$ tar xvfz xfsft-1.1.6.linux-i386-libc6.tar.gz
$ rm xfsft-1.1.6.linux-i386-libc6.tar.gz

第七步
創建到二進制可執行文件的符號連接:
$ cd /usr/local/bin
$ ln -s ../src/xfsft-1.1.6/xfs xfsft

第八步
$ mkdir /etc/X11/xfsft
創建一個配置文件/etc/X11/xfsft/xfsft.conf,文件內容應該為:
# sample font server configuration file
#
# allow a max of 10 clients to connect to this font server
client-limit = 10
# when a font server reaches its limit, start up a new one
clone-self = on
# where to look for fonts
# the first is a set of Speedo outlines, the second is a set of
# misc bitmaps and the last is a set of 100dpi bitmaps
#
catalogue = /usr/X11R6/lib/X11/fonts/tt_fonts
# in 12 points, decipoints
default-point-size = 120
# 100 x 100 and 75 x 75
default-resolutions = 100,100,75,75
use-syslog = off

第九步
創建文件/etc/rc.d/init.d/xfsft,文件內容應為:
#!/bin/sh
#
# xfsft: Starts the X Font Server for TrueType fonts
#
# Version: @(#) /etc/rc.d/init.d/xfsft 1.0
#
# chkconfig: 2345 90 10
# description: Starts and stops the X TrueType Font Server (xfsft) at boot time and shutdown.
#
# processname: xfsft
# config: /etc/X11/xfsft/xfsft.conf
# hide: true

# Source function library.
. /etc/rc.d/init.d/functions

# See how we were called.
case "$1" in
start)
echo -n "Starting X TrueType Font Server (xfsft): "
daemon --check xfsft /bin/sh -c \"/usr/local/bin/xfsft -config /etc/X11/xfsft/xfsft.conf -port 7100 2\>1 \> /dev/null \&\"
touch /var/lock/subsys/xfsft
echo
;;
stop)
echo -n "Shutting down X TrueType Font Server (xfsft): "
killproc xfsft
rm -f /var/lock/subsys/xfsft
echo
;;
status)
status xfsft
;;
restart)
echo -n "Restarting X TrueType Font Server (xfsft): "
if [ -f /var/lock/subsys/xfsft ]; then
killproc xfsft -USR1
else
daemon --check xfsft /bin/sh -c \"/usr/local/bin/xfsft -config /etc/X11/xfsft/xfsft.conf -port 7100 2\>1 \> /dev/null \&\"
touch /var/lock/subsys/xfsft
fi
echo
;;
*)
echo "*** Usage: xfsft {start|stop|status|restart}"
exit 1
esac

exit 0

第十步
試著啟動xfsft字體服務器:
$ cd /etc/rc.d/init.d
$ chmod +x xfsft
$ ./xfsft start
你應該看見一條類似的消息為:

Starting X TrueType Font Server (xfsft): [OK]

若你運行“ps -auxwww | grep xfsft”,應該可看到xfsft進程在運行。
若該進程未啟動,或腳本掛起,或輸出一個失敗消息,不必進行下面的步驟,直到你找到並解決了問題。

第十一步
在rcN.d目錄下創建一個符號連接到你剛創建的文件,xfsft就可在啟動時自動啟動了:
$ cd /etc/rc.d/rc0.d
$ ln -s ../init.d/xfsft K10xfsft
$ cd ../rc1.d
$ ln -s ../init.d/xfsft K10xfsft
$ cd ../rc2.d
$ ln -s ../init.d/xfsft S90xfsft
$ cd ../rc3.d
$ ln -s ../init.d/xfsft S90xfsft
$ cd ../rc4.d
$ ln -s ../init.d/xfsft S90xfsft
$ cd ../rc5.d
$ ln -s ../init.d/xfsft S90xfsft
$ cd ../rc6.d
$ ln -s ../init.d/xfsft K10xfsft

第十二步
編輯你的X配置文件(通常是/etc/X11/XF86Config),給出新字體的路徑。找到一行看來像
FontPath "unix/:-1"
修改該行為
FontPath "tcp/localhost:7100,unix/:-1"

第十三步
重啟機器,重啟時應有一條OK信息類似於:
Starting X TrueType Font Server (xfsft): [OK]

第十四步
好了——試著啟動StarOffice或其他使用很多字體的應用,你會立刻看到字體的改進,尤其是在較大字體尺寸時。

注:若X服務器在第十四步中不能啟動,你可通過改回舊的FontPath關閉xfsft。你或許還想刪除你在/etc/rc.d/rcN.d目錄創建的連接。你可按Ctrl-Alt-F1進入登錄提示符以進行修改——如果不行,重啟Linux進入單用戶模式(在LILO提示符下鍵入linux single)再改。


——摘自:Linux Today
相關鏈接: http://www.kegel.com/linux/tt.html


Copyright © Linux教程網 All Rights Reserved