LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 6050|回复: 15

Gentoo + fvwm 中文化心得

[复制链接]
发表于 2005-11-29 20:21:29 | 显示全部楼层 |阅读模式
折腾了3天,终于有个比较令人满意的结果,现在把我的心得整理了一下,与大家分享。
感谢那些帮助过我的朋友们,看了不少前辈们写下的帖子,也向他们表示感谢!


我使用的环境是Gentoo + xorg + fvwm (emegre的最新版)

关于xorg和fvwm的安装就不多说了!

1) 设置xorg.conf

   确认使用了:
      load  "type1"
         load  "truefree" //这个很重要
      load  "freetype"

   一定要注释掉
      #load  "xtt"
      应为这个设置与truefree冲突

2) 拷贝字体

   首先把你使用的字体拷贝到一个特定的目录(我的是/usr/local/share/fonts)
   我使用的字体是simsun(直接从Windows得到)和Vera Sans YuanTi(从linux公社下载)

   a)配置 Core 字体
     (主要是对应-misc-SimSun-medium-r-normal--0-0-0-0-c-0-gb2312.1980-0这样的设定)
     强烈推荐运行 ttmkfdir 生成字体描述文件,而不要使用mkfontdir和mkfontscale,应为它
     生成的字体描述文件中常常找不出gbk的encoding。
     执行:
     ttmkfdir /usr/local/share/fonts/ -o /usr/local/share/fonts/fonts.dir
     cp /usr/local/share/fonts/fonts.dir /usr/local/share/fonts/fonts.scale
     
     也许你不明白-*-SimSun-medium-r-normal--0-0-0-0-c-0-gb2312.1980-0是怎么定的,显示效果怎样?
     其实要弄明白这个问题也很简单,只需要在XWindows下运行
     # xfontsel
     会出来一个图形化的设定界面,很简单的。

   b)配置 Xft 字体
     (主要是对应Font "xft:Tahoma:Medium:Size=12:encoding=iso8859-1"这样的设定)
     这步就简单了,fc-cache -fv 就会自动把字体加入到了列表
     判断安装的字体是否能被使用只需运行
     # fc-list
     只要列出来的字体都可以在xft中使用


