arch-wiki-md-repo
Version:
All arch-wiki articles in markdown format, updated every two days.
828 lines (646 loc) • 41.6 kB
Markdown
Related articles
* [Настройка шрифтов](/index.php/%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_%D1%88%D1%80%D0%B8%D1%84%D1%82%D0%BE%D0%B2 "Настройка шрифтов")
* [Infinality (Русский)](/index.php/Infinality_(%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9) "Infinality (Русский)")
* [Шрифты окружения Java Runtime](/index.php/%D0%A8%D1%80%D0%B8%D1%84%D1%82%D1%8B_%D0%BE%D0%BA%D1%80%D1%83%D0%B6%D0%B5%D0%BD%D0%B8%D1%8F_Java_Runtime "Шрифты окружения Java Runtime")
* [Шрифты Microsoft](/index.php/%D0%A8%D1%80%D0%B8%D1%84%D1%82%D1%8B_Microsoft "Шрифты Microsoft")
Согласно [Википедии](https://ru.wikipedia.org/wiki/Шрифт):
*Шрифт (нем. Schrift ← schreiben — писать) — графический рисунок начертаний букв и знаков, составляющих единую стилистическую и композиционную систему, набор символов определенного размера и рисунка.*
Имейте в виду, что лицензия некоторых шрифтов может накладывать правовые ограничения.
## Contents
* [1 Форматы шрифтов](#.D0.A4.D0.BE.D1.80.D0.BC.D0.B0.D1.82.D1.8B_.D1.88.D1.80.D0.B8.D1.84.D1.82.D0.BE.D0.B2)
* [1.1 Распространённые расширения](#.D0.A0.D0.B0.D1.81.D0.BF.D1.80.D0.BE.D1.81.D1.82.D1.80.D0.B0.D0.BD.D1.91.D0.BD.D0.BD.D1.8B.D0.B5_.D1.80.D0.B0.D1.81.D1.88.D0.B8.D1.80.D0.B5.D0.BD.D0.B8.D1.8F)
* [1.2 Другие форматы](#.D0.94.D1.80.D1.83.D0.B3.D0.B8.D0.B5_.D1.84.D0.BE.D1.80.D0.BC.D0.B0.D1.82.D1.8B)
* [2 Установка](#.D0.A3.D1.81.D1.82.D0.B0.D0.BD.D0.BE.D0.B2.D0.BA.D0.B0)
* [2.1 Pacman](#Pacman)
* [2.2 Создание пакета](#.D0.A1.D0.BE.D0.B7.D0.B4.D0.B0.D0.BD.D0.B8.D0.B5_.D0.BF.D0.B0.D0.BA.D0.B5.D1.82.D0.B0)
* [2.3 Установка вручную](#.D0.A3.D1.81.D1.82.D0.B0.D0.BD.D0.BE.D0.B2.D0.BA.D0.B0_.D0.B2.D1.80.D1.83.D1.87.D0.BD.D1.83.D1.8E)
* [3 Рекомендации по выбору шрифтов](#.D0.A0.D0.B5.D0.BA.D0.BE.D0.BC.D0.B5.D0.BD.D0.B4.D0.B0.D1.86.D0.B8.D0.B8_.D0.BF.D0.BE_.D0.B2.D1.8B.D0.B1.D0.BE.D1.80.D1.83_.D1.88.D1.80.D0.B8.D1.84.D1.82.D0.BE.D0.B2)
* [3.1 Установка Droid Fonts](#.D0.A3.D1.81.D1.82.D0.B0.D0.BD.D0.BE.D0.B2.D0.BA.D0.B0_Droid_Fonts)
* [3.2 Установка Bitstream Vera Fonts](#.D0.A3.D1.81.D1.82.D0.B0.D0.BD.D0.BE.D0.B2.D0.BA.D0.B0_Bitstream_Vera_Fonts)
* [3.3 Установка Red Hats Liberation Fonts](#.D0.A3.D1.81.D1.82.D0.B0.D0.BD.D0.BE.D0.B2.D0.BA.D0.B0_Red_Hats_Liberation_Fonts)
* [3.4 Установка шрифтов Microsoft](#.D0.A3.D1.81.D1.82.D0.B0.D0.BD.D0.BE.D0.B2.D0.BA.D0.B0_.D1.88.D1.80.D0.B8.D1.84.D1.82.D0.BE.D0.B2_Microsoft.C2.AE)
* [4 Шрифты с включенным LCD фильтром](#.D0.A8.D1.80.D0.B8.D1.84.D1.82.D1.8B_.D1.81_.D0.B2.D0.BA.D0.BB.D1.8E.D1.87.D0.B5.D0.BD.D0.BD.D1.8B.D0.BC_LCD_.D1.84.D0.B8.D0.BB.D1.8C.D1.82.D1.80.D0.BE.D0.BC)
* [4.1 "LCD" пакеты](#.22LCD.22_.D0.BF.D0.B0.D0.BA.D0.B5.D1.82.D1.8B)
* [4.2 "LCD" пакеты c патчами Ubuntu](#.22LCD.22_.D0.BF.D0.B0.D0.BA.D0.B5.D1.82.D1.8B_c_.D0.BF.D0.B0.D1.82.D1.87.D0.B0.D0.BC.D0.B8_Ubuntu)
* [5 Конфигурация](#.D0.9A.D0.BE.D0.BD.D1.84.D0.B8.D0.B3.D1.83.D1.80.D0.B0.D1.86.D0.B8.D1.8F)
* [5.1 Общие понятия](#.D0.9E.D0.B1.D1.89.D0.B8.D0.B5_.D0.BF.D0.BE.D0.BD.D1.8F.D1.82.D0.B8.D1.8F)
* [5.2 Рекомендации по настройке (для патчей *-ubuntu)](#.D0.A0.D0.B5.D0.BA.D0.BE.D0.BC.D0.B5.D0.BD.D0.B4.D0.B0.D1.86.D0.B8.D0.B8_.D0.BF.D0.BE_.D0.BD.D0.B0.D1.81.D1.82.D1.80.D0.BE.D0.B9.D0.BA.D0.B5_.28.D0.B4.D0.BB.D1.8F_.D0.BF.D0.B0.D1.82.D1.87.D0.B5.D0.B9_.2A-ubuntu.29)
* [5.2.1 cat ~/.fonts.conf (альтернатива настройкам в /etc/fonts/...)](#cat_.7E.2F.fonts.conf_.28.D0.B0.D0.BB.D1.8C.D1.82.D0.B5.D1.80.D0.BD.D0.B0.D1.82.D0.B8.D0.B2.D0.B0_.D0.BD.D0.B0.D1.81.D1.82.D1.80.D0.BE.D0.B9.D0.BA.D0.B0.D0.BC_.D0.B2_.2Fetc.2Ffonts.2F....29)
* [6 Шрифт в консоли](#.D0.A8.D1.80.D0.B8.D1.84.D1.82_.D0.B2_.D0.BA.D0.BE.D0.BD.D1.81.D0.BE.D0.BB.D0.B8)
* [6.1 Теория](#.D0.A2.D0.B5.D0.BE.D1.80.D0.B8.D1.8F)
* [6.2 Практика](#.D0.9F.D1.80.D0.B0.D0.BA.D1.82.D0.B8.D0.BA.D0.B0)
* [7 Внешние ссылки](#.D0.92.D0.BD.D0.B5.D1.88.D0.BD.D0.B8.D0.B5_.D1.81.D1.81.D1.8B.D0.BB.D0.BA.D0.B8)
## Форматы шрифтов
Большинство современных компьютерных шрифтов могут быть в *растровом* или *контурном* формате данных.
Растровые шрифты
Состоит из матрицы точек или пикселей, представляющих рисунок каждого символа во всех размерах.
Контурные или *векторные* шрифты
Используются кривые Безье, инструкции отрисовки и математические формулы для описания каждого символа, что позволяет масштабировать символы в любой размер.
### Распространённые расширения
* `bdf` и `bdf.gz` – растровый шрифт, сжатый в gzip (BDF — *B*itmap *D*istribution *F*ormat)
* `pcf` и `pcf.gz` – растровый, переносимый скомпилированный шрифт, сжатый в gzip
* `psf`, `psfu`, `psf.gz` и `psfu.gz` – bitmaps, *P*C *s*creen *f*ont, *P*C *s*creen *f*ont *U*nicode and the gzipped versions (not compatible with X.Org)
* `pfa` and `pfb` – outline fonts, *P*ostScript *f*ont *A*SCII and *P*ostScript *f*ont *b*inary. PostScript fonts carry built-in printer instructions.
* `ttf` – outline, *T*rue*T*ype *f*ont. Originally designed as a replacement for the PostScript fonts.
* `otf` – outline, *O*pen*T*ype *f*ont. TrueType with PostScript typographic instructions.
В большинстве случаев, технические различия между TrueType и OpenType можно проигнорировать, многие шрифты с расширением {{ic|ttf} обычно OpenType.
### Другие форматы
The typesetting application, *TeX,* and its companion font software, *Metafont,* render characters using their own methods. Some of the file extensions used for fonts by these two programs are `*pk`, `*gf`, `mf` and `vf`.
*FontForge,* a font editing application, can store fonts in its native text-based format, `sfd`, *s*pline *f*ont *d*atabase.
The [SVG](http://www.w3.org/TR/SVG/fonts.html) format also has its own font description method.
## Установка
Существует множество методов установки шрифтов.
### Pacman
Шрифты и их коллекции можно установить из включенных репозиториев используя [pacman](/index.php/Pacman_(%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9) "Pacman (Русский)"). Увидеть список доступных шрифтов можно командой:
```
$ pacman -Ss font
```
Или исключительно `ttf` шрифты:
```
$ pacman -Ss ttf
```
### Создание пакета
Лучше всего предоставить pacman'у возможность управления установленными шрифтами, что можно сделать создав Arch пакет. Этим можно также поделиться с сообществом в [AUR](/index.php/AUR_(%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9) "AUR (Русский)"). Ниже приведён пример создания пакета. Чтобы узнать об этой процедуре больше, смотрите страницу [PKGBUILD](/index.php/PKGBUILD "PKGBUILD").
```
pkgname=ttf-fontname
pkgver=1.0
pkgrel=1
pkgdesc="custom fonts"
arch=('any')
depends=('fontconfig' 'xorg-font-utils')
source=("http://someurl.org/$pkgname.tar.bz2")
install=$pkgname.install
package() {
install -d "$pkgdir/usr/share/fonts/TTF"
cp -dpr --no-preserve=ownership "$srcdir/$pkgname/"*.ttf "$pkgdir/usr/share/fonts/TTF/"
}
```
Данный PKGBUILD предполагает что шрифты - TrueType. Установочный файл (`ttf-fontname.install`) тоже должен быть создан для обновления кеша шрифтов:
```
post_install() {
echo -n "Updating font cache... "
fc-cache -fs >/dev/null
mkfontscale /usr/share/fonts/TTF /usr/share/fonts/Type1
mkfontdir /usr/share/fonts/TTF /usr/share/fonts/Type1
echo "done"
}
post_upgrade() {
post_install
}
post_remove() {
post_install
}
```
Для более удобного создания пакетов из ttf-fonts вы можете также использовать [makefontpkg](https://aur.archlinux.org/packages/makefontpkg/) из [AUR](/index.php/AUR_(%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9) "AUR (Русский)").
### Установка вручную
Рекомендованный метод добавления шрифтов, недоступных в репозиториях, в систему описан в разделе [#Создание пакета](#.D0.A1.D0.BE.D0.B7.D0.B4.D0.B0.D0.BD.D0.B8.D0.B5_.D0.BF.D0.B0.D0.BA.D0.B5.D1.82.D0.B0). Это даёт возможность пакетному менеджеру pacman удалять или обновлять их позднее. Шрифты также могут быть установлены вручную.
Чтобы установить шрифты для всей системы (доступные для всех пользователей), переместите папку шрифтов в директорию `/usr/share/fonts/`. Чтобы установить шрифты только для одного пользователя, добавляйте их директорию `~/.local/share/fonts`.
For Xserver to load fonts directly (as opposed to the use of a *font server*) the directory for your newly added font must be added with a FontPath entry. This entry is located in the *Files* section [of your Xorg configuration file](/index.php/Xorg#Configuration "Xorg") (e.g. `/etc/X11/xorg.conf` or `/etc/xorg.conf`). See [#Older applications](#Older_applications) for more detail.
После чего обновите кеш шрифтов fontconfig:
```
$ fc-cache -vf
```
# Рекомендации по выбору шрифтов
В качестве основного шрифта рабочего окружения можно рекомендовать либо [Droid Fonts](https://en.wikipedia.org/wiki/Droid_(font) "wikipedia:Droid (font)"), либо [Bitstream Vera Fonts](https://ru.wikipedia.org/wiki/Bitstream_Vera), либо [Red Hats Liberation Fonts](http://www.redhat.com/promo/fonts). Однако стоит заметить, что [начертание некоторых букв](http://i.imgur.com/osBDC4e.png) шрифта *Red Hats Liberation Fonts* на данный момент оставляет желать лучшего, поэтому его, в отличие от *Bitstream Vera Fonts*, необходимо устанавливать вручную, а не из репозитория.
## Установка Droid Fonts
`# pacman -S ttf-droid`
## Установка Bitstream Vera Fonts
`# pacman -S ttf-dejavu`
## Установка Red Hats Liberation Fonts
```
# mkdir /usr/share/fonts/TTFmisc
# cd /usr/share/fonts/TTFmisc
# wget -O ./liberation-fonts.tar.gz [https://bugzilla.redhat.com/attachment.cgi?id=290976](https://bugzilla.redhat.com/attachment.cgi?id=290976)
# tar -xf ./liberation-fonts.tar.gz
# cp ./liberation-fonts/*.ttf ./
# rm -R ./liberation-fonts/
# rm -R liberation-fonts.tar.gz
# mkfontscale
# mkfontdir
```
## Установка шрифтов Microsoft
Так как в пакете *ttf-ms-fonts* присутствуют некоторые шрифты, начертание которых на данный момент оставляет желать лучшего, можно воспользоваться альтернативным вариантом их установки, который заключается в выборочной инсталляции только необходимых шрифтов.
Необходимые шрифты Вы можете скачать на [этой](http://sourceforge.net/project/showfiles.php?group_id=34153&package_id=56408) странице веб-сайта [SourceForge.net](https://ru.wikipedia.org/wiki/SourceForge.net)
***Не рекомендуется** скачивать шрифт* Arial*, т.к.* Red Hats Liberation Fonts*, загруженный с сайта [Red Hat Bugzilla](https://bugzilla.redhat.com/show_bug.cgi?id=427791), имеет схожее начертание и более чёткие линии.*
После того, как Вы скачали все необходимые exe-файлы — из них нужно извлечь шрифты в соответствующую папку (напр., `/usr/share/fonts/TTFmisc/`):
```
# cabextract -F *.TTF -d /usr/share/fonts/TTFmisc <имя-пакета>.exe
# cd /usr/share/fonts/TTFmisc
# mkfontscale
# mkfontdir
```
# Шрифты с включенным LCD фильтром
## "LCD" пакеты
**Установка:**
Удалите оригинальные пакеты:
```
# pacman -Rd libxft cairo
```
Установите патченные пакеты из [AUR](https://aur.archlinux.org/packages.php):
```
$ yaourt -S fontconfig-lcd
$ yaourt -S cairo-lcd
# pacman -S libxft-lcd
```
Перезапустите Xorg (`Ctrl+Alt+Backspace`)
**Удаление:**
```
# pacman -Rd libxft-lcd cairo-lcd fontconfig-lcd
# pacman -S libxft cairo
```
## "LCD" пакеты c патчами Ubuntu
**Установка:**
Процесс установки этих пакетов несколько отличается от вышеописанных. Для быстрой и успешной инсталляции все действия должны производиться в такой последовательности:
```
$ yaourt -S freetype2-ubuntu
```
При установке yaourt сообщит о конфликте, конфликтующие пакеты нужно будет удалить.
Аналогично устанавливаются остальные пакеты. Порядок установки пакетов должен быть таким:
```
1\. freetype2-ubuntu
2\. fontconfig-ubuntu
3\. cairo-ubuntu
```
# Конфигурация
## Общие понятия
Настройки, касающиеся отрисовки шрифтов в Xorg, находятся в:
* папке `/etc/fonts/`
* файле `/etc/X11/Xresources` (содержимое ниже)
Содержимое `/etc/fonts/`:
* папка conf.avail - содержит доступные файлы конфигураций
* папка conf.d - содержит символические ссылки на файлы конфигураций (из папки `/etc/fonts/conf.d/`), определяющие параметры шрифтов (отрисовка, замена одних шрифтов другими и т.д.)
* файл fonts.dtd
* файл fonts.conf
Например, для применения автохинтинга шрифтов Free Type необходимо создать в папке `/etc/fonts/conf.d/` символическую ссылку на файл `/etc/fonts/conf.avail/10-autohint.conf`:
```
# ln -s /etc/fonts/conf.avail/10-autohint.conf /etc/fonts/conf.d/10-autohint.conf
```
**Примечание:** В настоящее время не все шрифты с автохинтингом выглядят приемлемо, поэтому рекомендуется его использовать либо для отрисовки шрифтов малого размера, либо не использовать вообще.
Как можно заметить, для файлов конфигурации применяется следующий формат именования:
`<xx>-<sometext>.conf`, где:
`<sometext>` - любой текст, описывающий параметры, находящиеся в этом файле (напр.: "hinting-full");
`<xx>` - двузначное число от 00 до 99, влияет на позицию файла при сортировке по имени, а, соответственно, и на его приоритет: чем больше число - тем выше приоритет.
Например: если в дирректории будут находится два файла с именами `11-hinting-slight.conf` (применение слабого сглаживания) и `10-hinting-medium.conf` (применение среднего сглаживания), то файл `11-hinting-slight.conf` "перекроет" файл `10-hinting-medium.conf` и при отрисовке шрифтов будет использоваться слабое сглаживание.
**Примечание:** В файле `/etc/fonts/conf.d/README` Вы можете более подробно узнать о префиксном нумеровании, применяемого для этих файлов.
## Рекомендации по настройке (для патчей *-ubuntu)
Здесь приведено содержимое конфигурационных файлов/каталогов, так или иначе влияющих на начертание шрифтов в системе.
**Примечание:** Если у Вас в системе всего один пользовательский аккаунт - настраивать шрифты рекомендуется посредством правки файла `~/.fonts.conf` ([#cat (альтернатива настройкам в )](#cat_.28.D0.B0.D0.BB.D1.8C.D1.82.D0.B5.D1.80.D0.BD.D0.B0.D1.82.D0.B8.D0.B2.D0.B0_.D0.BD.D0.B0.D1.81.D1.82.D1.80.D0.BE.D0.B9.D0.BA.D0.B0.D0.BC_.D0.B2_.29)), т.к. это:
* избавит Вас от повторной настройки при переустановке/смене дистрибутива
* удобно для быстрого отката изменений (достаточно сделать копию одного файла, а не нескольких)
Файл `/etc/X11/Xresources`:
```
Xft.dpi: 96
! hintnone, hintslight, hintmedium, hintfull
Xft.hintstyle: hintfull
Xft.hinting: true
! lcdnone, lcddefault, lcdlight, lcdlegacy
Xft.lcdfilter: lcddefault
Xft.rgba: rgb
```
Эти настройки можно также задать персонально для пользователя в файле `~/.Xdefaults`. Подробнее об опциях Xft написано [здесь](http://www.freedesktop.org/wiki/ScreenFontSettings).
Каталог `/etc/fonts/conf.d/` :
```
lrwxrwxrwx 1 root root 31 Апр 9 10:48 10-antialias.conf -> ../conf.avail/10-antialias.conf
lrwxrwxrwx 1 root root 42 Апр 17 13:18 10-hinting-full.conf -> /etc/fonts/conf.avail/10-hinting-full.conf
lrwxrwxrwx 1 root root 29 Апр 9 10:48 10-hinting.conf -> ../conf.avail/10-hinting.conf
lrwxrwxrwx 1 root root 43 Апр 8 18:17 10-sub-pixel-rgb.conf -> /etc/fonts/conf.avail/10-sub-pixel-rgb.conf
lrwxrwxrwx 1 root root 51 Апр 17 13:14 11-lcd-filter-lcddefault.conf -> /etc/fonts/conf.avail/11-lcd-filter-lcddefault.conf
...
lrwxrwxrwx 1 root root 41 Апр 9 10:49 45-latin.conf -> /etc/fonts/conf.avail/45-latin.conf-droid
...
lrwxrwxrwx 1 root root 41 Апр 9 10:49 60-latin.conf -> /etc/fonts/conf.avail/60-latin.conf-droid
...
lrwxrwxrwx 1 root root 34 Апр 8 18:18 99-misc.conf -> /etc/fonts/conf.avail/99-misc.conf
```
Файл `/etc/fonts/conf.d/10-antialias.conf` :
```
<fontconfig>
<match target="font">
<edit name="antialias" mode="assign"><bool>true</bool></edit>
</match>
</fontconfig>
```
Файл `/etc/fonts/conf.d/10-hinting-full.conf` :
```
<fontconfig>
<match target="font">
<edit name="hintstyle" mode="assign"><const>hintfull</const></edit>
</match>
</fontconfig>
```
Файл `/etc/fonts/conf.d/10-hinting.conf` :
```
<fontconfig>
<match target="font">
<edit name="hinting" mode="assign"><bool>true</bool></edit>
</match>
</fontconfig>
```
Файл `/etc/fonts/conf.d/10-sub-pixel-rgb.conf` :
```
<fontconfig>
<match target="font">
<edit name="rgba" mode="assign"><const>rgb</const></edit>
</match>
</fontconfig>
```
Файл `/etc/fonts/conf.d/11-lcd-filter-lcddefault.conf` :
```
<fontconfig>
<match target="font">
<edit mode="assign" name="lcdfilter">
<const>lcddefault</const>
</edit>
</match>
</fontconfig>
```
Файл `/etc/fonts/conf.d/45-latin.conf-droid` :
```
<fontconfig>
<alias>
<family>Droid Serif</family>
<family>Bitstream Vera Serif</family>
<family>DejaVu Serif</family>
<family>Liberation Serif</family>
<family>Times New Roman</family>
<family>Times</family>
<family>Nimbus Roman No9 L</family>
<family>Luxi Serif</family>
<family>Thorndale AMT</family>
<family>Thorndale</family>
<default><family>serif</family></default>
</alias>
<alias>
<family>Droid Sans</family>
<family>Bitstream Vera Sans</family>
<family>DejaVu Sans</family>
<family>Liberation Sans</family>
<family>Arial</family>
<family>Helvetica</family>
<family>Verdana</family>
<family>Albany AMT</family>
<family>Albany</family>
<family>Nimbus Sans L</family>
<family>Luxi Sans</family>
<default><family>sans-serif</family></default>
</alias>
<alias>
<family>Droid Sans Mono</family>
<family>Bitstream Vera Sans Mono</family>
<family>DejaVu Sans Mono</family>
<family>Liberation Mono</family>
<family>Courier New</family>
<family>Courier</family>
<family>Andale Mono</family>
<family>Luxi Mono</family>
<family>Cumberland AMT</family>
<family>Cumberland</family>
<family>Nimbus Mono L</family>
<default><family>monospace</family></default>
</alias>
<alias>
<family>Impact</family>
<family>Copperplate Gothic Std</family>
<family>Cooper Std</family>
<family>Bauhaus Std</family>
<default><family>fantasy</family></default>
</alias>
<alias>
<family>ITC Zapf Chancery Std</family>
<family>Zapfino</family>
<family>Comic Sans MS</family>
<default><family>cursive</family></default>
</alias>
</fontconfig>
```
Файл `/etc/fonts/conf.d/60-latin.conf` :
```
<fontconfig>
<alias>
<family>serif</family>
<prefer>
<family>Droid Serif</family>
<family>DejaVu Serif</family>
<family>Bitstream Vera Serif</family>
<family>Times New Roman</family>
<family>Thorndale AMT</family>
<family>Luxi Serif</family>
<family>Nimbus Roman No9 L</family>
<family>Times</family>
</prefer>
</alias>
<alias>
<family>sans-serif</family>
<prefer>
<family>Droid Sans</family>
<family>DejaVu Sans</family>
<family>Bitstream Vera Sans</family>
<family>Verdana</family>
<family>Arial</family>
<family>Albany AMT</family>
<family>Luxi Sans</family>
<family>Nimbus Sans L</family>
<family>Helvetica</family>
<family>Lucida Sans Unicode</family>
<family>BPG Glaho International</family>
<family>Tahoma</family>
</prefer>
</alias>
<alias>
<family>monospace</family>
<prefer>
<family>Droid Sans Mono</family>
<family>DejaVu Sans Mono</family>
<family>Bitstream Vera Sans Mono</family>
<family>Andale Mono</family>
<family>Courier New</family>
<family>Cumberland AMT</family>
<family>Luxi Mono</family>
<family>Nimbus Mono L</family>
<family>Courier</family>
</prefer>
</alias>
<alias>
<family>fantasy</family>
<prefer>
<family>Impact</family>
<family>Copperplate Gothic Std</family>
<family>Cooper Std</family>
<family>Bauhaus Std</family>
</prefer>
</alias>
<alias>
<family>cursive</family>
<prefer>
<family>ITC Zapf Chancery Std</family>
<family>Zapfino</family>
<family>Comic Sans MS</family>
</prefer>
</alias>
</fontconfig>
```
Файл `/etc/fonts/conf.d/99-misc.conf` :
```
<fontconfig>
<match target="font">
<edit name="rgba" mode="assign">
<const>rgb</const>
</edit>
</match>
<match target="font">
<test name="size" compare="less_eq">
<double>8</double>
</test>
<edit name="autohint" mode="assign">
<bool>true</bool>
</edit>
</match>
<match target="font">
<test name="size" compare="more">
<double>10</double>
</test>
<edit name="hintstyle" mode="assign">
<const>hintslight</const>
</edit>
</match>
<match target="font">
<test name="family">
<string>Tahoma</string>
</test>
<test name="size" compare="eq">
<double>6</double>
</test>
<test name="weight" compare="more_eq">
<const>medium</const>
</test>
<edit name="autohint" mode="assign">
<bool>true</bool>
</edit>
</match>
<match target="pattern" name="family" >
<test name="family" qual="any" >
<string>Clean</string>
</test>
<edit mode="assign" name="family" >
<string>sans-serif</string>
</edit>
</match>
<match target="pattern" name="family" >
<test name="family" qual="any" >
<string>Fixed</string>
</test>
<edit mode="assign" name="family" >
<string>monospace</string>
</edit>
</match>
<match target="pattern" name="family" >
<test name="family" qual="any" >
<string>Nimbus Sans L</string>
</test>
<edit mode="assign" name="family" >
<string>sans-serif</string>
</edit>
</match>
<match target="pattern" name="family" >
<test name="family" qual="any" >
<string>Nimbus Roman No9 L</string>
</test>
<edit mode="assign" name="family" >
<string>serif</string>
</edit>
</match>
<match target="pattern" name="family" >
<test name="family" qual="any" >
<string>Nimbus Mono L</string>
</test>
<edit mode="assign" name="family" >
<string>monospace</string>
</edit>
</match>
</fontconfig>
```
**Примечание:** Рекомендации по настройке характерны для системы, в которой установлены следующие пакеты:
```
cairo-ubuntu
Cairo vector graphics library, with Ubuntu's LCD rendering patches
fontconfig-ubuntu
A library for configuring and customizing font access, with Ubuntu's LCD rendering patches
freetype2-ubuntu
TrueType font rendering library, with Ubuntu's LCD rendering patches
libxft-ubuntu
FreeType-based font drawing library for X, with Ubuntu's LCD rendering patches
ttf-droid
A font created by Ascender Corporation for use by the Open Handset Alliance platform, Android.
```
### cat `~/.fonts.conf` (альтернатива настройкам в `/etc/fonts/...`)
```
<fontconfig>
<match target="font">
<edit name="antialias" mode="assign"><bool>true</bool></edit>
<edit name="autohint" mode="assign"><bool>false</bool></edit>
<edit name="hintstyle" mode="assign"><const>hintfull</const></edit>
<edit name="hinting" mode="assign"><bool>true</bool></edit>
<edit name="rgba" mode="assign"><const>rgb</const></edit>
<edit name="lcdfilter" mode="assign"><const>lcddefault</const></edit>
</match>
<match target="font">
<test name="size" compare="less_eq"><double>8</double></test>
<edit name="autohint" mode="assign"><bool>true</bool></edit>
</match>
<match target="font">
<test name="size" compare="more_eq"><double>14</double></test>
<edit name="rgba" mode="assign"><const>none</const></edit>
</match>
<match target="font">
<test name="family"><string>Tahoma</string></test>
<test name="size" compare="eq"><double>6</double></test>
<test name="weight" compare="more_eq"><const>medium</const></test>
<edit name="autohint" mode="assign"><bool>true</bool></edit>
</match>
<match target="pattern" name="family" >
<test name="family" qual="any" >
<string>Clean</string>
</test>
<edit mode="assign" name="family" >
<string>sans-serif</string>
</edit>
</match>
<match target="pattern" name="family" >
<test name="family" qual="any" >
<string>Fixed</string>
</test>
<edit mode="assign" name="family" >
<string>monospace</string>
</edit>
</match>
<match target="pattern" name="family" >
<test name="family" qual="any" >
<string>Nimbus Sans L</string>
</test>
<edit mode="assign" name="family" >
<string>sans-serif</string>
</edit>
</match>
<match target="pattern" name="family" >
<test name="family" qual="any" >
<string>Nimbus Roman No9 L</string>
</test>
<edit mode="assign" name="family" >
<string>serif</string>
</edit>
</match>
<match target="pattern" name="family" >
<test name="family" qual="any" >
<string>Nimbus Mono L</string>
</test>
<edit mode="assign" name="family" >
<string>monospace</string>
</edit>
</match>
<alias>
<family>Droid Serif</family>
<default><family>serif</family></default>
</alias>
<alias>
<family>Droid Sans</family>
<default><family>sans-serif</family></default>
</alias>
<alias>
<family>Liberation Mono</family>
<default><family>monospace</family></default>
</alias>
<alias>
<family>serif</family>
<prefer><family>Droid Serif</family></prefer>
</alias>
<alias>
<family>sans-serif</family>
<prefer><family>Droid Sans</family></prefer>
</alias>
<alias>
<family>monospace</family>
<prefer><family>Liberation Mono</family></prefer>
</alias>
</fontconfig>
```
# Шрифт в консоли
## Теория
После запуска ядро Linux создаёт и поддерживает текстовую консоль.
Текст, выводимый в символьное устройство `/dev/console` , записывается в специальный буфер в памяти вместе с информацией о цвете.
Для отображения этого текста на экране используется другой буфер, в который загружен специально предназначенный для консоли растровый моноширинный шрифт.
При инициализации консоли в этот буфер записывается дефолтный шрифт, вкомпилированный в ядро (как правило, без кириллицы), а в дальнейшем шрифт в буфере может быть заменён с помощью утилиты `setfont`. Так как в этом буфере находится только содержимое файла со шрифтом, но не его название, ядро не знает, какой шрифт в него загружен, и в случае создания консоли заново, как это происходит при переключении из текстового режима во фрэймбуфер после старта соответствующего видеокарте drm-модуля, шрифт снова сбрасывается в дефолт.
В дополнение к "реальной" консоли, ядро поддерживает динамически расширяемый набор виртуальных консолей `/dev/tty1`, `tty2` и т.д., и корневую виртуальную консоль `/dev/tty0`
Хотя устройства для первых 59 виртуальных консолей создаются заранее, сами консоли при этом остаются в представлении ядра лишь номерами. Реально они появляются только после первой попытки вывода в них текста. На экран все виртуальные консоли выводятся путём подмены буферов в единственной "реальной" консоли, причём буфер шрифта при создании новой виртуальной консоли берётся тот, что был в "реальной" на момент создания.
В результате, если шрифт был загружен в реальную консоль **до** создания виртуальной консоли, в последующем он автоматически распространяется на все виртуальные, в противном случае этого не происходит, и каждая новая виртуальная наследует шрифт из предыдущей видимой, то есть тот, что был загружен в "реальную" в тот момент.
## Практика
В пакете `systemd` за загрузку консольного шрифта отвечает программа `/usr/lib/systemd/systemd-vconsole-setup` , которая читает его имя из параметра `FONT=` в конфиге `/etc/vconsole.conf` . Суффикс/расширение (.psf.gz) файла со шрифтом в конфиге писать не обязательно.
Имеющиеся в системе консольные шрифты находятся в каталоге `/usr/share/kbd/consolefonts/` , проверить их можно, запустив команду `setfont` для каждого из них.
Если для вашей видеокарты при загрузке системы подключается drm-модуль, например i915 для intel, его старт приводит к появлению нового устройства фреймбуфера *(или замене старого на новый)* (`/dev/fb0` и т.д.), и повторной инициализации консоли со сбросом шрифта. Если это происходит уже **после** того, как `systemd-vconsole-setup` загрузила ваш шрифт, вам требуется либо загрузить его повторно, либо [обеспечить старт drm-модуля](/index.php/KMS#Early_KMS_start "KMS") заведомо раньше загрузки шрифта.
Второе проще всего сделать, добавив ваш drm-модуль в строку [MODULES=](/index.php/Mkinitcpio#MODULES "Mkinitcpio") конфига `/etc/mkinitcpio.conf` и перегенерировав образ initramfs. Для стационарной системы этого вполне достаточно.
Если вы используете initramfs с хуком `systemd`, либо вообще не используете initramfs, или ваша же система "переносная", то есть находится на съёмном диске или флешке, и запускается на разных машинах, предпочтительнее первый вариант. Для этого нужно создать правило UDEV, которое будет срабатывать на появление нового устройства `/dev/fb*`
* `/etc/udev/rules.d/96-fb-all-vcs-setup.rules`
```
# Setup all vconsoles for a new framebuffer device
KERNEL=="fb*", ACTION=="add", RUN+="/bin/sh /etc/udev/all-vcs-set.sh"
```
и скрипт, который оно будет запускать:
* `/etc/udev/all-vcs-set.sh`
```
#!/bin/sh
# We must load locale for $VCS util
. /etc/locale.conf
export LANG
VCS=/usr/lib/systemd/systemd-vconsole-setup
# Setup the "real" (current) console first
$VCS
# Setup all other active consoles
for VC in /dev/vcs[0-9]*
do $VCS /dev/tty${VC#/dev/vcs}
done
```
Скрипт читает локаль, которая требуется для нормальной работы утилиты `systemd-vconsole-setup`, после чего выполняет её для "реальной" консоли, и для каждой из созданных на этот момент виртуальных, если такие есть. Для определения инициализированных виртуальных консолей здесь использованы устройства произвольного доступа к текстовым буферам соответствующих консолей `/dev/vcs*`, которые в отличии от `/dev/tty*` создаются только для уже имеющихся консолей.
Возможен ещё один вариант решения – отсрочить загрузку шрифта до момента инициализации фреймбуфера. Для этого можно создать правило UDEV, которое заставит systemd создавать юниты для устройств фреймбуфера:
* `/etc/udev/rules.d/96-fb-systemd.rules`
```
# Register all framebuffer devices in systemd
SUBSYSTEM=="graphics", TAG+="systemd", ENV{SYSTEMD_ALIAS}+="/sys/subsystem/graphics/%k"
```
и дополнить `systemd-vconsole-setup.service`, указав, что установка шрифтов должна ожидать **первой** инициализации фреймбуфера:
* `/etc/systemd/system/systemd-vconsole-setup.service.d/ordering.conf`
```
[Unit]
Requires=sys-subsystem-graphics-fb0.device
After=sys-subsystem-graphics-fb0.device
```
Этот вариант несколько проще, но менее универсален:
* Он **не** будет работать в случаях **повторной** инициализации фреймбуфера, например, если при загрузке VESA-фреймбуфер сменяется на drm-фреймбуфер.
* Также он **не** сможет загрузить шрифт в дополнительные виртуальные консоли, если они появились **до** инициализации фреймбуфера.
* И наконец, он этот вариант **заблокирует загрузку шрифта при отсутствии фреймбуфера**.
Самый простой способ (пере)загрузки шрифта в консоли при инициализации фреймбуфера – прямой вызов утилиты **systemd-vconsole-setup** из правила UDEV:
* `/etc/udev/rules.d/96-fb-vconsole-setup.rules`
```
# Setup vconsole for a new framebuffer device
KERNEL=="fb*", ACTION=="add", IMPORT{file}="/etc/locale.conf", RUN+="/usr/lib/systemd/systemd-vconsole-setup"
```
В этом случае загрузка шрифта не блокируется при отсутствии фреймбуфера, и срабатывает автоматически даже при его повторной инициализации. Единственный недостаток – шрифт не будет загружен для дополнительных виртуальных консолей, если они инициализируются раньше фреймбуфера. Эту возможность учитывает и реализует только решение с шелл-скриптом *(см. выше)*.
# Внешние ссылки
* [Рендеринг шрифтов в X Window: как в ... и даже лучше](http://posix.ru/desktop/x_and_fonts/)
* [Решение проблемы шрифта в консоли – archlinux.org.ru](http://archlinux.org.ru/forum/topic/1090/)