请教如何修改系统默认的serif,sans-serif以及monospace字体?

大家好,
我下面是我运行 fc-match 得到了几个字体的 alias 结果:

serif: LiberationSerif-Regular.ttf: "Liberation Serif" "Regular"
sans-serif: Verdana.ttf: "Verdana" "Normal"
monospace: consola.ttf: "Consolas" "Regular"
Arial: Arimo-Regular.ttf: "Arimo" "Regular"
Helvetica: texgyreheros-regular.otf: "TeX Gyre Heros" "Regular"
Verdana: Verdana.ttf: "Verdana" "Normal"
Times New Roman: Tinos-Regular.ttf: "Tinos" "Regular"
Courier New: Cousine-Regular.ttf: "Cousine" "Regular"

现在我想把 serif 换成 Tinos,想把 sans-serif 换成 Arimo,想把 monospace 换成 Cousine-Regular,请问应该怎么操作比较合适?

在 /etc/fonts/conf.d/45-latin.conf 里设置。

我一般是修改 /etc/fonts/conf.d/65-nonlatin.conf 文件来设定中文字体的 serif,sans-serif,monospace 优先级。

openSUSE 下面做这个事情可以不用手动改 /etc/fonts/ 下面的配置,因为有 /etc/sysconfig/fonts-config。(这东西貌似是 SUSE 独有的?)

/etc/sysconfig/fonts-config 里面有 PREFER_SANS_FAMILIES, PREFER_SERIF_FAMILIES, PREFER_MONO_FAMILIES 这三个字符串常量,默认是空,改成你想要的字体就可以了,而且可以按照顺序匹配多个字体(以冒号分隔)。配置文件里面的注释写得很明白。

然后还有个 FORCE_FAMILY_PREFERENCE_LIST 这个参数,默认是 yes ,也就是强制使用前面设置的字体。这个建议改成 no,这样在没有匹配到能用的字体的时候就可以 fallback 到系统默认字体。

最后改完之后记得执行 sudo fonts-config 生成新的配置文件,就可以看到效果了。

不习惯命令行的话还可以用 YaST 的 sysconfig editor 来弄。

2赞

谢谢!这个解决方案是我想要的。
那么请问如果想为不同字符集设置不同的默认 Sans/Serif/Monospace 该如何做呢?(例如我想西文 sans 使用 Arimo 字体,中文 sans 使用 Noto Sans S Chinese 字体)
是否在 sysconfig 中将不同字体用冒号隔开就可以了?
// 经过测试可行,按照优先级顺序写就可以了。

// 但是又出现了新的问题:修改 sysconfig 后,fc-match sans 的结果并没有相应改变(已经运行了 sudo fonts-config),请问这个是怎么回事?
// 经过研究发现,是因为我用户本地目录中~/.config/fontconfig/fonts.conf 中设置了 sans,serif 以及 monospace 的字体所致,删除该文件后即可生效。