3)设置/etc/fonts/local.conf

  我的设置如下:


  1. <?xml version="1.0"?>
  2. <!DOCTYPE fontconfig SYSTEM "fonts.dtd">
  3. <!-- conf.d/myfont.conf -->
  4. <fontconfig>
  5. <dir>/usr/local/share/fonts</dir> <!-- 我使用的字体放在这个目录 -->
  6. <dir>/usr/share/fonts/local</dir>
  7. <dir>/usr/local/share/fonts</dir>
  8. <dir>~/.fonts</dir>
  9. <dir>/usr/X11R6/lib/X11/fonts</dir>

  10. <!--  
  11. 配置粗体中文显示,要配合freetype-2.1.10,libxft-2.1.7,fontconfig-2.3.X
  12.   -->

  13.      <match target="font">
  14.          <!-- check to see if the font is just regular -->
  15.          <test name="weight" compare="less_eq">
  16.              <int>100</int>
  17.          </test>
  18.          <!-- check to see if the pattern requests bold -->
  19.          <test target="pattern" name="weight" compare="more_eq">
  20.              <int>180</int>
  21.          </test>
  22.          <!-- set the embolden flag -->
  23.          <edit name="embolden" mode="assign">
  24.              <bool>true</bool>
  25.          </edit>
  26.      </match>

  27. <!--
  28.         default settings for all fonts.
  29. -->
  30. <match target="font" >
  31. <!-- 打开字体的反锯齿即AA,大号字用AA会更美观   -->
  32.                 <edit mode="assign" name="antialias" >
  33.                         <bool>t</bool>
  34.                 </edit>
  35.                 <edit mode="assign" name="hintstyle" >
  36.                         <const>hintslight</const>
  37.                 </edit>
  38. <!-- 打开hint  -->
  39.                 <edit mode="assign" name="hinting" >
  40.                         <bool>t</bool>
  41.                 </edit>
  42. <!-- 关闭autohint  -->
  43.                 <edit mode="assign" name="autohint" >
  44.                         <bool>false</bool>
  45.                 </edit>
  46. </match>


  47. <!-- 关闭 8到17号字体的AA -->
  48. <match target="font" >
  49.                 <!--
  50.                 <test compare="contains" name="lang" >
  51.                         <string>zh-cn</string>
  52.                         <string>zh-tw</string>
  53.                         <string>ja</string>
  54.                         <string>ko</string>
  55.                 </test>
  56.                 -->
  57.                 <test compare="more_eq" name="pixelsize" qual="any" >
  58.                         <double>8</double>
  59.                 </test>
  60.                 <test compare="less_eq" name="pixelsize" qual="any" >
  61.                         <double>17</double>
  62.                 </test>
  63.                 <edit mode="assign" name="antialias" >
  64.                         <bool>false</bool>
  65.                 </edit>
  66. </match>

  67. <!-- 解决英文字体间距过宽 -->
  68. <match target="font">

  69.                 <test target="pattern" name="lang" compare="contains">
  70.                         <string>zh-tw</string>
  71.                         <string>zh-cn</string>
  72.                         <string>ja</string>
  73.                         <string>ko</string>
  74.                 </test>
  75.                 <edit name="spacing">
  76.                         <const>proportional</const>
  77.                 </edit>
  78.                 <edit name="globaladvance">
  79.                 <bool>false</bool>
  80.                 </edit>
  81. </match>

  82. <!--
  83. 设定中文最小字号,使得小字的中文美观
  84. -->
  85.   <match target="font" >
  86.         <test name="family" qual="any" >
  87.                 <string>SimSun</string>
  88.                 <string>NSimSun</string>
  89.                 <string>Vera Sans YuanTi</string>
  90.                 <string>Vera Sans YuanTi Mono</string>
  91.                 <string>SimHei</string>
  92.                 <string>AR PL ShanHeiSun Uni</string>
  93.                 <string>AR PL ZenKai Uni</string>
  94.                 <string>AR PL New Sung</string>
  95.                 <string>FZSongTi</string>
  96.                  <string>FZMingTiB</string>
  97.                 <string>FangSong_GB2312</string>
  98.                 <string>KaiTi_GB2312</string>
  99.         </test>
  100.         <test compare="more_eq" name="pixelsize" >
  101.                 <int>8</int>
  102.         </test>
  103.         <test compare="less_eq" name="pixelsize" >
  104.                 <int>12</int>
  105.         </test>
  106.         <edit compare="eq" name="pixelsize" >
  107.                 <int>12</int>
  108.         </edit>
  109. </match>
  110. <!--
  111.   把serif ,sans,monospace的family(字体族)重新排序,适应中文用户的用字习惯
  112. -->
  113.    <alias>
  114.       <family>serif</family>
  115.       <prefer>
  116.          <family>Times New Roman</family>
  117.          <family>Nimbus Roman No9 L</family>
  118.          <family>Luxi Serif</family>
  119.          <family>Times</family>
  120.          <family>Bitstream Vera Serif</family>
  121.          <family>Simsun</family>
  122.          <family>Vera Sans YuanTi</family>
  123.          <family>Vera Sans YuanTi Mono</family>
  124.          <family>WenQuanYi Bitmap Song</family>
  125.          <family>AR PL ShanHeiSun Uni</family>
  126.          <family>AR PL ZenKai Uni</family>
  127.          <family>AR PL New Sung</family>
  128.          <family>FZSongTi</family>
  129.          <family>FZMingTiB</family>
  130.          <family>Kochi Mincho</family>
  131.          <family>AR PL SungtiL GB</family>
  132.          <family>AR PL Mingti2L Big5</family>
  133.          <family>Baekmuk Batang</family>
  134.       </prefer>
  135.    </alias>
  136.    <alias>
  137.       <family>sans-serif</family>
  138.       <prefer>
  139.          <family>Helvetica</family>
  140.          <family>Verdana</family>
  141.          <family>Arial</family>
  142.          <family>Tahoma</family>
  143.          <family>Bitstream Vera Sans</family>
  144.          <family>SimSun</family>
  145.          <family>Vera Sans YuanTi</family>
  146.          <family>Vera Sans YuanTi Mono</family>
  147.          <family>WenQuanYi Bitmap Song</family>
  148.          <family>AR PL ShanHeiSun Uni</family>
  149.          <family>AR PL ZenKai Uni</family>
  150.          <family>AR PL New Sung</family>
  151.          <family>FZSongTi</family>
  152.          <family>FZMingTiB</family>
  153.          <family>Kochi Gothic</family>
  154.          <family>AR PL KaitiM GB</family>
  155.          <family>AR PL KaitiM Big5</family>
  156.          <family>Baekmuk Dotum</family>

  157.       </prefer>
  158.    </alias>
  159.    <alias>
  160.       <family>monospace</family>
  161.       <prefer>
  162.          <family>Courier</family>
  163.          <family>Courier New</family>
  164.          <family>Andale Mono</family>
  165.          <family>Luxi Mono</family>
  166.          <family>Nimbus Mono L</family>
  167.          <family>Bitstream Vera Sans Mono</family>
  168.          <family>NSimSun</family> <!-- han (zh-cn,zh-tw) -->
  169.          <family>Vera Sans YuanTi</family>
  170.          <family>Vera Sans YuanTi Mono</family>
  171.          <family>WenQuanYi Bitmap Song</family>
  172.          <family>AR PL ShanHeiSun Uni</family>
  173.          <family>AR PL ZenKai Uni</family>
  174.          <family>AR PL New Sung</family>
  175.          <family>FZSongTi</family>
  176.          <family>FZMingTiB</family>
  177.          <family>Kochi Gothic</family>
  178.          <family>AR PL KaitiM GB</family>
  179.          <family>Baekmuk Dotum</family>
  180.       </prefer>
  181.    </alias>

  182. </fontconfig>

