[daily][archlinux][fonts] 在linux下管理字体

序:

linux是社区搞出来, 商业应用也都是服务器场景。社区里又都是技术人员。字体又是细节。而且会英文早成了标配。所以没有很多社区以外的人力来搞字体这个毫无回报的东西。

结果很自然的,装linux桌面环境的几个问题之一,就包括了字体。与字体相关的一般问题主要就是中文显示问题。搞定了中文之后基本就不影响使用了。然后当你继续使用下去之后,就会出现更高的要求,就是希望为了美观要求而得到了一个好看的字体。

于是就会牵扯出,分辨率,等宽,高清等问题。但是没关系,因为在搞定中文字体的时候,你已经学会了安装各种各样的字体。然后你就开始疯狂的装字体,微软的,苹果的,安卓的。文泉驿的。。。

那么突然问题就来了,你完全没有办法管理他们,也不知道他们的默认和优先关系。某一个时刻你发现,你的字体失控了。

嗯,以上,就是我此刻遇到的问题。我装了多个字体之后,我的thunderbird中的中文并没有如我预期般的使用 adobe-source-han-sans-cn 作为默认字体,而是不知道一个什么字体,每一撇一捺都在肆意生长。

零: 知识储备

  1. 圣教读物

    包括了truetype, opentype,bitmap的一般性科普,可以只阅读前边的一小部分。

  2. 关于serif, sans serif, monospace  Serif和Sans-serif字体的区别

  3. 一个大 列表。常用的coding字体,按推荐强度排序。还能preview。  

  4. 名称解释:Anti-alisaing(抗锯齿)

一: 高清屏下的tty

  我有一个24寸2K的显示器。ppi是400? 反正就是很牛逼啦。但是进入tty的时候,特别可怕。字特别的小,几乎瞎掉了我的眼。我就这样眼瞎缭乱的从装arch开始一直到进入了X,在回头去该tty的字体与字号。总之对于高清屏来说,linux tty的默认字体太小太小了。

  可是当时,我并没有写blog的习惯,甚至连写笔记的习惯都没有。我还甚甚的以为自己做过的事情永远不会忘记。此刻,我真的忘记了。我只直接,我装了tty下的字体,并且做了一些忘记了是什么样子的设置。嗯,只记得个大概,真的记不得细节。写blog多重要。

首先,我装了个字体。

/home/tong/Src/risinginfo/tss_sys/daemon/appdump [[email protected]] [10:05]
> pacman -Qs terminus
local/terminus-font 4.40-2
    Monospace bitmap font (for X11 and console)

然后,我设置了这个:

/home/tong/Src/risinginfo/tss_sys/daemon/appdump [[email protected]] [11:51]
> cat /etc/vconsole.conf
FONT=ter-v32n

重启(relogin ??),就设好了。

还有个命令,可以实时生效。好像是setfont,记不太清了。。。

/home/tong/Src/risinginfo/tss_sys/daemon/appdump [[email protected]] [11:53]
> man vconsole.conf

/home/tong/Src/risinginfo/tss_sys/daemon/appdump [[email protected]] [11:55]
> man setfont

不过,所幸,我们还有邪教读物,来重拾这部分知识。。。

二:中文显示我用谁

  之前装过用过一阵子的文泉驿。已经卸载了,现在使用adobe。反正,都差不多吧,对于中文,能显示我就满意了。

/home/tong/Amazon [[email protected]] [1:36]
> pacman -Qs adobe-source
local/adobe-source-han-sans-cn-fonts 1.004-1
    Adobe Source Han Sans Subset OTF - Simplified Chinese OpenType/CFF fonts

/home/tong/Amazon [[email protected]] [1:36]
> 

