# Font Configuration (Русский)

## X.org Font Configuration и украшательство

  Наиболее полная информация тут: Документация по шрифтам Xorg Font.
  Информацию по модулю freetype для X.org ищите здесь: FreeType2 Project Page.
  Много общей информации по шрифтам в Линукс тут:Optimal Use of Fonts on Linux.

### Модули xorg.conf

- freetype - поддержка шрифтов True Type (ttf, ttc), Type1 (pfa, pfb), CID (cid), CFF, Open Type, bitmap (bdf, pcf, snf), Windows (fnt), PFR, and Type42
- type1 - поддержка шрифтов Type1 (pfa, pfb) and CID (cid)
- speedo - поддержка шрифтов Bitstream Speedo (spd)
- xtt - поддержка True Type (ttf, ttc) шрифтов (конфликтует с модулем freetype)
- bitmap - поддержка bitmap (bdf, pcf, snf) шрифтов

Как вы видите, freetype предоставляет те же возможности что и все остальные модули. Модуль xtt конфликтует с модулем freetype.

## Пути шрифтов X.org и /etc/fonts/

### Пути шрифтов xorg.conf

Путь к шрифтам прописаный в файле xorg.conf используется только для не-Xft шрифтов. Хорошо бы указать здесь побольше шрифтов. Приложения не поддерживающие Xft будут искать шрифты по пути шрифтов X сервера. В частности я держу здесь минимум шрифтов - для xterm и его собратьев.

### /etc/fonts/ папки со шрифтами

conf файлы в /etc/fonts (fonts.conf и local.conf) используются fontconfig (шрифты Xft). fonts.conf никогда не должен изменяться, и все изменения должны производиться в local.conf (для общесистемных изменений) или ~/.fonts.conf (для конкретного пользователя). Файлы в /etc/fonts/conf.d начинаются с цифры и заканчиваются .conf.

Папки, указанные в fonts.conf (/usr/share/fonts и ~/.fonts) для использования fontconfig сканируются с помощью fc-cache. Все шрифты должны быть расположены в этих папках. После установки новых шрифтов, чтобы система их увидела, необходимо выполнить fc-cache -fv.

### Добавляем новые шрифты

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

    /usr/bin/fc-cache

Это обновит кэш fontconfig, что позволит fontconfig искать нужные шрифты среди вновь установленых(смотрите секцию выше про /etc/fonts)

    /usr/bin/mkfontscale
    /usr/bin/mkfontdir
    ln -s /usr/share/fonts/encodings/encodings.dir encodings.dir

Запускать эти утилиты надо из папки с новыми шрифтами. mkfontscale создаст файл fonts.scale а mkfontdir создаст файл fonts.dir. Эти файлы используются X сервером, и нужны только для того, чтобы шрифты были доступны через FontPath из X.org. The Програмная связь шрифтов с кодировками позволяет X Server использовать новые шрифты со всеми поддерживаемыми кодировками. После всего этого, в папке для шрифтов у вас должно быть 3 новых файла: fonts.scale, fonts.dir, и encodings.dir.

### Утилиты fc-list и xlsfont

Эти утилиты из командной строки показывают все доступные шрифты для каждой подсистемы. fc-list покажет все шрифты fontconfig, в то время, как xlsfont покажет все X шрифты. Это может быть полезным в комбинации с grep, т.о. чтобы увидеть все доступные шрифты bitstream надо набрать "xlsfonts || grep -i bitstream".

## Места, откуда можно скачать шрифты

- Arkpandora TrueType fonts -- Замена шрифтам Arial и Times New Roman.
- PPants Angular Font Collection (не работает, архивная копия) -- небольшая коллекция Angular-стилизованных шрифтов шириной в 6 пикселов.
- Profont-шрифты для программирования.

## Полезности (Goodies)

### Мои шрифты выглядят ужасно - Я всё правильно настроил, но такое ощущение, что у меня просто нет хороших шрифтов.

Я бы предположил, что следующие пакеты из pacman-а исправят это:

    pacman -S ttf-ms-fonts ttf-cheapskate artwiz-fonts

### У меня есть несколько приложений под Gtk+ 2.2 и ниже, но шрифты выглядят ужасно.