复制代码


4)设置中文环境

   编辑 /etc/env.d/100i18n 如以下内容(如没有该文件就创建它):
   代码:

  1.        # /etc/env.d/100i18n
  2.        CONSOLE_NOT_LOCALIZED=yes
  3.        ENC=gb
  4.        LANGUAGE=en_US.UTF-8:en_US:en:zh_CN:zh_CN.GBK:zh_CN.UTF8
  5.        LANG=zh_CN
  6.        LC_CTYPE=zh_CN
  7.        LC_NUMERIC=zh_CN
  8.        LC_TIME=zh_CN
  9.        LC_COLLATE=zh_CN
  10.        LC_MONETARY=zh_CN
  11.        LC_MESSAGES=zh_CN
  12.        LC_PAPER=zh_CN
  13.        LC_NAME=zh_CN
  14.        LC_ADDRESS=zh_CN
  15.        LC_TELEPHONE=zh_CN
  16.        LC_MEASUREMENT=zh_CN
  17.        LC_IDENTIFICATION=zh_CN
  18.        LC_ALL=zh_CN
复制代码

  我是只喜欢英文界面+中文输入支持,如果你要完全中文化只需要:
    代码:
       LANG=zh_CN.gbk
       LC_ALL=zh_CN.gbk
  两行就可以了。  

  然后执行代码:
  # env-update
  # source /etc/profile
  使设置生效(如果你按照完整设置,那么有些程序,如gvim,xchm,就会直接变成中文版)
  
  简单介绍一下LC_ALL、LANG、LC_CTYPE

  中文表示变量, 这个只需要设置LANG或LC_ALL或LC_CTYPE中之一就可以,
  其中LC_ALL范围最大, 表示全部使用这个local, LANG次之, 只表示使用语言,
  LC_ CTYPE影响范围最小, 只定义使用的字符种类
  如果你的LANG或是LC_ALL或LC_CTYPE不是某个中文的, 那设置下面内容
  (只需要在LANG, LC_CTYPE, LC_ALL中选择一项就可以,UTF8可以修改成其它的中文, 如GB2312等,)

  export LC_ALL=zh_CN.UTF-8 #设置全部使用中文, 或
  export LANG=zh_CN.UTF-8 # 设置使用中文语言, 或
  export LC_CTYPE=zh_CN.UTF8 #设置只是想使用中文输入法, 其它语言还是英文的
  #上面只需要设置一个就可以




