Красивые шрифты

Прошёл очередной раунд по настройке шрифтов в системе.
Несколько месяцев назад я воспользовался как основой вот этой темой http://www.calculate-linux.ru/blogs/show/349 и сделал себе красиво.

Через некоторое время lcdfilter попал в основное дерево портаджа, соответственно появилось желание избавиться от лишнего оверлея и не вполне стандартных утилит и перейти на кошерные пакеты.

Последовательность действий следующая:

  1. Отключаем оверлей 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, только из Гуя.

Вроде ничего не забыл и не перепутал…

Таки забыл…
Firefox по умолчанию тоже работает с DPI неправильно - считая, что 96 - самое то во всех мыслимых случаях. Ну не на Линукс же ориентироваться, в самом-то деле!
Мозг ему вправляется следующим образом.
Открываем about:config, ищем два параметра:
layout.css.dpi - отвечает за прорисовку менюшек, тулбаров и т.д. Ставим там реальное разрешение своего монитора.
layout.css.devPixelsPerPx - отвечает за прорисовку собственно окна контента. Параметр показывает, во сколько раз реальный DPI больше виндового 96. То есть для моего 101 туда надо прописать 101/96=1.05. Параметром можно поиграться: по мне так многие сайты слегка “мельчат”, поэтому я добавил ещё 5% и выставил 1.1.
Всем удачи!

Спасибо!

какое DPI нужно для ноутбука с экраном 17.3 разрешением 1600х900? Хотелось бы табличку соответствия или что то такое…

Автору спасибо!
Но заработало хорошо только после того, как средствами KDE включил ргб-сглаживание и полный хинтинг (внешний вид приложений - шрифты). И ещё установил шрифты:

media-fonts/dejavu media-fonts/liberation-fonts media-fonts/paratype media-fonts/ubuntu-font-family

Стало всё замечательно.

Хороший тест на рендеринг браузера:

http://seedconference.com/seed.php

Ой! а где аттачмент прикрепить Хотел показать, как выглядит у меня…

В консоли использую шрифт media-fonts/monaco из оверлея init6

layman -a init6 && eix-update && emerge -av media-fonts/monaco

Пример .Xdefaults

*font: xft:Monaco:autohint=true:pixelsize=14

Терминал x11-terms/rxvt-unicode

Скрин

Пожалуйста…

http://www.theile.net/~sven/dpi.html
http://www.pxcalc.com/

А также можно набрать в Гугле dpi calculator или просто вручную поделить количество точек на количество дюймов (один дюйм = 25,4 мм).

В KDE, вероятно, свой аналог Xresources имеется. LXDE точно пишет в .Xresources, про остальные не в курсе.

UPD: Неа, ошибся я… Пишет в ~/.gtkrc-2.0 и в ~/gtk-3.0/settings.ini
А у KDE свой набор настроек.

Ура! Меня услышали. В портеже норм шрифты, которые не аннигилируют глаза)