Да, это бывает. В современных приложениях GTK шрифты Xft включены по умолчанию, тем не менее, до версии 2.2 этого не было. Возможно стоит обновить эти приложения до более нового GTK. Если такой опции нет, тогда добавив строку export GDK_USE_XFT=1 в файл глобальных установок (/etc/profile, /etc/profile.d/gnome.sh, ~/.xinitrc, и т.п.) вы включите Xft для старых приложений

### У меня сходная проблема как и выше со старыми приложениями, основанными на Qt.

Похожее решение, добавьте export QT_XFT=true куда-либо в загрузочный файл.

### Шрифты в приложениях Gtk при использовании KDE слишком маленькие

Установите gtk-qt-engine:

    pacman -S gtk-qt-engine

- Измените размер шрифта для приложений Gtk в `Control Center' -> `Appearance & Themes' -> `GTK Styles and Fonts'.

### Интерпретатор bytecode делает мои шрифты некрасивыми, к тому же он наглухо вкомпилен, что мне делать, перекомпилировать?

Нет, не совсем. Встроенное во Freetype auto-hinting выключается достаточно просто. В некоторых дистрибутивах интерпретатор bytecode вкомпилен и включен по умолчанию. Как результат - интерпретатор bytecode перекрывает autohinter freetype-а(которым так гордятся разработчики). Чтобы всё же включить autohinter добавьте следующее в /etc/fonts/local.conf или ~/.fonts.conf

         <match target="pattern">
            <edit name="autohint" mode="assign">
               <bool>true</bool>
            </edit>
         </match>

### Я не понимаю... Интерпретатор bytecode interpreter предполагался как долговременная лучшая замена для autohinter, так что я не понимаю, зачем кому-то использовать autohinter?

Похоже, что интерпретатор bytecode в ветке 2.3 явно слабоват. О нем есть вот такой пост на нашем форуме: https://bbs.archlinux.org/viewtopic.php?id=29976 Этот код сделал мои шрифты гораздо лучше. После перезагрузки всё вернулось на свои места - без понятия почему.

### Autohint работает отлично, но только не для жирных шрифтов. Как можно выключить его только для жирных шрифтов?

Autohinter может сделать ваши шрифты красивее, но часто может сделать их слишком широкими. Это особенно раздражает при использовании жирных шрифтов. К счастью, autohinter можно выключить только для жирных шрифтов и оставить включенным для остальных.

- Включите autohinter (см. выше) и добавьте в /etc/fonts/local.conf или ~/.fonts.conf следующее:

         <match target="font">
             <test name="weight" compare="more">
                 <const>medium</const>
             </test>
             <edit name="autohint" mode="assign">
                 <bool>false</bool>
             </edit>
         </match>

### Мой TFT/DFP/LCD-дисплей использует DVI-кабель, и шрифты выглядят нечётко и размыто

Такое происходит из-за различий между CRT и не-CRT мониторами. Исправить данную проблему можно, включив субпиксельное отображение. Откройте файл /etc/fonts/local.conf для правки и найдите закомментированную секцию "Enable subpixel rendering". Раскомментируйте для включения. Заметим, что это нисколько не улучшит качество изображения на CRT-мониторах. Возможные значения для секции const такие: rgb, bgr, vrgb, bgrv, и none.

         <match target="font">
            <test qual="all" name="rgba"><const>unknown</const></test>
               <edit name="rgba" mode="assign"><const>rgb</const></edit>
         </match>

### Хочу отключить сглаживание для шрифтов меньше определённого размера.

В файле /etc/fonts/local.conf есть соответствующий пример. Он закомментирован, так же как и секция subpixel rendering. Измените compare="less_eq" и <int>12</int> на желаемые значения, сконфигурировав таким образом операцию сравнения и предельного размера шрифта соответственно.

         <match target="pattern">
            <test qual="any" name="size" compare="less_eq">
               <int>12</int>
            </test>
            <edit name="antialias" mode="assign"><bool>false</bool></edit>
         </match>

