Kuye 发表于 2003-3-20 23:41:07

[译]在Phoenix...中启用AA字体

[译] 在Fluxbox,GKrellM,Abiword,Phoenix(或者其他什么的)中启用字体平滑
... <- 标题太长,所以外面的标题截短了。。。______________________________________________________________
这篇文章可能对咱们中国人没什么用,Simsun 笔划太多小字体不好启用字体平滑。不过实在睡不着也不管他那么多了,译就译吧。。。

原文在:http://forums.gentoo.org/viewtopic.php?t=23575
--------------------------------------------------------------------------------------
大家好。

首先,我们需要先安装一些包(当然,XFree 您是事先必须装好的... 我这里运行着 XFree 4.2.1)

(emerge 被 masked 的软件的方法是使用 “emerge /usr/portage/ebuild类型/ebuild名.ebuild” 或者取消它的 Mask)
emerge freetype # 我的版本是: 2.1.2-r1
emerge xft # 我的版本是: 2.0-r1

编辑:"emerge freefonts sharefonts" 以得到更多的 TrueType 字体。
现在编辑您的 /etc/fonts/fonts.conf,加上您的 TureType 字体路径。我的在下面(只修改了第一部分):
<!-- Font directory list configured on Mon Oct 21 20:09:40 UTC 2002 -->

      <dir>/usr/X11R6/lib/X11/fonts</dir>
      <dir>/usr/share/fonts</dir>
      <dir>~/.fonts</dir>

你当然也能试试“启用子像素渲染”(sub-pixel rendering). 它有时能得到更好的字体显示效果。想启用它?把下面的注释删除就行了。
<!--
Enable sub-pixel rendering
-->
      <match target="font">
                <edit name="rgba" mode="assign"><const>rgb</const></edit>
      </match>
(在我的笔记本上,启用子像素渲染后字体的显示效果更好)

Edit: According to Lovechild, sub-pixel rendering only works on landscape formed LCD display. Thanks for the info!

下一步,编辑你的 /etc/X11/XF86Config 并且确认你所有的 字体路径 都在:
FontPath   "/usr/X11R6/lib/X11/fonts/local/"
    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/truetype"
    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/artwiz/" # optional, fluxbox artwiz package :)
现在重新启动 X 吧。

让我们先在 Phoenix 里启用字体平滑,安装好 Phoenix 并且编辑你的 /Phoenix 的安装路径/phoenix/defaults/pref/unix.js 文件。
搜索 TrueType 结并且像下面这样修改它:
// TrueType
pref("font.FreeType2.enable", true);
pref("font.freetype2.shared-library", "libfreetype.so.6");
// if libfreetype was built without hinting compiled in
// it is best to leave hinting off
pref("font.FreeType2.autohinted", false);
pref("font.FreeType2.unhinted", false);
// below a certian pixel size anti-aliased fonts produce poor results
pref("font.antialias.min",0);
pref("font.embedded_bitmaps.max", 1000000);
pref("font.scale.tt_bitmap.dark_text.min", 0);
pref("font.scale.tt_bitmap.dark_text.gain", "0.0");
// sample prefs for TrueType font dirs
pref("font.directory.truetype.1", "/usr/share/fonts/truetype");
pref("font.directory.truetype.2", "/usr/X11R6/lib/X11/fonts/TTF");
pref("font.directory.truetype.3", "/usr/X11R6/lib/X11/fonts/truetype");

保存后启动 Phonix ... 可以看见字体显示效果已经改变了 :)
如果它们看起来很糟糕,试试下面的设置... 对于某些字体它 看起来更好一些:
# Tools -> Preferences -> Fonts and Colors
Proportional: Serif (Size: 16)
Serif: monotype-arial-iso8859-15
Sans-Serif: monotype-arial-iso8859-15
Monospace: monotype-courier new-iso8859-15 (Size: 12)
Minimum font size: 9