5)基于gtk1的app

你的gtk1程序已经可以使用字体了,但是在gtk1程序里当然还要指定你究竟要使用什么字体。对gtk1程序使用什么字体有一个全局配置文件/etc/gtk/gtkrc.zh_CN
把我的配置文件贴一下

  1. style "gtk-default-zh-cn" {
  2. fontset = "-*-bitstream vera sans-medium-r-normal-*-*-120-*-*-p-*-microsoft-cp1252,\
  3. -*-simsun-medium-r-normal-*-12-*-*-*-*-*-gbk-0"
  4. }
  5. class "GtkWidget" style "gtk-default-zh-cn"
复制代码

6)基于gtk2的app

gtk2程序的全局配置文件是/etc/gtk-2.0/gtkrc
也把我的内容贴上来


  1. style "user-font" {
  2. font_name="Vera Sans YuanTi 9"
  3. }
  4. class "*" style "user-font"
复制代码

7)fvwm设定
  a)使用core字体
     Font  "-*-Vera Sans YuanYi Mono-medium-r-normal-*-16-*-*-*-*-*-iso8859-*,-*-simsun-medium-r-normal-*-18-*-*-*-*-*-*-*"
     需要注意的有2点:
     1)一定要使用(")引号,尤其是当你使用和我一样的字体-字体的名字中间含有空格,否则系统将无法加载你定义的字体
     2)大家可能也已经注意到,我使用了2个字体,一个对应“英文”,第二个对应“中文”,我在这个地方吃过大亏,总以为定义一个包含有中文/英文的字体就可以搞定一切,实际上还是需要一个中文/一个英文
     

  b)使用xft
    Style * Font "Shadow=1 1:StringEncoding=gbk-0:xft:Vera Sans YuanTi Mono:Medium:pixelsize=12:minspace=True:encoding=iso10646-1"
    需要注意的是StringEncoding=gbk-0和encoding=iso10646-1一个也不能少,否则中文将会变成乱码,至于这个码值具体设置多少,则要依照你机器上安装的字体而定
8)中文输入法

   在~/.xinit中设定

  1. export XMODIFIERS="@im=scim"
  2. export XIM=fcitx
  3. scim -d &
  4. fvwn2
复制代码

**************************
终于写完了,就这么多了,难免有错误的地方,而且大家使用的环境多少有些不同,还请大家批判的接受!
发表于 2005-11-29 20:25:37 | 显示全部楼层
楼上的 太爱你了
正好是我想了解的
回复 支持 反对

使用道具 举报

发表于 2005-11-29 20:27:52 | 显示全部楼层
load "truefree" //如果要使用xft,这个很重要

这个就先错了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-11-29 20:34:02 | 显示全部楼层

请您纠正一下

Post by troll
load "truefree" //如果要使用xft,这个很重要

这个就先错了

在我的机器上就是因为没有加上load "truefree" 而使我无法用xft,其中的原因我也不清楚,还请这位大侠纠正一下!

谢谢!
回复 支持 反对

使用道具 举报

发表于 2005-12-22 17:22:03 | 显示全部楼层
Post by lingice
a)配置 Core 字体
(主要是对应-misc-SimSun-medium-r-normal--0-0-0-0-c-0-gb2312.1980-0这样的设定)
强烈推荐运行 ttmkfdir 生成字体描述文件,而不要使用mkfontdir和mkfontscale,应为它
生成的字体描述文件中常常找不出gbk的encoding。
执行:
ttmkfdir /usr/local/share/fonts/ -o /usr/local/share/fonts/fonts.dir
cp /usr/local/share/fonts/fonts.dir /usr/local/share/fonts/fonts.scale

也许你不明白-*-SimSun-medium-r-normal--0-0-0-0-c-0-gb2312.1980-0是怎么定的,显示效果怎样?
其实要弄明白这个问题也很简单,只需要在XWindows下运行
# xfontsel
会出来一个图形化的设定界面,很简单的。