三:编程字体很纠结

  最开始的时候,在windows下面编程的时候,我的配置是:putty + 白色背景 + Courier New + 10号。一直用了好多年,始终是我的最爱。但是到了linux下面字变得很细,很模糊,于是就不用了。

  Cousine(ttf-google-fonts-git),据说是courier new的替代品,这个包好大,正在装,还没用。

  最近发现的是Terminus,就是前文提到的那一个。在高清屏KDE下konsole里(14号字)使用还是蛮不错的。

  惊喜的发现是,竟然在archcn的源里边找到了ttf版本。不过ttf的虽然细腻,但是偏细长,我反而更喜欢bitmap的。

  另外Cousine也很好,不过Terminus在笔记本的屏幕上,因为字号设置的比较小,且没有那么细腻,所以并不好看。。。

/home/tong [[email protected]] [2:02]
> pacman -Qs Terminus-font-ttf
local/terminus-font-ttf 4.40.1-1
    Monospaced bitmap font designed for long work with computers (TTF version)

/home/tong [[email protected]] [2:02]
> 

  上效果图,一张:

  

  再补一张bitmap terminus 14号,非加粗字体的:

四:到底要怎么管理字体

  邪教读物之Font_configuration

  大多数主流软件的font都是有fonts-conf进行管理的。包括了一系列fc开头的软件。