Phoenix 现在看起来应该比较完美了 :)

再下一步该到 Fluxbox 了。emerge 一份 Fluxbox(截止发文日期的最新版本是 0.1.13)。如果您在编译时出了一些关于“Xft.h”的“参数错误”(parse errors),用 这个替换 /usr/X11R6/include/X11/Xft/Xft.h 应该就能解决了。
编译完成后,Fluxbox 应该会调用 Xft 2.0 的库了... 可以用 “ldd” 命令检查一下:
bazik@genesis bazik $ ldd /usr/bin/fluxbox
      libSM.so.6 => /usr/X11R6/lib/libSM.so.6 (0x40027000)
      libICE.so.6 => /usr/X11R6/lib/libICE.so.6 (0x40030000)
      libX11.so.6 => /usr/X11R6/lib/libX11.so.6 (0x40047000)
      libXext.so.6 => /usr/X11R6/lib/libXext.so.6 (0x40113000)
      libXft.so.2 => /usr/lib/libXft.so.2 (0x40123000) # <<<<<<<<<<<
      libstdc++.so.5 => /usr/lib/gcc-lib/i686-pc-linux-gnu/3.2/libstdc++.so.5 (0x40139000)
      libm.so.6 => /lib/libm.so.6 (0x40203000)
      libgcc_s.so.1 => /usr/lib/gcc-lib/i686-pc-linux-gnu/3.2/libgcc_s.so.1 (0x40226000)
      libc.so.6 => /lib/libc.so.6 (0x4022e000)
      libgtk-1.2.so.0 => /usr/lib/libgtk-1.2.so.0 (0x40352000)
      libgdk-1.2.so.0 => /usr/lib/libgdk-1.2.so.0 (0x404cb000)
      libgmodule-1.2.so.0 => /usr/lib/libgmodule-1.2.so.0 (0x40506000)
      libglib-1.2.so.0 => /usr/lib/libglib-1.2.so.0 (0x40509000)
      libdl.so.2 => /lib/libdl.so.2 (0x40530000)
      libXi.so.6 => /usr/X11R6/lib/libXi.so.6 (0x40533000)
      libXrender.so.1 => /usr/X11R6/lib/libXrender.so.1 (0x4053b000)
      libfreetype.so.6 => /usr/lib/libfreetype.so.6 (0x40543000)
      libfontconfig.so.1 => /usr/lib/libfontconfig.so.1 (0x4059a000)
      /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)
      libexpat.so.0 => /usr/lib/libexpat.so.0 (0x405c5000)

现在启动 Fluxbox 并且在配置菜单中选择“平滑”选项(Settings -> Configure -> Antialias) 或者在你的 ~/.fluxbox/init 中添加上:
session.screen0.antialias:      true

如果您的字体看起来依然很糟糕,试试修改 Fluxbox 的主题样式(Style)... 如果你找到一个看起来不错的字体,请自行修改样式配置文件并且将该字体拷贝进你最喜欢的主题样式里。你能在 /usr/share/commonbox/style 中找到这些主题样式。一个正常的字体节)(font section)看起来应该像下面的:
session.screen0.antialias:      true

这些是我目前 Fluxbox 主题样式中的字体配置... “gelly”是一种艺术字体而“lucidasans”是一种非AA字体。但我想使用 Xft 字体所以我将它们注释了。

如果我的记忆正确并没有写错的话,你的 Flux 和 Phoenix 看起来应该像这样了:
http://0x1337.net/tmp/flux.png

下一步就是 GTK(version 1.x) 程序了... 你知道的,字体平滑在 Gnome2(GTK2) 程序中默认是打开的,但是一些很大的程序,如 Abiword 和 Gnumeric 并不是真正的 GTK2 程序... 但我们可以利用一个小软件 Hack 它以启用字体平滑!而这个小软件就叫做“gdkxft”
让我们 emerge 它吧:

