Fonts (Русский)

From ArchWiki
Jump to navigation Jump to search

zh-CN:Fonts zh-TW:Fonts Template:Article summary start Template:Article summary text Template:Article summary heading Template:Article summary wiki Template:Article summary wiki Template:Article summary end

Установка шрифтов

Основной каталог размещения шрифтов:

  • /usr/share/fonts/

Шрифты, расположенные в этих каталогах, будут доступны всем пользователям системы. Однако, установка в эти каталоги требует привилегий суперпользователя. Если у вас нет таких полномочий — Вы можете установить шрифты в каталог:

  • ~/.fonts/

Все шрифты, находящиеся в ~/.fonts/ будут доступны только его владельцу.

Установка шрифтов при помощи менеджера пакетов Pacman

Просмотреть все доступные для установки шрифты можно командой:

$ pacman -Ss fonts

Установить необходимый шрифт можно командой pacman -S <имя-пакета>. Например:

# pacman -S ttf-dejavu

Эта команда установит шрифт Bitstream Vera в каталог /usr/share/fonts/TTF/.

Ручная установка шрифтов

Для установки шрифтов вручную необходимо:

  • Скачать необходимые шрифты
  • Создать каталог хранения шрифтов, установленных вручную. Например:
# mkdir /usr/share/fonts/TTFmisc
  • Скопировать/разархивировать в него необходимые шрифты
  • Создать/пересоздать список псевдонимов для имён шрифтов, который необходим X-серверу:
# cd /usr/share/fonts/TTFmisc
# rm ./fonts.scale
# mkfontscale
  • Создать/пересоздать список имён шрифтов в данном каталоге и файлов, в которых они содержатся (необходим X-серверу):
# cd /usr/share/fonts/TTFmisc
# rm ./fonts.dir
# mkfontdir
  • Пересоздать файлы описания fonts.cache-NN для каталогов со шрифтами:
# fc-cache -fv

Рекомендации по выбору шрифтов

В качестве основного шрифта рабочего окружения можно рекомендовать либо Droid Fonts, либо Bitstream Vera Fonts, либо Red Hats Liberation Fonts. Однако стоит заметить, что начертание некоторых букв шрифта 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 
# 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 присутствуют некоторые шрифты, начертание которых на данный момент оставляет желать лучшего, можно воспользоваться альтернативным вариантом их установки, который заключается в выборочной инсталляции только необходимых шрифтов.

Необходимые шрифты Вы можете скачать на этой странице веб-сайта SourceForge.net

Не рекомендуется скачивать шрифт Arial, т.к. Red Hats Liberation Fonts, загруженный с сайта Red Hat Bugzilla, имеет схожее начертание и более чёткие линии.

После того, как Вы скачали все необходимые 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 (с использованием пакета yaourt):

$ yaourt -S fontconfig-lcd
$ yaourt -S cairo-lcd
# pacman -S libxft-lcd

Перезапустите Xorg (Template:Keypress)

Удаление:

# 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. libxft-ubuntu
 4. 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 (Fonts (Русский)#cat ~/.fonts.conf (альтернатива настройкам в /etc/fonts/...)), т.к. это:

  • избавит Вас от повторной настройки при переустановке/смене дистрибутива
  • удобно для быстрого отката изменений (достаточно сделать копию одного файла, а не нескольких)

Файл /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 написано здесь.

Каталог /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 . Суффикс/расширение (.pcf.gz) файла со шрифтом в конфиге писать не обязательно.

Имеющиеся в системе консольные шрифты находятся в каталоге /usr/share/kbd/consolefonts/ , проверить их можно, запустив команду setfont для каждого из них.

Если для вашей видеокарты при загрузке системы подключается drm-модуль, например i915 для intel, его старт приводит к появлению нового устройства фреймбуфера (/dev/fb0 и т.д.), и повторной инициализации консоли со сбросом шрифта. Если это происходит уже ПОСЛЕ того, как systemd-vconsole-setup загрузила ваш шрифт, вам требуется либо загрузить его повторно, либо обеспечить старт drm-модуля заведомо раньше загрузки шрифта.

Второе проще всего сделать, добавив ваш drm-модуль в строку MODULES= конфига /etc/mkinitcpio.conf и перегенерировав образ 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* создаются только для уже имеющихся консолей.

Внешние ссылки