Задание приоритета шрифтов в fontconfig

Итак, как я и обещал, рассказ о том, как оставить в системе шрифты семейства DejaVu, но снизить их приоритет до минимума.

Все (ну точнее подавляющее большинство) программы в среде X window получают шрифты одним из 2х способов:

  • клиент сообщает серверу что и каким шрифтом отрисовать, а выбором шрифта, его загрузкой и выводом на экран занимается сервер
  • клиент сам отрисовывает шрифты и посылает серверу битмапы.

Надо отметить, что программы использующие первый способ, вымирают как класс (что бы ни говорили противники *DE и любители xterm). И вопрос топика применительно к этим программам меня интересует мало. Поэтому только общее направление: отключить шрифты вообще можно разрегистрировав их из defoma (это если Xserver их хватает из x-ttcidfont-conf), а задать “умолчальные” обычно можно через файл ресурсов (Xresources).

А вот всякие Qt/GTK приложения самостоятельно занимаются отрисовкой шрифтов. И берут они их через механизм fontconfig. Для того, чтобы узнать, какой шрифт будет использован, если приложение запросило serif, достаточно выполнить команду

$ fc-match serif

Настройками fontconfig можно рулить через его конфиг-файлы, расположенные в /etc/fonts. В частности там можно задать/переопределить, семейства шрифтов, к каким семействам относятся те или иные шрифты, как отрисовываются шрифты (автохинтинг, хинтинг и т.д.), причем можно даже указать, какие настройки отрисовки будут применены к каким шрифтам (то есть в зависимости от имени, семейства, размера можно включать/выключать хинтинг). Документация по формату есть в fonts-conf (5).

В частности для задания приоритета шрифтов по семействам надо отредактировать файл /etc/fonts/conf.d/60-latin.conf (если у вас не Debian, то сами ищите где для семейств serif, sans-serif и monospace задаются предпочтительные (тег <prefer>) шрифты) так, чтобы майкрософтские шрифты (Times New Roman, Verdana и Courier New) были выше шрифтов DejaVu в своих семействах. После редактирования изменения вступят в силу для всех вновь запускаемых программ. Проверить можно, напоминаю, командой fc-match. Вот и вся черная магия.

Upd: Но это еще не все, читайте комментарии или следующую запись.
Upd2: В Debian и, скорее всего, в Ubunte, а может быть и в других дистрибутивах, достаточно положить файлик local.conf в /etc/fonts.

RSS feed | Trackback URI

6 Comments »

Comment by Alexander Solovyov Subscribed to comments via email
2007-11-11 13:20:33

Опа! Огромное спасибо. :) Похоже, стало лучше. Хотя у мага заголовки у меня сейчас всё равно выглядят убого, не понимаю почему (видать, они не serif/sans-serif, а что-то другое - надо понять, что). Ищу. :)

 
Comment by Alexander Solovyov Subscribed to comments via email
2007-11-11 13:23:58

Именно русские буквы, английские выглядят супер. Видать для latin установилось, а для русских - нет…

P.S. У тебя в tab-order’е после поля для ввода коммента идёт заголовок, а не кнопка “Add comment”. Немножко неудобно.

Comment by GQ
2007-11-11 15:26:04

Именно русские буквы, английские выглядят супер. Видать для latin установилось, а для русских - нет…

Это, кажется, проблемы с отрисовкой майкрософтского monotype (то бишь Courier New) - в нем кириллица рисуется ниже латиницы. У меня в поле ввода, кстати такая же фигня просматривается. Надо покопаться.

P.S. У тебя в tab-order’е после поля для ввода коммента идёт заголовок, а не кнопка “Add comment”. Немножко неудобно.

Это brian nested comments так работает. но он страшный и мне его трогать очень не хочется.

Comment by GQ
2007-11-11 16:14:03

Bingo!
Firefox жжет не по децки!
У меня стояла последовательность шрифтов:
Bitstream, MS, DejaVu.

По-умолчанию обычно выбирался MS во всех программах, так как там есть глифы для текущей локали (по крайней мере я думаю, что поэтому). А файрфокс запрашивал шрифты отдельно для латиницы, отдельно для кириллицы. В итоге латиница рисовалась шрифтами битстрим-вера, а кириллица - майкрософтскими! а у них буквы разной высоты.

Вытащил майкрософтские на самый верх - вроде все стало нормально.

Ура!

 
 
 
Comment by Anonim
2008-06-19 16:14:37

клиент сообщает серверу что и __каким шрифтом__ отрисовать, а выбором __шрифта__, его загрузкой и выводом на экран занимается сервер

ну как, ЗАШИБИСЬ?

Comment by GQ
2008-06-19 18:32:02

Ну так. Клиент задает спецификацию шрифта (различной степени детальности), но выбор конкретного шрифта, чтение файла и пр. - задача сервера.

 
 
Name (required)
E-mail (required - never shown publicly)
URI
Subscribe to comments via email
Your Comment (smaller size | larger size)
You may use <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> in your comment.

Trackback responses to this post