Как создать шрифт PSF для консоли из шрифта OTF?

Вопрос или проблема

Я хочу использовать шрифт Inconsolata в консоли tty, но мне нужно сгенерировать шрифт psf для этого.

Я обнаружил, что есть два инструмента, которые должны подойти: otf2bdf и bdf2psf, но каждый раз, когда я пытаюсь использовать второй, получаю:

/usr/bin/bdf2psf: Inconsolata12.bdf: ширина не является целым числом.

Я фактически пытаюсь решить ту же самую проблему. Я разобрался с этим, прочитав обсуждение по электронной почте, которое произошло некоторое время назад.
Посетите здесь.

Мне все еще нужно попробовать это. Я сообщу, если получится.

Редактировать:
Я смог создать шрифт PSF, но не пробовал использовать его как шрифт TTY. Я считаю, что это подразумевалось в вопросе.
Вот как я создал шрифт (скопировано почти дословно из ссылки).

  1. Конвертируйте 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-ы символов, которые он фактически использует)

  2. Конвертируйте файл 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 многие символы отображаются как ? (вместо классных символов, которые я хочу). Основные текстовые символы в порядке, но все остальное — просто море ?. 🙄

Фото с места происшествия:
enter image description here

Информация о системе:

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:

  1. Конвертация 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 проверяет его вместо реальной ширины символов.

  2. Конвертация 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 для более сложного редактирования шрифтов.

Настройка шрифта в системе:

  1. Переместите PSF-файл:
    Скопируйте созданный PSF-шрифт в каталог консольных шрифтов:

    sudo cp inconsolata-12.psf /usr/share/kbd/consolefonts/
  2. Конфигурация и обновление системы:
    Обновите файл конфигурации /etc/vconsole.conf, добавив или изменив строку:

    FONT=inconsolata-12.psf

    Затем выполните команду для обновления initramfs:

    mkinitcpio -P
  3. Перезагрузка:
    Перезагрузите систему, чтобы изменения вступили в силу.

Заключение

Конвертация шрифтов с OTF в PSF может быть сложной задачей из-за нюансов настройки и разных форматов символов. Если проблемы отображения сохраняются, возможно, имеет смысл исследовать другие форматы шрифтов или использованные наборы символов.

Для получения стабильного результата, постоянно тестируйте отображение шрифта в своей системе. Удачной вам работы с шрифтами, и пусть символы отображаются корректно!

Оцените материал
Добавить комментарий

Капча загружается...