### Пользуюсь MS TrueType шрифтами (verdana) и хочу включить сглаживание, но только для шрифтов большого размера, которые смотрятся зазубренными.

         <?xml version="1.0"?>
         <!DOCTYPE fontconfig SYSTEM "fonts.dtd">
         <fontconfig>
         <match target="font" >
               <test compare"more" name"size" qual="any" >
                     <double>12</double>
               </test>
               <edit mode"assign" name"antialias" >
                     <bool>true</bool>
               </edit>
         </match>
         <match target="font" >
               <test compare"more" name"pixelsize" qual="any" >
                     <double>17</double>
               </test>
               <edit mode"assign" name"antialias" >
                     <bool>true</bool>
               </edit>
         </match>
         </fontconfig>

### Я хочу добавить больше шрифтов.

Сохраните ваши шрифты в директории и добавьте путь до нее в файл /etc/fonts/local.conf

        <dir>/путь/до/директории</dir>

### Я хочу, чтобы размеры шрифтов соответствовали моим настройкам dpi

Это определяется в /etc/fonts/local.conf. Эти настройки должны соответсвовать вашим настройкам dpi в xorg.conf или вашей команде startx. Используйте xdpyinfo для получения текущих настроек dpi. Большинство пользователей рекомендует/использует значения 96 или 100. Изменение и установка dpi в X выходит за рамки этого документа (смотри Xorg Display size and DPI).

         <match target="pattern">
            <edit name="dpi" mode="assign"><double>100</double></edit>
         </match>

### Не люблю <Шрифт Такой> и хочу использовать вместо него <Шрифт Сякой>

Наиболее подходящий способ сделать это -- добавить нижеприведённый фрагмент XML кода в /etc/fonts/local.conf. В данном случае Nimbus Sans будет использоваться вместо Helvetica:

     <match target="pattern">
         <test name="family"><string>Helvetica</string></test>
         <edit name="family" mode="assign">
             <string>Nimbus Sans</string>
         </edit>
     </match>

Ещё одни вариант -- это использование "предпочтительного" (preferred) шрифта, но это будет работать только если оригинальный шрифт отсутствует в системе. Таким образом, вышеприведённый пример будет выглядеть так:

         <alias>
            <family>Helvetica </family>
            <prefer><family>Bitstream Vera Sans Mono</family></prefer>
            <default><family>fixed</family></default>
         </alias>

### У меня куча ненужных растровых шрифтов, которых мне не надо

Существует только два шрифта, которые необходимы для запуска X - это 'cursor' и 'fixed', оба они хранятся в директории fonts/misc. Если хотите избавиться от всех растровых шрифтов, за исключением этих двух, удалите все файлы в директории misc за исключением cursor.pcf.gz и все шрифты, похожие на 9x18.pcf.gz или 9x18-ISO8859-1.pcf.gz. Когда я удалил все шрифты, кроме тех, из директории misc, у меня осталось около 337 файлов, поэтому если у вас осталось гораздо меньше, вам следует вернуть файлы обратно перед рестартом X.

### Что-то или кто-то отключил все мои немасштабируемые (растровые) шрифты, и я хочу их вернуть

По умолчанию, fontconfig 2.3.2-4 и выше отключает использование растровых шрифтов. Эта установка определяется в /etc/fonts/conf.d/10-no-bitmaps.conf, или в старших версиях в /etc/fonts/conf.d/10-bitmaps.conf. Для использования растровых шрифтов и продолжения их использования после модернизации (апгрейда) fontconfig, сделайте символическую ссылку yes-bitmaps.conf на 10-bitmaps.conf, переписав существующую символическую ссылку на no-bitmaps.conf.

### Фальшивые жирные и курсивные стили для неполных шрифтов

Freetype с некоторого времени уже имеет эту возможность, но только для случаев, когда приложения это запрашивают (что обычно не происходит) - но, тем не менее, не добавляет жирный и курсивный стиль для обыкновенных шрифтов. Чтобы сделать эти стили, необходимо вручную изменить /usr/share/fonts/fonts.cache-1 (и сохранить модификацию где-нибудь еще, так как обновление шрифтов (fc-cache) перепишет ее). Допустим, имеется шрифт Dupree:

         "dupree.ttf" 0 "Dupree:style=Regular:slant=0:weight=80:width=100:foundry=unknown:index=0:outline=True:....

