UNPKG

arch-wiki-md-repo

Version:

All arch-wiki articles in markdown format, updated every two days.

828 lines (646 loc) 41.6 kB
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` : ``` <?xml version="1.0"?> <!DOCTYPE fontconfig SYSTEM "fonts.dtd"> <fontconfig> <match target="font"> <edit name="antialias" mode="assign"><bool>true</bool></edit> </match> </fontconfig> ``` Файл `/etc/fonts/conf.d/10-hinting-full.conf` : ``` <?xml version="1.0"?> <!DOCTYPE fontconfig SYSTEM "fonts.dtd"> <fontconfig> <match target="font"> <edit name="hintstyle" mode="assign"><const>hintfull</const></edit> </match> </fontconfig> ``` Файл `/etc/fonts/conf.d/10-hinting.conf` : ``` <?xml version="1.0"?> <!DOCTYPE fontconfig SYSTEM "fonts.dtd"> <fontconfig> <match target="font"> <edit name="hinting" mode="assign"><bool>true</bool></edit> </match> </fontconfig> ``` Файл `/etc/fonts/conf.d/10-sub-pixel-rgb.conf` : ``` <?xml version="1.0"?> <!DOCTYPE fontconfig SYSTEM "fonts.dtd"> <fontconfig> <match target="font"> <edit name="rgba" mode="assign"><const>rgb</const></edit> </match> </fontconfig> ``` Файл `/etc/fonts/conf.d/11-lcd-filter-lcddefault.conf` : ``` <?xml version="1.0"?> <!DOCTYPE fontconfig SYSTEM "fonts.dtd"> <fontconfig> <match target="font"> <edit mode="assign" name="lcdfilter"> <const>lcddefault</const> </edit> </match> </fontconfig> ``` Файл `/etc/fonts/conf.d/45-latin.conf-droid` : ``` <?xml version="1.0"?> <!DOCTYPE fontconfig SYSTEM "fonts.dtd"> <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` : ``` <?xml version="1.0"?> <!DOCTYPE fontconfig SYSTEM "fonts.dtd"> <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` : ``` <?xml version="1.0"?> <!DOCTYPE fontconfig SYSTEM "fonts.dtd"> <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/...`) ``` <?xml version="1.0"?> <!DOCTYPE fontconfig SYSTEM "fonts.dtd"> <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/)