Прошёл очередной раунд по настройке шрифтов в системе.
Несколько месяцев назад я воспользовался как основой вот этой темой http://www.calculate-linux.ru/blogs/show/349 и сделал себе красиво.
Через некоторое время lcdfilter
попал в основное дерево портаджа, соответственно появилось желание избавиться от лишнего оверлея и не вполне стандартных утилит и перейти на кошерные пакеты.
Последовательность действий следующая:
- Отключаем оверлей
lcd-filter
, ежели он был включён.
2. в /etc/portage/package.keywords/custom
дописываем следующее:
media-libs/fontconfig-infinality ~amd64
app-admin/eselect-lcdfilter ~amd64
app-admin/eselect-infinality ~amd64
media-libs/fontconfig ~amd64
media-libs/freetype ~amd64
x11-libs/cairo ~amd64
x11-libs/libXft ~amd64
3. /etc/portage/package.use/custom
:
...
media-libs/freetype infinality -bindist
...
Если были прописаны флаги для оверлея lcd-filtering
- убираем.
4. Ставим пакеты:
emerge -av1 media-libs/fontconfig-infinality app-admin/eselect-lcdfilter
app-admin/eselect-infinality media-libs/fontconfig media-libs/freetype
5. Если был подключён оверлей lcd-filtering
и пакеты стояли оттуда, дополнительно надо переустановить
emerge -av1 x11-libs/cairo x11-libs/libXft
6. Командами eselect fontconfig enable NN
и eselect fontconfig disable NN
(где NN - номера строк, показываемые по команде eselect fontconfig list
в начале каждой строки, можно указывать по несколько номеров сразу через пробел) приводим вывод этой команды примерно к такому виду:
[kanyck: ~]$ eselect fontconfig list
Available fontconfig .conf files (* is enabled):
[1] 10-autohint.conf
[2] 10-no-sub-pixel.conf
[3] 10-sub-pixel-bgr.conf
[4] 10-sub-pixel-rgb.conf *
[5] 10-sub-pixel-vbgr.conf
[6] 10-sub-pixel-vrgb.conf
[7] 10-unhinted.conf
[8] 11-lcdfilter-default.conf
[9] 11-lcdfilter-legacy.conf
[10] 11-lcdfilter-light.conf *
[11] 20-fix-globaladvance.conf
[12] 20-unhint-small-dejavu-sans.conf
[13] 20-unhint-small-dejavu-sans-mono.conf
[14] 20-unhint-small-dejavu-serif.conf
[15] 20-unhint-small-vera.conf
[16] 25-unhint-nonlatin.conf
[17] 30-metric-aliases.conf
[18] 30-urw-aliases.conf
[19] 40-nonlatin.conf
[20] 45-latin.conf
[21] 49-sansserif.conf
[22] 50-user.conf *
[23] 51-local.conf *
[24] 52-infinality.conf *
[25] 57-dejavu-sans.conf
[26] 57-dejavu-sans-mono.conf
[27] 57-dejavu-serif.conf
[28] 59-google-droid-sans.conf
[29] 59-google-droid-sans-mono.conf
[30] 59-google-droid-serif.conf
[31] 60-latin.conf
[32] 60-liberation.conf
[33] 62-croscore-arimo.conf *
[34] 62-croscore-cousine.conf *
[35] 62-croscore-symbolneu.conf *
[36] 62-croscore-tinos.conf *
[37] 65-fonts-persian.conf
[38] 65-khmer.conf
[39] 65-nonlatin.conf
[40] 69-unifont.conf
[41] 70-no-bitmaps.conf *
[42] 70-yes-bitmaps.conf
[43] 80-delicious.conf
[44] 90-synthetic.conf
[kanyck: ~]$
7. Файл /etc/X11/Xresources
(или локально ~/.Xresources
) приводим к такому виду (с точностью до значения DPI):
Xft.antialias: 1
Xft.autohint: 0
Xft.dpi: 101
Xft.hinting: 1
Xft.hintstyle: hintfull
Xft.lcdfilter: lcddefault
Xft.rgba: rgb
8. Командами eselect lcdfilter set NN
и eselect infinality set NN
устанавливаем желаемый стиль шрифтов. Насколько я понял, крутить их надо синхронно - что, конечно, неудобно, но уж как есть…
9. Перезапускаем искы.
10. Наслаждаемся результатом.
11. Если насладиться не получилось, повторяем пункты 6 … 10 до полного удовлетворения результатом.
ГРАБЛИ:
При выполнении этих манипуляций у меня исчезли фонты URW, установленные по зависимостям нескольких пакетов. Ну то есть fc-list их наотрез отказался видеть, а приложения и подавно. Дело оказалось в том, что Type 1 фонты запрещены в файле /etc/fonts/local.conf
, поскольку рендерятся неудовлетворительно. Включение оных путём комментирования соответствующего XML блока показало, что да, неудовлетворительно - по сравнению с остальными. Даже в букве i (Gothic полужирный, стоял у меня в теме на заголовке окна) точка сливается с палкой и она становится неотличима от буквы l. Исправить это можно, прописав в .Xresources
Xft.lcdfilter: lcdlight
но качество остальных фонтов при этом портится. Вернул назад - надо будет добавить какой-нибудь ещё приличный фонт в дополнение к имеющимся для замены URW.
Также оказалось, что DPI (который по хорошему должен быть одинаковым по всей системе и совпадать с истинным положением вещей), нифига не совпадает. Фактический DPI у меня примерно 101, Xorg бодро рапортует 102. Значение это, впрочем, не используется, а используется другое - неправильное, поскольку при его расчете используются физические размеры матрицы, а не размеры изображения, поэтому xdpyinfo | grep -B1 resolution
показывает 96 х 96, каковое значение и используется при рендеринге. Лечится это прописыванием в /etc/X11/xorg.conf
в секцию Monitor
строки
DisplaySize 344 194 # это в миллиметрах
Цифры для моего монитора, подставьте свои при необходимости.
Узнать их можно командой grep -iB2 size /var/log/Xorg.0.log
(параметр Image size
) или тривиально с помощью линейки. Также следует учесть, что DE может иметь своё мнение относительно DPI - это надо искать в соответствующих настройках, хотя предполагаю, что оно всё равно пишется в .Xresourses
, только из Гуя.
Вроде ничего не забыл и не перепутал…