В fonts-conf недостаточно опций, некоторые приходится выискивать. У меня в gentoo работает системная настройка fontconfig путём создания симлинков в /etc/fonts/conf.d/ на сниппеты /etc/fonts/conf.avail/, которые вместе формируют конфиг. Если у вас есть такие же каталоги (если debian/ubuntu, то возможно для этого существуют alternatives или кто его знает как ещё), то вы можете просто скопипастить эти куски в один конфиг (а можно и системным путём пойти, смотря как угодно).
Заодно - раз у вас цель сделать как в winXP, стоит разобраться, что может происходить.
Пока DE не запущен (допустим, сеанс xterm или xsession, или просто проги на голых иксах с libXft, как вариант X11+cairo), должен использоваться конфиг самого fontconfig. Если же запущено - они могут кое-что переопределять, причём некоторые переопределения не настреиваются. Например, я в XFCE, и шрифты в qt5 выглядят не так, как в gtk, хоть убей. Хотя в настройках шрифтов я специально синхронизировал доступные пункты с тем, что в fontconfig, чтоб не было расхождений, а экспорт fonts.conf из qt5ct даже не делал.
Теперь по опциям.
Во первых - сейчас выяснил, что среднего уровня хинтинга нет в Xft, т.к. в исходниках:
Код: Выделить всё
if (FC_HINT_NONE < hint_style && hint_style < FC_HINT_FULL)
{
fi->load_flags |= FT_LOAD_TARGET_LIGHT;
}
Дальше, лёгкий хинтинг был бы лучше тем, что более предсказуемый: подгон позиций выполняется только по вертикали, тогда как по горизонтали субпиксельное делает своё дело (а в вашем конфиге rgba выключено). По моему, cleartype должен по идее именно этим заниматься, так что для winXP rgba считаю уместным.
А вот на что следует и правда обратить внимание - это на выбор LCD фильтра, задача которого - раскидывать пикселы в HiRes заготовке, соответствующие субпикселам, на всю пиксельную площадь. Суть в том, что точность позиционирования превышает размер минимального элемента изображения, способного сохранять цвет. Поэтому идеальное изображение с субпиксельным сглаживанием имеет размытие. По сути, мы имеем дела с пересекающимися квадратами.
Код: Выделить всё
$ ls /etc/fonts/conf.avail/11-lcdfilter-* -l
-rw-r--r-- 1 root root 695 окт 31 19:27 /etc/fonts/conf.avail/11-lcdfilter-default.conf
-rw-r--r-- 1 root root 692 окт 31 19:27 /etc/fonts/conf.avail/11-lcdfilter-legacy.conf
-rw-r--r-- 1 root root 689 окт 31 19:27 /etc/fonts/conf.avail/11-lcdfilter-light.conf
# И пример конфига
$ cat /etc/fonts/conf.avail/11-lcdfilter-default.conf
<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "urn:fontconfig:fonts.dtd">
<fontconfig>
<description>Use lcddefault as default for LCD filter</description>
<!-- Use lcddefault as default for LCD filter -->
<match target="pattern">
<!--
This sort of configuration is available on the major desktop environments
and we don't have to break it with "assign" unconditionally. however, we
want to set something for others. So we use "append" here to get this working
in both cases so that most clients would takes a look at the first place only.
-->
<edit mode="append" name="lcdfilter">
<const>lcddefault</const>
</edit>
</match>
</fontconfig>
Для вашего конфига хватит такой строчки:
Код: Выделить всё
<edit mode="append" name="lcdfilter"><const>lcddefault</const></edit>
Это то, что обычно по умолчанию, если ничего не менять. Теперь по значениям:
- lcdlegacy: По документации freetype, этот фильтр реализует сглаживание как в win95. Я сам не понял, чего он фильтрует, т.к. сказано, что даёт чёткие шрифты, но чреват радугой (а я думал, что это симптомы отсутствия фильтра вообще). Кстати, если полностью отключить фильтр (если он в /etc/fonts/conf.d, то удалить оттуда всё со словом lcdfilter), то при субпиксельной отрисовке будут самые чёткие шрифты, однако возможна радуга (на сверх-тонких, как в Noto или DejaVu, радуга просто блестит).
- lcdlight: обычно не по дефолту. Строго необходимый минимум (в теории) - box размером 3, т.е. равно на ширину пиксела_несущего_цвет (тм... шучу). Самые чёткие шрифты, у меня как-раз такие. Любители чёткости как win7 оценят (не знаю, так ли в winXP или нет).
- lcddefault: Реальность оказалась слишком реально - радуга возможна даже с lcdlight из за неидеальных мониторов. Поэтому на исходную коробку наложили ещё одну, только не коробку, а так - лёгкую размывку. Если в lcdlight распределение (85, 86, 85), то в lcddefault - (8, 77, 86, 77, 8) - где 8 сбоку вычтено из предыдущего края (по сути, второй фильтр - (24, 207, 24)). Если бы была полная коробка, то было бы заметная мыло, а так - лёгкий противовес недостаткам монитора.
Также, насколько я понял - hinting=true с опциями hintslight, hintfull это для шрифтовых интерпретаторов. Для нехинтованных шрифтов стоит включить автохинт. Это можно сделать условно, например в моей системе - такой кусок:
Код: Выделить всё
$ cat /etc/fonts/conf.avail/09-autohint-if-no-hinting.conf
<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "urn:fontconfig:fonts.dtd">
<fontconfig>
<description>Enable autohinter if font doesn't have any hinting</description>
<!-- Use the Autohinter -->
<match target="font">
<test name="fonthashint"><bool>false</bool></test>
<!--
This sort of configuration is available on the major desktop environments
and we don't have to break it with "assign" unconditionally. however, we
want to set something for others. So we use "append" here to get this working
in both cases so that most clients would takes a look at the first place only.
-->
<edit name="autohint" mode="append"><bool>true</bool></edit>
</match>
</fontconfig>
(думаю, всё дело - в строке "<test name="fonthashint"><bool>false</bool></test>").
Кстати, зелёный должен бы быть 85 и в lcdlight и lcddefault.
Отредактировал: Как оказалось - это из за того, что делеть на 2^n (256) быстрее всего.