/home/tong [[email protected]] [20:09]
> fc- [tabtab...]
fc-cache     fc-cat       fc-list      fc-match     fc-pattern   fc-query     fc-scan      fc-validate

  fonts-conf 读配置文件,配置文件分4类:

    1. ~/.fonts.conf, ~/.fonts.conf.d/, ~/.fontconfig/*.cache-*  这三类配置已经不推荐,在不久的将来也不会被兼容。

    2. /etc/fonts/fonts.conf, /etc/fonts/conf.avail/   fonts.conf和conf.avail在软件更新的时候会被覆盖。不要做任何更改。

    3. /etc/fonts/conf.d/, /etc/fonts/local.conf 系统全局配置。conf.d里面是从conf.avail中软连接过去的。

    4. $XDG_CONFIG_HOME/fontconfig/fonts.conf, $XDG_CONFIG_HOME/fontconfig/fonts.d, 用户自定义配置。 在未设置环境变量的情况下,$XDG_CONFIG_HOME默认为 $HONE/.config.  参考内容一参考内容二

    这还真的挺重要的我觉得,所以我觉得把这段贴出来:

$XDG_DATA_HOME defines the base directory relative to which user specific data files should be stored. If $XDG_DATA_HOME is either not set or empty, a default equal to $HOME/.local/share should be used.

$XDG_CONFIG_HOME defines the base directory relative to which user specific configuration files should be stored. If $XDG_CONFIG_HOME is either not set or empty, a default equal to $HOME/.config should be used.

$XDG_DATA_DIRS defines the preference-ordered set of base directories to search for data files in addition to the $XDG_DATA_HOME base directory. The directories in $XDG_DATA_DIRS should be seperated with a colon ‘:‘.

If $XDG_DATA_DIRS is either not set or empty, a value equal to /usr/local/share/:/usr/share/ should be used.

$XDG_CONFIG_DIRS defines the preference-ordered set of base directories to search for configuration files in addition to the $XDG_CONFIG_HOME base directory. The directories in $XDG_CONFIG_DIRS should be seperated with a colon ‘:‘.

If $XDG_CONFIG_DIRS is either not set or empty, a value equal to /etc/xdg should be used.

The order of base directories denotes their importance; the first directory listed is the most important. When the same information is defined in multiple places the information defined relative to the more important base directory takes precedent. The base directory defined by $XDG_DATA_HOME is considered more important than any of the base directories defined by $XDG_DATA_DIRS. The base directory defined by $XDG_CONFIG_HOME is considered more important than any of the base directories defined by $XDG_CONFIG_DIRS.

$XDG_CACHE_HOME defines the base directory relative to which user specific non-essential data files should be stored. If $XDG_CACHE_HOME is either not set or empty, a default equal to $HOME/.cache should be used.

$XDG_RUNTIME_DIR defines the base directory relative to which user-specific non-essential runtime files and other file objects (such as sockets, named pipes, ...) should be stored. The directory MUST be owned by the user, and he MUST be the only one having read and write access to it. Its Unix access mode MUST be 0700.

环境变量们

    所以,实际上用户的配置位置为:$HOME/.config/fontconfig/* 目录。而在实际系统中,即将被废止的配置文件~/.fonts.conf 也正是指向该目录的链接:

/home/tong [[email protected]] [20:30]
> ll .fonts.conf
lrwxrwxrwx 1 tong tong 40 Sep 26  2015 .fonts.conf -> /home/tong/.config/fontconfig/fonts.conf

/home/tong [[email protected]] [20:32]
> 

  调整了配置文件之后,运行 fc-cache 命令。新打开的程序就会使用新的字体了。

  搞定了wps的问题之后,导致了thunderbird的中文问题。详见:[daily][troubleshoot][archlinux][wps][font] wps文档中的图内容无法显示中文 我现在的目的是,在配置文件中,调整系统默认的中文字体。

  首先,我要知道当前的match顺序。使用命令fc-match: 太长了,就不全贴出来了。说实话我也并不太会用这个命令:

[[email protected]:~]
% fc-match -a serif > 1
[[email protected]:~]
% fc-match -s serif > 11
[[email protected]:~]

  然后,通过man手册中提供的本地文档  /usr/share/doc/fontconfig/fontconfig-user.html , 找到了这样一段内容:

<!--
    use WenQuanYi Zen Hei font when serif is requested for Chinese
-->
<match>
    <!--
        If you don‘t want to use WenQuanYi Zen Hei font for zh-tw etc,
        you can use zh-cn instead of zh.
        Please note, even if you set zh-cn, it still matches zh.
        if you don‘t like it, you can use compare="eq"
        instead of compare="contains".
    -->
    <test name="lang" compare="contains">
        <string>zh</string>
    </test>
    <test name="family">
        <string>serif</string>
    </test>
    <edit name="family" mode="prepend">
        <string>WenQuanYi Zen Hei</string>
    </edit>
</match>

  依葫芦画瓢,写到用户配置里,如下:

[[email protected]:~]
% cat .config/fontconfig/fonts.conf 

<?xml version="1.0"?><!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<fontconfig>
 <dir>~/.fonts</dir>

<match>
        <test name="lang" compare="contains">
                <string>zh</string>
        </test>
        <test name="family">
                <string>serif</string>
        </test>
        <edit name="family" mode="prepend">
                <string>Source Han Sans CN</string>
        </edit>
</match>

<match>
        <test name="lang" compare="contains">
                <string>zh</string>
        </test>
        <test name="family">
                <string>sans</string>
        </test>
        <edit name="family" mode="prepend">
                <string>Source Han Sans CN</string>
        </edit>
</match>

<match>
        <test name="lang" compare="contains">
                <string>zh</string>
        </test>
        <test name="family">
                <string>mono</string>
        </test>
        <edit name="family" mode="prepend">
                <string>Source Han Sans CN</string>
        </edit>
</match>

</fontconfig>

fonts.conf

  遗憾的是,并没有用。

  顺便读了这个,仅仅用来参考:http://www.cnblogs.com/youxia/p/linux004.html

  依据圣教读物,将配置再次做了修改如下:

<?xml version="1.0"?><!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<fontconfig>
 <dir>~/.fonts</dir>

<alias>
        <family>serif</family>
        <prefer>
                <family>DejaVu Serif</family>
                <family>Source Han Sans CN</family>
        </prefer>
</alias>

<alias>
        <family>sans serif</family>
        <prefer>
                <family>DejaVu Sans</family>
                <family>Source Han Sans CN</family>
        </prefer>
</alias>

<alias>
        <family>sans</family>
        <prefer>
                <family>DejaVu Sans</family>
                <family>Source Han Sans CN</family>
        </prefer>
</alias>

<alias>
        <family>mono</family>
        <prefer>
                <family>DejaVu Sans Mono</family>
                <family>Source Han Sans CN</family>
        </prefer>
</alias>

</fontconfig>

fonts.conf

  配置生效,也达到了调整顺序的目的(通过fc-match的结果与修改之前对比):

[[email protected]:~]
% fc-match -a serif > 3
[[email protected]:~]
% fc-match -s serif > 33
[[email protected]:~]
% diff 1 3
8a9,15
> SourceHanSansCN-Regular.otf: "Source Han Sans CN" "Regular"
> SourceHanSansCN-Normal.otf: "Source Han Sans CN" "Normal"
> SourceHanSansCN-Light.otf: "Source Han Sans CN" "Light"
> SourceHanSansCN-ExtraLight.otf: "Source Han Sans CN" "ExtraLight"
> SourceHanSansCN-Medium.otf: "Source Han Sans CN" "Medium"
> SourceHanSansCN-Bold.otf: "Source Han Sans CN" "Bold"
> SourceHanSansCN-Heavy.otf: "Source Han Sans CN" "Heavy"
247d253
< SourceHanSansCN-Regular.otf: "Source Han Sans CN" "Regular"
363d368
< SourceHanSansCN-Normal.otf: "Source Han Sans CN" "Normal"
369d373
< SourceHanSansCN-Light.otf: "Source Han Sans CN" "Light"
372d375
< SourceHanSansCN-ExtraLight.otf: "Source Han Sans CN" "ExtraLight"
377d379
< SourceHanSansCN-Medium.otf: "Source Han Sans CN" "Medium"
527d528
< SourceHanSansCN-Bold.otf: "Source Han Sans CN" "Bold"
553d553
< SourceHanSansCN-Heavy.otf: "Source Han Sans CN" "Heavy"
[[email protected]:~]
% diff 11 33                                                                                                     1 ?
4a5
> SourceHanSansCN-Regular.otf: "Source Han Sans CN" "Regular"
14d14
< MSJH.TTC: "Microsoft JhengHei" "Normal"
79d78
< SourceHanSansCN-Regular.otf: "Source Han Sans CN" "Regular"
[[email protected]:~]

对比

[[email protected]:~]
% fc-match -s serif|head -n 6
DejaVuSerif.ttf: "DejaVu Serif" "Book"
DejaVuSerif-Bold.ttf: "DejaVu Serif" "Bold"
DejaVuSerif-Italic.ttf: "DejaVu Serif" "Italic"
DejaVuSerif-BoldItalic.ttf: "DejaVu Serif" "Bold Italic"
SourceHanSansCN-Regular.otf: "Source Han Sans CN" "Regular"
times.ttf: "Times New Roman" "Regular"
[[email protected]:~]
% 

  可是thunderbird的显示依然不正确。这真的让我很为难。。。

又改了一版,因为family名字写错了,serif生效了,另外的没生效。认真阅读/etc/fontconfig/fonts.conf文件,就会发现正确的名字。

<?xml version="1.0"?><!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<fontconfig>
 <dir>~/.fonts</dir>

<alias>
        <family>serif</family>
        <prefer>
                <family>DejaVu Serif</family>
                <family>Source Han Sans CN</family>
        </prefer>
</alias>

<alias>
        <family>sans-serif</family>
        <prefer>
                <family>DejaVu Sans</family>
                <family>Source Han Sans CN</family>
        </prefer>
</alias>

<alias>
        <family>monospace</family>
        <prefer>
                <family>DejaVu Sans Mono</family>
                <family>Source Han Sans CN</family>
        </prefer>
</alias>

</fontconfig>

新fonts.conf

  查看thunderbird,问题修正。:-)

  

  

时间: 11-25

[daily][archlinux][fonts] 在linux下管理字体的相关文章

Linux 下 netbeans 字体抗锯齿正解

转自:http://leenjewel.blog.163.com/blog/static/601937922010124444051/ 说来这个不难,主要是我看网上有的写的不是很明确,甚至有的写的根本不对,在这里写个正解. 在netbeans安装目录找到 etc 目录下的 netbeans.conf 文件,用你喜欢的编辑器打开这个文件,在其中加入这个选项          -J-Dawt.useSystemAAFontSettings=on 这里你要注意了,我用的是6.8版本,别的版本我没实验,

OpenOffice菜单乱码解决和linux下安装字体

在OPenoffice的官网上下载了最新的Linux的zh64包,利用dpkg -i *.deb安装了所以的包,再进desktop-....的文件安装了快捷方式.在系统菜单栏里面就可以看到了,可是打开才发现菜单都是乱码,网上查阅后才知道是字体没有,不支持导致的,于是便去下载 就在win7的 c://windowns/fonts下面找了个新宋体过去(才10M+) 步骤: mkdir /usr/share/fonts/win 将window是中的中文字体文件复制到/usr/share/fonts/w

laravel 使用PhantomMagick导出pdf ,在Linux下安装字体

git项目地址:https://github.com/anam-hossain/phantommagick sudo apt-get -y install fontconfig xfonts-utils 首先我们在Windows下找到储存字体的文件夹,字体储存在C盘里:路径为c:\WINDOWS\Fonts 传到服务器上将三个文件移动到 /usr/share/fonts/truetype/下 执行:sudo fc-cache -fv  刷新系统 原文地址:https://www.cnblogs.

在linux下管理iphone

场景: linux发行版:ubuntu 14.04 64bit 3.13.0-67-generic(内核版本) iphone型号:iphone 5c (ios 8.1.3 已越狱) 准备工作(一定要先做好这两步): 1.在iphone弹出信任窗口一定要信任; 2.把iphone的密码关掉.(挂载上了之后可以打开密码) 操作流程: 1.安装libimobiledevice-dev库("-dev"不能少了) sudo apt-get update  (更新一下源,我用的163源) sudo

Linux下wps字体问题

1.安装symbol-fonts_1.2_all.deb,自行搜索 2.卸载xfonts-mathml字体 sudo apt-get remove xfonts-mathml

Linux下终端字体颜色设置方法

颜色=\033[代码;前景;背景m 如:\033[1;32;40m表示高亮显示字体为绿色,背景色为黑色 颜色=\[\033[代码;前景;背景m\] echo -e "this is a \033[5;1;42m abc \033[0m" 前景            背景             颜色 --------------------------------------- 30               40              黑色 31               4

Linux下怎么使用任务管理器和进程管理

大家都知道在Windows下怎么使用任务管理器来管理进程,那么在linux下呢?今天简单介绍一下怎么在linux使用任务管理器管理进程,让我们的linux服务器运行的很流畅,可以使用的命令有:1.PS命令来查看静态的进程统计消息可以加的参数有:a:显示当前终端的所有进程消息,包括其他用户的进程.与"x"选项结合时可以显示系统中的 所有进程信息:u:使用以用户为主的格式显示输出进程信息:x:显示当前用户在所有终端下的进程信息:-e:显示系统中的所有进程信息:-l:使用长格式显示进程信息:

Linux下添加windows字体

在Linux下使用wqy字体,在视觉效果上就已近很好了,其实没有必要添加windows字体.但是显然有些人(比如领导,^..^)就喜欢宋体.楷体,所以添加windows字体有时还是需要的,幸运的是这件事很简单. windows字体的来源可以从windows系统中拷贝. 对于大多数Linux系统,在你双击某种ttf字体时,就会打开类似于包管理器的界面,通常你可以在这个界面上选择安装字体.但是这种方式安装的字体通常只是针对某个用户(也就是你当前登录的用户)的,所以其他用户并不能使用你安装的字体(这通

Linux下安装宋体以及微软雅黑字体

最近工作用itext生成pdf在windows环境下没有出现中文乱码而在linux下出现中文乱码,打开pdf查看pdf编码,以及显示的编码,发现编码并没有对应.原因是使用的宋体和微软雅黑在linux环境下并没有安装. 解决方法: 1.到windows环境下将所需字体拷贝到linux下.(simsun.ttc(宋体),msyf.ttf(微软雅黑)) 2.到linux环境下创建目录 mkdir -pv /usr/share/fonts/chinese/TrueType 将字体放入目录下 cd /us