emerge gdkxft # 我使用的版本是: 1.5

如果您不想安装 gnome 控制中心(gnome-control-center),请修改你的 /usr/portage/x11-libs/gdkxft/gdkxft-1.5.ebuild。
修改下面的第一部分。(它将会导致出一些关于控制中心的错误,但请放心,它依然能工作得很好)
DEPEND="=x11-libs/gtk+-1.2*
      virtual/x11"
#       =gnome-base/control-center-1.4*"

src_compile() {
      CPPFLAGS=./configure \
                --host=${CHOST} \
                --prefix=/usr \
                --infodir=/usr/share/info \
                --mandir=/usr/share/man || die "./configure failed"
      emake || die "compile failed"
}

安装完 gdkxft 后,创建配置文件 /etc/gdkxft.conf:
*
!-urw-*
!-b&h-lucidux*
!-abisource-*
!-abiword-*
!-freefont-*
!-sharefont-*
!-macromedia-*

这里的“i”是注释字符,它和“-”一起表示“该字体不要平滑”,如果没有它们表示“平滑该字体”。你可以看见,我注释了每一行并且去掉了“*”以平滑所有字体。
我英文不行,感觉这里意思翻错了,大家还是看原文吧:
The exclamation mark ("!") is the comment character here. Line with a minus ("-") in front mean "dont antialias", without means "antialias the font". As you can see, I commented each line and just left a asterisk ("*") to antialias every font.

启用 gdkxft,你需要设置 LD_PERELOAD 指向 gdkxft 的路径:
xport LD_PRELOAD=/usr/lib/libgdkxft.so

或者将该路径添加到你的 /etc/ld.so.preload 以始终启用字体平滑效果。

重新启动你的 X 吧,现在你所有的 GTK1.x 应该都据有字体平滑效果了!包括 Abiword! :)
这张截图将展示完成后的效果。

但是如果您现在启动一个 GTK2 程序(如 Gedit)你会得到一个 gdkxft 无法工作于 GTK2 程序的错误。
添加“export LD_PRELOAD”命令到你的 /etc/profile(我在我的 ~/.bashrc 中添加了“source /etc/profile”以确保在不同的终端中它能正常运行):
bazik@genesis scripts $ cat /etc/profile | grep LD_
export LD_PRELOAD=/usr/lib/libgdkxft.so
bazik@genesis scripts $ cat ~/.bashrc
source /etc/profile

我是这样禁用 gdkxft 的:
export LD_PRELOAD=""
(译者注:说实话,我更愿意 unset LD_PRELOAD)

但是我想在 Gedit 中使用字体平滑,所以我写了一个简单的脚本以禁用 gdkxft 并且启用真正的 GTK2 字体渲染器 :) 我现在像使用 charme 一样用这个脚本启动 Gedit。
bazik@genesis scripts $ cat geditxft
#! /bin/bash
export LD_PRELOAD=""
export GDK_USE_XFT=1
gedit &
export GDK_USE_XFT=0
export LD_PRELOAD=/usr/lib/libgdkxft.so

您当然也可以修改这个脚本用其它方法动态启用 gdkxft。我用它是因为我绝大部分程序都是 GTK1 程序只有 Gedit 是 GTK2 程序。

完成了! 如果您还有任何问题,请在后面跟帖!

希望这些能对您有所帮助。
bazik

----------------------------------------------
原文的截图一个都看不了,所以要看截图的话,看下面:
xft.h.good
fluxbox screenshot 1
fluxbox screenshot 2

______________________
总算翻完了,共花一个半小时,效率可真够低的 :(
翻译其实也挺好玩的,以后没事我就找两篇文章来翻译 ;)

英文太差,番茄就不要了,不过如果有钞票扔过来的话我自然是来者不拒地。
:mrgreen:   :mrgreen::mrgreen:
页: [1]
查看完整版本: [译]在Phoenix...中启用AA字体