Вопрос или проблема
Я хочу использовать шрифт Inconsolata в консоли tty, но мне нужно сгенерировать шрифт psf
для этого.
Я обнаружил, что есть два инструмента, которые должны подойти: otf2bdf
и bdf2psf
, но каждый раз, когда я пытаюсь использовать второй, получаю:
/usr/bin/bdf2psf: Inconsolata12.bdf: ширина не является целым числом.
Я фактически пытаюсь решить ту же самую проблему. Я разобрался с этим, прочитав обсуждение по электронной почте, которое произошло некоторое время назад.
Посетите здесь.
Мне все еще нужно попробовать это. Я сообщу, если получится.
Редактировать:
Я смог создать шрифт PSF, но не пробовал использовать его как шрифт TTY. Я считаю, что это подразумевалось в вопросе.
Вот как я создал шрифт (скопировано почти дословно из ссылки).
-
Конвертируйте OTF в BDF
otf2bdf -r 72 -p 12 -c C /usr/share/fonts/truetype/incon...a/inconsolata.otf | sed -e "s/AVERAGE_WIDTH.*/AVERAGE_WIDTH 80/" > inconsolata-12.bdf
(вызов sed необходим, потому что bdf2psf проверяет свойство AVERAGE_WIDTH, а не границы шрифта или DWIDTH-ы символов, которые он фактически использует)
-
Конвертируйте файл BDF в файл PSF:
bdf2psf inconsolata-12.bdf /usr/share/bdf2psf/standard.equivalents \ /usr/share/bdf2psf/required.set+/usr/share/bdf2psf/useful.set 256 inconsolata-12.psf
Вот и все.
Итак, я был в поиске создания своей версии знаменитого Proto Nerd Font для своей консоли, и, скажем так, это было похоже на американские горки. После конвертации шрифта в PSF многие символы отображаются как ? (вместо классных символов, которые я хочу). Основные текстовые символы в порядке, но все остальное — просто море ?. 🙄
Информация о системе:
OS: Arch Linux (без DE, без WM)
Shell: Zsh с Starship (жизнь минималиста)
Что я сделал на данный момент:
Конвертируйте TTF в BDF:
otf2bdf -r 72 -p 12 -c C proto.ttf | sed -e "s/AVERAGE_WIDTH.*/AVERAGE_WIDTH 80/" > proto.bdf
Конвертируйте BDF в PSF:
bdf2psf --fb proto.bdf /usr/share/bdf2psf/standard.equivalents /usr/share/bdf2psf/fontsets/Uni2.512 512 proto.psf
Переместите PSF в каталог шрифтов консоли:
Я скопировал сгенерированный proto.psf
в /usr/share/kbd/consolefonts
.
Обновите initramfs:
В /etc/vconsole.conf
, я установил:
FONT=proto.psf
Пересоберите Initramfs и перезагрузитесь:
mkinitcpio -P
После перезагрузки шрифт изменился (ура), но теперь вместо классных символов я просто получаю кучу знаков вопроса. Серьезно, они повсюду. Такое ощущение, что шрифт издевается надо мной. 😂
Проблема:
Похоже, что множество символов отсутствует или неправильно отображается. Я нашел несколько обсуждений, упоминающих подобные проблемы, например, это, но ничего, что прямо решает эту проблему. Это и то обсуждение кажутся единственными местами в интернете, говорящими об этом… и, конечно, второе обсуждение архивировано. LOL.
Кто-нибудь еще проходил через это и может мне помочь? Я начинаю думать, что, возможно, переход на fbdev будет легче, но я действительно предпочел бы, чтобы PSF заработал.
Заранее спасибо, и пусть знаки вопроса никогда не преследуют вас! 😅
.
Ответ или решение
Для успешного создания PSF-шрифта для консоли из OTF-шрифта вам потребуется следовать детализированному руководству, которое включает использование инструментов otf2bdf
и bdf2psf
. Эти инструменты позволяют конвертировать шрифты, но процесс может столкнуться с проблемами, например, некорректной шириной символов, как в вашей ситуации.
Шаги для конвертации OTF в PSF:
-
Конвертация OTF в BDF:
Используйте командуotf2bdf
для преобразования OTF-шрифта в BDF. Например, для шрифта Inconsolata:otf2bdf -r 72 -p 12 -c C /путь/к/inconsolata.otf | sed -e "s/AVERAGE_WIDTH.*/AVERAGE_WIDTH 80/" > inconsolata-12.bdf
Важной частью является использование команды
sed
для корректировки параметраAVERAGE_WIDTH
, так какbdf2psf
проверяет его вместо реальной ширины символов. -
Конвертация BDF в PSF:
Применитеbdf2psf
, чтобы конвертировать BDF-файл в PSF:bdf2psf inconsolata-12.bdf /usr/share/bdf2psf/standard.equivalents /usr/share/bdf2psf/required.set+/usr/share/bdf2psf/useful.set 256 inconsolata-12.psf
Решение проблем с отображением символов:
После успешной конвертации возможно нарушение отображения символов. Это, скорее всего, вызвано недопустимыми символами или неправильной картировкой символов.
Методы устранения:
- Проверьте соответствие символов в файле BDF перед конвертацией в PSF.
- Используйте специальные эквиваленты и наборы символов, которые поддерживают нужные вам символы.
- Рассмотрите использование
fontforge
для более сложного редактирования шрифтов.
Настройка шрифта в системе:
-
Переместите PSF-файл:
Скопируйте созданный PSF-шрифт в каталог консольных шрифтов:sudo cp inconsolata-12.psf /usr/share/kbd/consolefonts/
-
Конфигурация и обновление системы:
Обновите файл конфигурации/etc/vconsole.conf
, добавив или изменив строку:FONT=inconsolata-12.psf
Затем выполните команду для обновления initramfs:
mkinitcpio -P
-
Перезагрузка:
Перезагрузите систему, чтобы изменения вступили в силу.
Заключение
Конвертация шрифтов с OTF в PSF может быть сложной задачей из-за нюансов настройки и разных форматов символов. Если проблемы отображения сохраняются, возможно, имеет смысл исследовать другие форматы шрифтов или использованные наборы символов.
Для получения стабильного результата, постоянно тестируйте отображение шрифта в своей системе. Удачной вам работы с шрифтами, и пусть символы отображаются корректно!