楼主所谓的core字体,我捣鼓了一个月也没解决,反正用遍了所有论坛的所有字体设置方法,就是没有用,反正用xfontsel或者xlsfonts都看不到中文字体的身影。中文字体我用过的有simsun、3n's_YuanTi、WenQuanYi Bitmap Song。
有一回算是最好的,在xfontsel中看到了园体,但xmms中死活显示不出来,而且因为字体的缘故,造成xawtv(电视卡)启动不了。
反复mkfontsdir、mkfontscale、ttmkfdir,无论怎么改,就是没用,气得我想砸机子!
我觉得自己还有一个关键的地方没做好,但关键在哪里,却不知道。从目前网上搜集的信息和自己的理解来说,gtk1程序的字体跟xorg.conf、fonts.dir、fonts.scale有关,但他们到底有什么关联,是如何在一起工作的,到现在为止还不是很了解。
Post by 网上看到这样的解释……

1.GTK1的程序是不支持Fontconfig的。所以有点麻烦。拿到一个字体,你首先要让X找到它对吧?这一步就是在 /etc/X11/XF86config的Section "files"段里面的Fontpath属性里说明的详细后面会讲。好了,X现在知道字体在哪里了。那gtk1的程序还不能直接使用它们,因为我们还没有给它们"注册",这就需要在前面设定的Fontpath里生成两个文件fonts.dir fonts.scale这两个文件里有Fontpath下所有字体的列表信息,就是一个"索引"。有了这个"索引",gtk1的程序就可以找到相应的字体了。生成这两个文件的工具有mkfontdir,mkfontscale,ttmkfdir等等。好了,上面两步如果正确完成了,你的gtk1程序现在就可以正常显示汉字了。
常见的gtk1程序有xmms,gimp.....  

如果这段话是正确的,那么我所有的工作应该都到位了,为什么中文仍显示不出来?是不是还有一个重要方面是没有提到的呢?
还请在这方面有研究的大虾指点迷津,不胜感激。
回复 支持 反对

使用道具 举报

发表于 2005-12-22 18:23:38 | 显示全部楼层
暴晕,Linux下设个字体原来这么麻烦啊?为什么不会学Windows那样,只要把字体拷到fonts文件夹下系统就自动认?
回复 支持 反对

使用道具 举报

发表于 2005-12-22 20:31:15 | 显示全部楼层
本人绝对是把字体拷贝进目录就OK了,不论在debian下还是gentoo中。
只不过要配置好字体,让界面漂亮是另一回事情。
回复 支持 反对

使用道具 举报

发表于 2005-12-22 23:23:15 | 显示全部楼层
在一般的程序中是没有问题的,在xtem和firefox中都正常,gnome的字体选项也能够识别。
但是最近想换到fvwm,似乎就有些问题了。
xmms和rxvt中都无法显示中文,让人郁闷的紧。
回复 支持 反对

使用道具 举报

发表于 2005-12-23 00:46:34 | 显示全部楼层
我的问题是 core font server 在处理中文字体的时候总是crash,郁闷。不过我不用xmms(用audacious),所以没关系,也几乎没什么地方用到 core font server的了。不过gtk的程序要用。

至于要用到core font server的程序,都只用英文。
回复 支持 反对

使用道具 举报

发表于 2005-12-23 03:14:34 | 显示全部楼层
Post by zhou3345
在一般的程序中是没有问题的,在xtem和firefox中都正常,gnome的字体选项也能够识别。
但是最近想换到fvwm,似乎就有些问题了。
xmms和rxvt中都无法显示中文,让人郁闷的紧。

xmms的字体你是怎么设置的?像这样吗?

-artwiz-aqui-medium-r-bold-*-*-110-*-*-p-*-iso8859-1,-misc-simsun-medium-r-normal-*-*-120-*-*-c-*-gbk-0


