Как установить пользовательский шрифт в Linux, либо непосредственно из C++, либо с помощью системной команды?
Я имею в виду какой-то способ, как AddFontResource в окнах.
Ответ зависит от рабочего процесса для распространения и запуска вашей программы. Если это программный пакет, который установлен системным администратором, то шрифт следует поместить в каталог системных шрифтов (обычно это каталог под /usr/share/fonts/
, например /usr/share/fonts/ttf/
), когда пакет устанавливается. Если программа устанавливается непривилегированным пользователем, файл шрифта должен перейти в $HOME/.fonts/
.
Если шрифт установлен в общесистемной системе, он появляется [автоматически] в системе (у типичного дистрибутива Linux уже есть соответствующие перехваты в подсистеме управления пакетами для восстановления кешей шрифтов). Если шрифт установлен "вручную" (например, пользователь просто копирует файл в свой файл $HOME/.fonts/
), тогда может потребоваться вызов fc-cache --force
.
Более подробное объяснение: шрифты в современной установке Linux управляются подсистемой под названием fontconfig. Эта подсистема имеет общесистемную конфигурацию (по умолчанию находится в /etc/fonts/fonts.conf
и /etc/fonts/conf.d/
) и конфигурации для каждого пользователя (проверяются различные местоположения). Fontconfig поддерживает кеш всех шрифтов, зарегистрированных в системе. Когда кто-то хочет зарегистрировать другой шрифт, он или она помещает файл шрифта в один из каталогов, известных как fontconfig
и инициирует fc-cache
утилиты кэша w/fc-cache
. Если шрифт установлен в системном масштабе, тогда система упаковки обычно имеет соответствующие перехватчики, которые автоматически вызывают fc-cache
при создании или удалении файла в "хорошо известном каталоге шрифтов".