Ключевые слова:font, x11, rus, truetype, (найти похожие документы)
From: Poor Fred
Date: Mon, 11 Jan 2006 14:31:37 +0000 (UTC)
Subject: Шрифты как в Windows HowTo
Оригинал: http://linuxforum.ru/index.php?showtopic=12690http://www.linuxquestions.org/questions/showthread.php?threadid=257705
Время от времени я вижу сообщения от пользователей, жалующихся на то,
что их шрифты выглядят уродливо и желающих знать, как их можно
улучшить. Часто люди ищут шрифты со сглаживанием как в Apple/OSX.
Мне тоже не нравилось, что шрифты выглядят расплывчато и хотелось
напрячь глаза, чтобы изображение выглядело более четко. Поэтому надо
было что-то предпринять, чтобы шрифты выглядели в точности как в
Windows.
Любой может подтвердить, что включение сглаживания шрифтов в Linux
дает довольно-таки паршивые результаты. Но эта ситуация может быть
изменена кардинально, что я и пытался показать [29]здесь. Эти снимки
экрана призваны показать несколько вещей:
* хорошо отрисованные несглаженные шрифты;
* слаженность KDE- и GTK2-приложений
* читаемые терминальные шрифты
* четкие и хорошо отрисованные шрифты во всех браузерах.
Итак, мой "Шрифты как в Windows HowTo". Надеюсь, он кому-нибудь
поможет.
Первым делом несколько предупреждений:
1. Некоторые действия, которые я посоветую, могут вступить в
противоречие с законом той местности, где вы живете. Также потребуется
установка шрифтов, на которые, я надеюсь, вы имеете права, т.к.
заплатили за них, покупая Windows или компьютер с предустановленным
Windows.
2. Перекомпиляция freetype2 может повлечь за собой некоторые
нежелательные эффекты, как то:
2.1. падение менеджера шрифтов в KDE 3.2.x (не замечено в KDE 3.3.1);
2.2. изменение метода сглаживания шрифтов в Fluxbox. На Blackbox не
будет оказано никакого эффекта, т.к. он не использует сглаживание
вообще. Вероятно, это легко поправимо, но с тех пор, как я не
использую его, мне все равно;
2.3. возможно, изменение сглаживания шрифтов может плохо
подействовать на KDE/Gnome. Это довольно-таки маловероятно, но я
это упоминаю, так как об этом говорят, например, в ньюсгруппах SuSE;
3. Я не проверял это на всех дистрибутивах. Мои снимки сделаны на
Slackware-current, использующем Xorg, KDE 3.3.1, Gnome 2.6, freetype
2.1.9, ядро 2.4.27. Ранее я выполнял это на SuSE 8.2, slackware 9.1,
slackware 8.1 и попробую на Debian. Я слышал, что "byte code
interpreter" уже активизирован в Debian, так что я не думаю, что будет
какая-нибудь разница.
Ну ладно, достаточно лирических отступлений.
Шаг 1: Выбор размера монитора.
Обычно размер выбирается в зависимости от монитора/видеокарты и Ваших
личных предпочтений. У меня 19-дюймовый ViewSonic, которых хорошо
показывает при размере 1280x1024 @ 75hz. 17-дюймовые мониторы обычно
имеют размер 1024x768. Отредактируйте Ваш XF86Config или xorg.config
для задания желаемого размера и частоты развертки Вашего монитора
(если не знаете как - man xorg.conf). Пока не обращайте внимания на
слишком мелкие шрифты, над ними мы поработаем позже, при задании dpi.
Шаг 2: Что делает Windows?
Windows делает три вещи, которые мы хотим заставить делать Linux:
1. Использовать хорошее качество отображения шрифтов.
2. Использовать подходящее dpi (dots per inch - точек на дюйм).
3. BYTE_CODE_INTERPRETER.
1. Получение шрифтов TrueType
Некоторые дистрибутивы, такие как SuSE, имеют небольшие скрипты для
загрузки пакета Windows Core Font. Если Вы владелец CD с Windows, на
нем есть программы позволяющие извлечь файлы шрифтов из архивов .cab.
Если Вы используете двойную загрузку как я, примонтируйте раздел с
Windows и скопируйте папку со шрифтами в Вашу домашнюю директорию. Это
необязательно, но необходимо, если Вы планируете удалить раздел с
Windows.
Теперь мы должны добавить шрифты TrueType в Linux. Обычно в Linux
шрифты располагаются в /usr/X11R6/lib/X11/fonts. Быстрый взгляд на
xorg/XF86Config сообщит Вам следующее:
# FontPath "/usr/X11R6/lib/X11/fonts/local"
# FontPath "/usr/X11R6/lib/X11/fonts/CID"
# FontPath "/usr/X11R6/lib/X11/fonts/Speedo"
FontPath "/usr/X11R6/lib/X11/fonts/misc"
FontPath "/usr/X11R6/lib/X11/fonts/TTF"
FontPath "/usr/X11R6/lib/X11/fonts/100dpi"
FontPath "/usr/X11R6/lib/X11/fonts/75dpi"
FontPath "/opt/kde/share/fonts"
FontPath "/usr/X11R6/lib/X11/fonts/Type1"
FontPath "/usr/X11R6/lib/X11/fonts/cyrillic"
FontPath "/usr/local/share/fonts"
FontPath "/usr/X11R6/lib/X11/fonts"
FontPath "/usr/local/share/fonts/TTF" #<-- строка создана менеджером шрифтов KDE
FontPath "/usr/share/fonts"
FontPath "/usr/share/fonts/default"
В моем случае шрифты TrueType находятся в каталоге TTF. В Вашем они
могут находиться в каталоге fonts или создайте сами каталог TTF. Вы
можете также добавить каталог ~/fonts, если не хотите, чтобы шрифты
распространялись на всю систему, но я обычно устанавливаю их для всей
системы. Если Вы не создавали новый каталог для шрифтов, убедитесь,
что добавили строку FontPath, чтобы указать, где X могут их найти.
Простейший путь установить новые шрифты - использовать менеджер
шрифтов KDE в Центре управления в разделе "Системные установки".
Перейдите в администраторский режим (для установки шрифтов для всей
системы) и щелкните на директорию TTF в дереве каталогов. Щелкните
"Добавить шрифты" в панели инструментов. Укажите на каталог со
шрифтами Windows и выберите все шрифты, которые желаете добавить:
Arial, Comic Sans MS, Courier New, Tahoma, Times New Roman и Verdana
как минимум. Конечно, Вы можете добавить, все, которые хотите. Если Вы
используете этот путь, шрифты будут установлены в каталог
/usr/local/share/fonts/TTF и путь к нему будет создан в xorg.conf как
в листинге выше. Мы сделали это в первую очередь, так как
перекомпиляция freetype2 может нарушить работу мереджера шрифтов KDE -
это все всемя случалось у меня в KDE 3.2.x.
Во время правки xorg.conf убедитесь, что 100dpi-шрифты находятся выше
75dpi-шрифтов.
2. DPI - точек на дюйм
Window использует по умолчанию 96 dpi. Linux - 75 или 81. Вот почему
шрифты в Linux всегда такие маленькие по сравнению с теми же самыми
шрифтами в Windows при одинаковом размере экрана и шрифтов. В
зависимости от Вашей ситуации мы должны сделать следующие шаги, чтобы
заставить Linux работать при 96 dpi.
a) Если Вы сначала загружаетесь в консоль (runlevel 3) и используете
startx для запуска Х-ов, отредактируйте скрипт /usr/X11/bin/startx. В
зависимости от дистрибутива, это может быть символьная ссылка.
userclientrc=$HOME/.xinitrc
userserverrc=$HOME/.xserverrc
sysclientrc=/usr/X11R6/lib/X11/xinit/xinitrc
sysserverrc=/usr/X11R6/lib/X11/xinit/xserverrc
defaultclient=/usr/X11R6/bin/xterm
defaultserver=/usr/X11R6/bin/X
defaultclientargs=""
defaultserverargs="-dpi 96" #<--- обратите внимание
clientargs=""
serverargs=""
Просто добавьте "-dpi 96" к строке defaultserverargs= и все. Теперь,
каждый раз, как Вы запускаете startx, Вы будете загружаться с
разрешением 96x96 dpi, что можно проверить командой в терминале после
того, как Х-ы запустятся:
xdpyinfo | grep resolution
Если Вы автоматически стартуете X-Window через KDM или GDM, Вам нужно отредактировать
xorg.conf or XF86Config. Это немного посложнее. Мы должны использовать
переменную DisplaySize и она будет разная для каждого размера экрана.
Я использую 1280x1024:
# **********************************************************************
# Monitor section
# **********************************************************************
# Any number of monitor sections may be present
Section "Monitor"
Identifier "My Monitor"
# HorizSync is in kHz unless units are specified.
# HorizSync may be a comma separated list of discrete values, or a
# comma separated list of ranges of values.
# NOTE: THE VALUES HERE ARE EXAMPLES ONLY. REFER TO YOUR MONITOR'S
# USER MANUAL FOR THE CORRECT NUMBERS.
HorizSync 31 - 86
# HorizSync 30-64 # multisync
# HorizSync 31.5, 35.2 # multiple fixed sync frequencies
# HorizSync 15-25, 30-50 # multiple ranges of sync frequencies
# VertRefresh is in Hz unless units are specified.
# VertRefresh may be a comma separated list of discrete values, or a
# comma separated list of ranges of values.
# NOTE: THE VALUES HERE ARE EXAMPLES ONLY. REFER TO YOUR MONITOR'S
# USER MANUAL FOR THE CORRECT NUMBERS.
VertRefresh 50-180
Option "dpms"
DisplaySize 337.5 270.0 #<--- обратите внимание
EndSection
Опция DisplaySize 337.5 270.0 заставляет X-Window загрузиться с
разрешением 96x96 dpi при размере экрана 1280x1024. Переменная
задается
DisplaySize X Y
где
X = ширина_экрана_в_пикселях * 25.4 / желаемый_dpi
Y = высота_экрана_в_пикселях * 25.4 / желаемый_dpi
c) Если Вы используете Gnome, то даже если мы выполнили предыдущие
шаги, этого недостаточно. Идем в Gnome/Desktop Prefs/Fonts/Details и
изменяем опцию DPI вверху страницы на 96. Если даже Вы не используете
Gnome, но применяете демон gnome-setting для переноса оформления из
Gnome в KDE, или просто используете приложения из Gnome, такие, как
evolution, Вам необходимо выполнить это действие, т.к. они могут
привнести настройки dpi в KDE и сделать отображение шрифтов
неустойчивым.
ОК, мы имеем TrueType шрифты и (или) dpi установлено на 96x96. Теперь
нам нужно
3. Перекомпилировать Freetype2 для задействования интерпретатора байт-кодов
Загрузите исходные тексты с http://www.freetype.org/
Возможно это не особая проблема, но я всегда стараюсь устанавливать
версию ту же, что стоит в системе. Например, до недавнего времени в
Слаке стояла версия 2.1.8 и хотя уже вышла 2.1.9 я тем не менее
перекомпилировал именно 2.1.8. Мне кажется, чем меньше переменных, тем
меньше проблем. Загружаем и распаковываем архив (я всегда компилирую в
/tmp) и читаем README.
Это TRUETYPE readme из пакета исходников freetype2:
How to enable the TrueType native hinter if you need it
--------------------------------------------------------
..Бла-бла-бла, тут неинтересно (прим. переводчика)
--------------------------------------------------------
- откройте файл "include/freetype/config/ftoption.h"
- найдите строку:
#undef TT_CONFIG_OPTION_BYTECODE_INTERPRETER
- замените на:
#define TT_CONFIG_OPTION_BYTECODE_INTERPRETER
Лучше и не объяснишь.
Прежде чем компилировать и устанавливать вероятно Вы захотите удалить
ранее установленный пакет. Я видел, это советуют в других документах,
но я не вижу в этом особой необходимости. Библиотека freetype в
Slackware находится в составе пакетов X-Window и не может быть удалена
одна.
Еще одна вещь, которую нам надо сделать перед установкой - проверить
символические ссылки.
steve@peggyo:~$ cd /usr/lib
steve@peggyo:/usr/lib$ ls -la libfreetype*
-rw-r--r-- 1 root root 2431914 2004-11-11 00:28 libfreetype.a
-rwxr-xr-x 1 root root 816 2004-11-11 00:28 libfreetype.la*
lrwxrwxrwx 1 root root 20 2004-11-11 00:28 libfreetype.so -> libfreetype.so.6.3.7*
lrwxrwxrwx 1 root root 20 2004-11-11 00:28 libfreetype.so.6 -> libfreetype.so.6.3.7*
-rwxr-xr-x 1 root root 415008 2004-06-05 17:48 libfreetype.so.6.3.5* (<-старая)
-rwxr-xr-x 1 root root 1521734 2004-11-11 00:28 libfreetype.so.6.3.7*
steve@peggyo:/usr/lib$
Это полезно, если Вы будете обновлять библиотеки и хотите проверить,
что линки указывают на новые. А также, если планируете удалить старые
библиотеки перед компиляцией новых и хотите убедиться, что новые линки
были созданы. Если нет, то листинг старых укажет Вам, что делать.
Убедитесь, что новые пакеты с исходными текстами установлены, так что
Вы можете начать компиляцию.
Итак, начнем...
./configure --prefix=/usr
Я использую этот префикс для Slackware, Вам он может не понадобиться.
Если libfreetype находится в /usr/lib, то все в порядке. Прочтите
./configure --help чтобы узнать установки по умолчанию.
make
Побежали строчки. Сообщения типа "blah blah violates strict
antialiasing rules yada yada" можете игнорировать.
Зарегистрируйтесь root'ом:
su -
make install
Будучи root'ом запустите
ldconfig
Если Вы в KDE, запустите Панель управления и разделе Внешний
вид/Шрифты оставьте сглаживание шрифтов, но исключите диапазон от
0.0pt до 14.0 или 15.0pt. Замените все шрифты на Arial или Verdana
размером 9 или 10 pt и перезапустите X-Window.
Вы должны увидеть огромную разницу, как шрифты отрисовываются без
сглаживания (при этом размере).
Шаг 3: Приложения GTK2 (Gimp Tool Kit) в KDE
Приложения типа Mozilla, Gnumeric, Gaim, Abiword, Blufish, Pan
являются приложениями GTK2. При использовании их в KDE они не будут
следовать установкам шрифтов и размеров, которые Вы установили, пока
Вы не создадите скрытый файл в Вашей домашней директории.
Создайте текстовый файл, назовите его .gtkrc-2.0 и добавьте в него
следующую строку:
gtk-font-name = "Verdana 9"
или другой шрифт, который Вы выбрали в KDE.
Это все. Надеюсь, я ничего не забыл.
Другие ссылки по теме:
- http://mysite.verizon.net/vze8992v
- http://convexhull.com/mandrake_fonts.html
- http://avi.alkalay.net/linux/docs/font-howto/Font.html
- http://distributions.linux.com/howtos/Font-HOWTO/fix.shtmlДополнение
Если вы используете KDM, то можно задать плотность пикселей и не
высчитывая вручную геометрию экрана. Для этого редактируем файл kdmrc
(в Gentoo он находится в /usr/kde/3.5/share/config/kdm/, в вашем
дистрибутиве смотрите размещение KDE). Находим следующую секцию:
[X-:*-Core]
AllowNullPasswd=true
AllowShutdown=All
NoPassEnable=false
NoPassUsers=
ServerArgsLocal=-nolisten tcp -dpi 96 #<-- обратите внимание.
ServerCmd=/usr/bin/X -br
Это особенно полезно будет на "живых" CD, если вы собираете свой или
"затачиваете под себя" чужой - ведь вы же не знаете, на каком мониторе
с каким разрешением вы будете его запускать.
Я не использую XDM, GDM и Entrance, но наверняка и в их конфигах есть
подобная строка.
ОС: Slackware 10.2 На всякий случай добавлю: при установке
последней версии freetype2 (2.1.10)
в файле ./include/freetype/config/ftoption.h нужно не заменить строку
#undef TT_CONFIG_OPTION_BYTECODE_INTERPRETER
на
#define TT_CONFIG_OPTION_BYTECODE_INTERPRETER
а просто разкомментировать последнюю.
При установке на Suse 9.3 я, как и автор статьи, не сносил старую
версию программы, а ставил новую поверх. У меня также все прошло без
проблем.
Я тоже внесу свои 5 копеек, в Gentoo
делать манипуляции с файлом /include/freetype/config/ftoption.h не
нужно, все они выполняються на стадии сборки пакета. Соответсвенно в
генту надо только подправить xorg.conf.
На всякий случай добавлю: при установке последней
версии freetype2 (2.1.10)
в файле ./include/freetype/config/ftoption.h нужно не заменить строку
В include-файлах символ '#' - это не комментарий, а начало директивы
компилятора. #undef говорит компилятору, что идентефикатор не будет
определен (компилятор потом будет компилировать код по разному, в
зависимости от того, определен этот идентификатор или нет). Ее замена
на #define определяет этот идентификатор и компилятор будет компилить
код по-другому.
Замечательный HOWTO. У меня Mandriva 2006.0 - все сработало в точности, как описано. Ничего лишнего выдумывать не пришлось, кроме игрищ с вариантами включения-выключения сглаживания (типа подбора диапазона, хинтинга и способа межточечного сглаживания - RGB/BGR/Monochrome Horizontal/Vertical). На экран теперь приятно смотреть. Даже The Bat! под линуксом выглядит получше, хотя я собственно со шрифтами WINE еще не возился. Автору - спасибо.
Все сработало нормально. Правда установить ttf-шрифты в администраторском режиме не удалось - получилось только в режиме пользователя.
Я использовал MandrivaLinux-2007 и пакет freetype-2.3.4. Теперь ttf-шрифты в разрешении 96dpi выглядят как и в WinXP.
Автору огромное спасибо.
Я просто обалдеваю!... Откуда берется такой бред. Неужели так сложно прочесть man xorg.conf?...
DisplaySize -- это размер видимой части монитора в миллиметрах -- смотрится в паспорте на монитор, или измеряется линейкой!.. И соответственно, X'ы сами рассчитают DPI под любые разрешения.
Причем, современные мониторы сами отдают свой размер через EDID, что можно обнаружить в логах X'ов и в этом случае DisplaySize не нужен.
И в отличии от Windows, который применяет DPI избирательно, -- X'ы применяют DPI всегда. Так что, вопрос о качестве отображения шрифтов должен быть направлен в иную сторону.