Продублируйте строчку, измените style=Regular на style=Bold или другой стиль, который хотите получить. Также поменяйте slant=0 на slant=100 для курсива, weight=80 на weight=200 для жирного стиля (объедините значения для жирного курсива):

         "dupree.ttf" 0 "Dupree:style=Bold Italic:slant=100:weight=200:width=100:foundry=unknown:index=0:outline=True:....

Затем добавьте изменения в ~/.fonts.conf:

         <match target="font">
            <test name="family" qual="any">
               <string>Dupree</string>
               <!-- другие шрифты .... -->
            </test>
            <test compare="more_eq" name="weight"><int>140</int></test>
            <edit mode="assign" name="embolden"><bool>true</bool></edit>
         </match>
         <match target="font">
            <test name="family" qual="any">
               <string>Dupree</string>
               <!-- другие шрифты .... -->
            </test>
            <test compare="more_eq" name="slant"><int>80</int></test>
            <edit mode="assign" name="matrix">
               <times>
                  <name>matrix</name>
                  <matrix>
                     <double>1</double><double>0.2</double>
                     <double>0</double><double>1</double>
                  </matrix>
               </times>
            </edit>
         </match>

(Заметьте, что можно использовать жирные шрифты - чтобы сделать их еще жирнее)

### Файл fonts/local.conf для вэб-разработчика, взятый с арч-форума

Сделайте копию существующей конфигурации и попробуйте вот эту. Я заметил, что она существенно улучшает шрифт Georgia.

    <?xml version="1.0"?>
    <!DOCTYPE fontconfig SYSTEM "fonts.dtd">

    <!-- the cathectic LCD tweaks, from linuxquestions.org,
     http://www.linuxquestions.org/questions/showthread.php?postid=1361098#post1361098 -->

    <fontconfig>

    <!-- Disable sub-pixel rendering.
     X detects it anyway, and if you set this as well, it just looks really horrible  -->
    <match target="font" >
    	<edit mode="assign" name="rgba" >
    	 <const>none</const>
    	</edit>
     </match>
     <match target="font" >
    	<edit mode="assign" name="hinting">
    	 <bool>true</bool>
    	</edit>
     </match>
     <match target="font" >
    	<edit mode="assign" name="hintstyle">
    	 <const>hintfull</const>
    	</edit>
     </match>

    <!-- The first part of the 'magic.'
     This makes the fonts start to look nice,
     but some of the shapes will be distorted, so hinting is needed still -->
     <match target="font" >
    	<edit mode="assign" name="antialias">
    	 <bool>true</bool>
    	</edit>
     </match>

    <!-- Autohinter is not turned on automatically.
     Only disable this if you have recompiled Freetype with the bytecode interpreter,
     which is run automatically.<br />  -->
     <match target="pattern" >
    	<edit mode="assign" name="autohint">
    	 <bool>true</bool>
    	</edit>
     </match>
     <match target="font">
    		 <test name="weight" compare="more">
    				 <const>medium</const>
    		 </test>
    		 <edit name="autohint" mode="assign">
    				 <bool>false</bool>
    		 </edit>
     </match>
    <!-- Helvetica is a non true type font, and will look bad.
     This replaces it with whatever is the default sans-serif font -->
     <match target="pattern" name="family" >
    	<test name="family" qual="any" >
    	 <string>Helvetica</string>
    	</test>
    	<edit mode="assign" name="family" >
    	 <string>sans-serif</string>
    	</edit>
     </match>
     <dir>~/.fonts</dir>
    </fontconfig>

### Включение/выключение сглаживания для определённых шрифтов

    <match target="font">
    	<edit name="antialias" mode="assign"><bool>false</bool></edit>
    </match>

    <match target="font" name="family">
    	<test qual="any" name="family">
    		<string>DejaVu Sans</string>
    		<string>DejaVu Serif</string>
    	</test>
                <edit name="antialias" mode="assign"><bool>true</bool></edit>

    </match>

Запрещает сглаживание всех шрифтов кроме DejaVu Serif и DejaVu Sans. Если поменять местами «false» «true» результат будет противоположным (сглажены все шрифты кроме DejaVu Serif и DejaVu Sans).

Categories:

- X Server (Русский)
- Tutorials (Русский)
- Русский
- Eye candy (Русский)