我以前也一直用rxvt,但是现在觉得mrxvt比它方便太多了。贴一下我的配置,你可以把它存为home下的.mrxvtrc文件。


  1. mrxvt*multichar_encoding:       gb2312
  2. mrxvt*borderLess:               true
  3. //mrxvt*xftmFont:               Bitstream Vera Sans Mono
  4. mrxvt*mfont:        -*-simsun-medium-r-*-*-6-*-*-*-*-*-*-*
  5. mrxvt*mfontn:       -*-simsun-medium-r-*-*-6-*-*-*-*-*-*-*
  6. mrxvt*textShadow:               black
  7. //mrxvt*opacity:                15
  8. mrxvt*hotkey*NewTab:            Ctrl+t
  9. mrxvt*hotkey*KillTab:           Ctrl+Alt+a
  10. mrxvt*hotkey*LeftMoveTab:       Ctrl+Left
  11. mrxvt*hotkey*RightMoveTab:      Ctrl+Right
  12. mrxvt*OpacityDegree:            1
  13. mrxvt*initTermNumber:           1
  14. mrxvt*protectSecondary:         true
  15. mrxvt*loginShell:               true
  16. mrxvt*scrollBar:                true
  17. mrxvt*transparent:              true
  18. mrxvt*transparentScrollbar:     true
  19. mrxvt*transparentTabbar:        true
  20. mrxvt*transparentMenubar:       false
  21. !mrxvt*foreground:              darkgray
  22. !mrxvt*background:              white
  23. mrxvt*foreground:               white
  24. mrxvt*background:               gray19
  25. mrxvt*backgroundFade:           60
  26. mrxvt*fading:                   1
  27. !mrxvt*tintColor:               gray15
  28. mrxvt*textShadow:               black
  29. mrxvt*textShadowMode:           botright
  30. !mrxvt*tabForeground:           black
  31. !mrxvt*tabBackground:           white
  32. !mrxvt*itabForeground:          black
  33. !mrxvt*itabBackground:          white
  34. mrxvt*tabForeground:            white
  35. mrxvt*tabBackground:            black
  36. mrxvt*itabForeground:           gray
  37. mrxvt*itabBackground:           gray15
  38. mrxvt*tabPixmap:                false
  39. mrxvt*syncTabTitle:             true
  40. mrxvt*hideTabbar:               false
  41. mrxvt*bottomTabbar:             true
  42. mrxvt*windowsSwitch:            false
  43. mrxvt*showMenu:                 false
  44. mrxvt*hideButtons:              true
  45. mrxvt*xft:                      true
  46. mrxvt*xftFont:                  Bitstream Vera Sans Mono

  47. mrxvt*xftAntialias:             true
  48. mrxvt*xftWeight:                normal
  49. mrxvt*xftSlant:                 roman
  50. mrxvt*xftHinting:               true
  51. mrxvt*xftAutoHint:              true
  52. mrxvt*xftGlobalAdvance:         true
  53. mrxvt*xftWidth:                 normal
  54. mrxvt*xftRGBA:                  rgb
  55. mrxvt*xftSize:                  10
  56. mrxvt*cursorBlink:              false
  57. !mrxvt*cursorBlinkInterval:     500
  58. mrxvt*geometry:                 80x25
  59. mrxvt*inputMethod:              fcitx
  60. !mrxvt*cursorColor:             white
  61. mrxvt*cursorColor:              lightblue
  62. mrxvt*color0:                   black
  63. mrxvt*color1:                   #40e0d0
  64. mrxvt*color2:                   #87cefa
  65. mrxvt*color3:                   #ffff00
  66. mrxvt*color4:                   #d1eeee
  67. mrxvt*color5:                   #eed8ae
  68. mrxvt*color6:                   #b4eeb4
  69. mrxvt*color7:                   gray
  70. mrxvt*color8:                   gray40
  71. mrxvt*color9:                   #ee6363
  72. mrxvt*color10:                  #c5f779
  73. mrxvt*color11:                  #fff796
  74. mrxvt*color12:                  #00b2ee
  75. mrxvt*color13:                  #cf9ebe
  76. mrxvt*color14:                  #71bebe
  77. mrxvt*color15:                  white
  78. mrxvt.saveLines:                3000

复制代码


记得emerge的时候USE加上 -xgetdefault。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表