Как включить растровые шрифты в версии 20.04?

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

Я использую Ubuntu Mate 20.04. Я хочу использовать шрифт Fixed 6×13 в терминале (не xterm). Когда я пытаюсь изменить шрифт терминала, Fixed шрифты не отображаются в списке доступных шрифтов. Однако mate-font-viewer и xfontsel показывают Fixed шрифты.

Я следовал инструкциям по активации этого шрифта в Как я могу активировать растровые шрифты? и https://ubuntuforums.org/showthread.php?t=1270870. Ни одно из предложенных решений не работает. Вот что я сделал до сих пор:

  • Я установил пакеты xfonts-100dpi и xfonts-75dpi.
  • В /etc/fonts/conf.d/ я удалил 70-no-bitmaps.conf и добавил символическую ссылку 70-yes-bitmaps.conf или 70-force-bitmaps.conf. Пробовал оба, по одному за раз.
  • Следуя инструкциям на https://ubuntuforums.org/showthread.php?t=1270870, я специально включил семейство шрифтов Fixed добавлением 69-fixed-bitmaps.conf.
  • На каждом этапе я запускал dpkg-reconfigure fontconfig-config, dpkg-reconfigure fontconfig и fc-cache -f и перезагружал систему.

Как мне использовать эти шрифты на Ubuntu 20.04?

(см. ниже для обновления Wayland в 24.04)

Ubuntu 20.04 требует ручного включения растровых шрифтов, и файл растрового шрифта должен быть в формате OpenType Bitmap (otb).

Включить растровые шрифты:

$ rm /etc/fonts/conf.d/70-no-bitmaps.conf
$ ln -s ../conf.avail/70-force-bitmaps.conf /etc/fonts/conf.d/
$ dpkg-reconfigure fontconfig-config
$ dpkg-reconfigure fontconfig
$ fc-list | grep Fixed | grep 6x13.pcf
/usr/share/fonts/X11/misc/6x13.pcf.gz: Fixed:style=SemiCondensed
/usr/share/fonts/X11/misc/trad--6x13.pcf.gz: Fixed:style=SemiCondensed

Если у вас нет otb-шрифта, его необходимо конвертировать из bdf-шрифта (конвертация из pcf приведет к неправильному размеру). Это можно сделать с помощью fonttosfnt. К сожалению, версия fonttosfnt в Ubuntu 20.04.1 содержит ошибки и выводит шрифты с неправильными интервалами (см. 1, 2), поэтому необходимо использовать последнюю версию кода из git.

Установить последнюю версию fonttosfnt из git:

$ git clone https://gitlab.freedesktop.org/xorg/app/fonttosfnt.git
$ apt-get build-dep xfonts-utils libfreetype6-dev libfontconfig1-dev xclip libfontenc-dev x11proto-core-dev
$ cd fonttosfnt
$ ./autogen.sh
$ ./configure
$ make

Скачать 6×13.bdf, переименовать для избежания конфликта с .pcf-шрифтом и конвертировать в otb:

wget https://opensource.apple.com/source/X11fonts/X11fonts-14/font-misc-misc/font-misc-misc-1.1.2/6x13.bdf
sed -i 's/FAMILY_NAME.*/FAMILY_NAME "MyFixed"/' 6x13.bdf
./fonttosfnt -b -c -g 2 -m 2 -o myfixed.otb 6x13.bdf

Установить новый otb-шрифт:

$ cp myfixed.otb /usr/local/share/fonts
$ dpkg-reconfigure fontconfig-config
$ dpkg-reconfigure fontconfig
$ fc-list | grep otb
/usr/local/share/fonts/myfixed.otb: MyFixed:style=SemiCondensed

Запустить приложение, выбрать шрифт, искать “myfixed”.

Обновление Ubuntu 24.04 (Wayland):

Хорошая новость заключается в том, что это все еще работает, и некоторые из шагов стали проще. Плохая новость в том, что системный шрифт 6x13 все еще не обновлен до otb, и fonttosfnt также не обновлен, так что нам все еще нужно собрать код из github и вручную конвертировать bdf-шрифт:

$ sudo cat > /etc/fonts/conf.d/70-force-bitmaps.conf << EOF
<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<fontconfig>
<!-- Accept bitmap fonts -->
 <selectfont>
  <acceptfont>
   <pattern>
     <patelt name="scalable"><bool>false</bool></patelt>
   </pattern>
  </acceptfont>
 </selectfont>
</fontconfig>
EOF
$ fc-list | grep Fixed | grep 6x13.pcf
/usr/share/fonts/X11/misc/6x13.pcf.gz: Misc Fixed:style=SemiCondensed
$ git clone https://gitlab.freedesktop.org/xorg/app/fonttosfnt.git
$ sudo apt-get build-dep xfonts-utils
$ cd fonttosfnt
$ ./autogen.sh
$ ./configure
$ make
$ wget https://opensource.apple.com/source/X11fonts/X11fonts-14/font-misc-misc/font-misc-misc-1.1.2/6x13.bdf
$ sed -i 's/FAMILY_NAME.*/FAMILY_NAME "MyFixed"/' 6x13.bdf
$ ./fonttosfnt -b -c -g 2 -m 2 -o myfixed.otb 6x13.bdf
$ sudo cp myfixed.otb /usr/local/share/fonts
$ fc-list | grep otb
/usr/local/share/fonts/myfixed.otb: MyFixed:style=SemiCondensed

UPD: в 22.04 появилась пакет fonts-terminus-otb, так что нужно только удалить /etc/fonts/conf.d/70-no-bitmaps.conf и перезапустить X.

Оригинальный ответ:

Тем временем Ubuntu прекратила поддержку растровых шрифтов terminus, включенных в дистрибутив, я использовал otb-растровые шрифты из ArcLinux.
Оригинальный рецепт отсюда: https://forum.manjaro.org/t/howto-use-terminus-bitmap-font-with-pango-1-44/101442

Вот его адаптация для Ubuntu 20.04:

  1. Получите пакет otb-шрифтов с сайта https://www.archlinux.org/packages/community/any/terminus-font-otb/ (ссылка Download From Mirror)
  2. Преобразуйте пакет в .deb с помощью alien:
    zstd -d terminus-font-otb-4.48-3-any.pkg.tar.zst
    fakeroot alien terminus-font-otb-4.48-3-any.pkg.tar
  1. Удалите /etc/fonts/conf.d/70-no-bitmaps.conf
  2. Установите полученный deb-пакет:
    sudo dpkg -i terminus-font-otb_4.48-2_all.deb
  1. Выход и повторный вход (или перезапуск X другим способом)

Вуаля! Красивые шрифты terminus снова доступны!

Новая версия 4.49 шрифтов Terminus включает установщик OTB-шрифтов. Это работает с новым libpango, который отказался от поддержки старых растровых шрифтов. Убедитесь, что вы удалили пакеты шрифтов Terminus, установленные в дистрибутиве, и затем выполните следующие действия:

tar xzf terminus-font-4.49.1.tar.gz
cd terminus-font-4.49.1
make otb
sudo make install-otb
sudo cp 75-yes-terminus.conf /etc/fonts/conf.d/
sudo dpkg-reconfigure fontconfig

Шрифт должен стать доступным сразу, и перезапуск терминала не требуется. Проверено с шрифтом 8×16 (размер=11) в mate-terminal, работает как в старом добром 18.04. Я действительно очень доволен, потому что замена TTF для Terminus была довольно плохой.

Согласно https://fedoraproject.org/wiki/BitmapFontConversion поддержка растровых шрифтов в старом формате больше не осуществляется. Я попытался следовать методу на этой странице, но он не сработал для меня.

В итоге мне удалось конвертировать и использовать нужный шрифт, сделав следующие шаги:

  1. Открыл его в fontforge (/usr/share/fonts/X11/misc/6x13-ISO8859-1.pcf.gz)
  2. Редактирование информации о шрифте (Элемент -> Информация о шрифте), изменив имя и семейство, чтобы оно не конфликтовало с растровым шрифтом.
  3. Сохранение в формате otb (Файл -> Создать шрифты…) в ~/.fonts.
  4. Затем добавление нового файла в /etc/fonts/font.d с моим новым именем семейства шрифтов.

Kubuntu 24.04 – Конвертация из psfu, консольных растровых шрифтов

Благодарность пользователям @bain и @Roux за их замечательные руководства.

Это мой подход к конвертации из консольных шрифтов, которые находятся в формате psfu и имеют встроенную Unicode-разметку. Недавно, когда мне нужно было адаптировать определенное приложение для Linux, чтобы оно успешно компилировалось на старом CentOS 7, я использовал VBox и, как всегда, полюбил те консольные шрифты. Теперь я использую тот же шрифт в моем терминале Kubuntu.

Я взял шрифт из /lib/kbd/consolefonts на CentOS. Вы можете получить нужный вам шрифт из разных источников, и я уверен, что этот метод сработает для любого psfu-шрифта. Шрифт, который я использовал (тот, который мне понравился), это latarcyrheb-sun16.psfu.gz.
Процесс довольно сложный, так как включает несколько этапов, но я чрезвычайно доволен результатами.

1.

Первый инструмент, который используется, это PSF Tools с сайта https://www.seasip.info/Unix/PSF/

Скачайте его, настройте и выполните make. Вы можете установить –prefix, чтобы установить его в определенную папку в /usr/local/, так как он заполнит ваш /usr/local/bin множеством инструментов, если будет использоваться стандартный префикс.

2.

gunzip latarcyrheb-sun16.psfu.gz

Теперь мы можем использовать psf2bdf для конвертации в bdf.

psf2bdf latarcyrheb-sun16.psfu > myfont.bdf

Конвертация проходит успешно, но все разметки unicode теряются в этот момент, и bdf-шрифт практически бесполезен.

3.

Получите таблицу из psfu-шрифта

psfgettable latarcyrheb-sun16.psfu latarcyrheb-sun16.table

Извлеченная таблица будет выглядеть следующим образом:

#
# Таблица символов извлечена из шрифта latarcyrheb-sun16.psfu
#
0x000   U+fffd
0x001   U+00a2

Удалите символы # из начала таблицы, так как мы будем её парсить позже, и сохраните файл.

4.

FontForge

Когда вы открываете myfont.bdf в FontForge, шрифт выглядит нормально, но все привязки глифов неверны, поскольку мы потеряли разметки unicode. Мы собираемся использовать скрипт на Python, чтобы присвоить значения глифам.

import fontforge

def apply_unicode_mappings(font_file, mapping_file, output_file):
    # Открыть BDF шрифт в FontForge
    font = fontforge.open(font_file)

    # Прочитать файл с маппингом и сохранить маппинги в словаре
    unicode_map = {}
    with open(mapping_file, "r") as file:
        for line in file:
            # Каждая строка имеет формат: "0x000 U+fffd"
            parts = line.split()
            glyph_index = int(parts[0], 16)  # Конвертировать из шестнадцатеричной в целое число
            unicode_value = int(parts[1][2:], 16)  # Конвертировать из формата U+xxxx
            unicode_map[glyph_index] = unicode_value

    # Сопоставить каждый глиф в шрифте на основе индекса и таблицы Unicode
    for i, glyph in enumerate(font.glyphs()):
        if i in unicode_map:
            glyph.unicode = unicode_map[i]  # Присвоить правильное значение Unicode

    # Сохранить обновленный шрифт в новый BDF файл
    font.save(output_file)

    print(f"Unicode разметки успешно применены. Шрифт сохранен как {output_file}.")

# Использование: вызвать функцию с путем к файлу шрифта, файлом маппинга и файлом вывода
apply_unicode_mappings("myfont.bdf", "latarcyrheb-sun16.table", "updated_font_with_unicode.bdf")

и сохраните как parser.py

5.

Парсинг

Теперь магия! Разместите файлы в одном месте, ваш шрифт (myfont.bdf в этом случае), таблицу и скрипт. Из терминала вызовите FontForge:

fontforge -script parser.py

Вы бы изменили имена файлов для ваших шрифтов, но здесь я использовал myfont.bdf, и полученный bdf-шрифт будет updated_font_with_unicode.bdf.

6.

FontForge – Создание шрифтов

Когда вы открываете новый созданный шрифт, вы увидите, что все глифы правильно присвоены.
Перейдите в Создание шрифтов и выберите Только растровый шрифт X11 sfnt (otb), и будет создан otb-шрифт.

7.

Работа завершена

Вы можете обратиться к шагам, предоставленным @bain, чтобы включить растровые шрифты и установить его.

Ubuntu 22.04.1 LTS

apt install fonts-terminus-otb

Работает для меня в gvim.
Часть .gvimrc

set gfn=Terminus\ Medium\ 13

Не работает в gnome terminal по неизвестным причинам.

Ответ или решение

Для активации шрифтов растрового типа (bitmap fonts) в Ubuntu Mate 20.04 требуется выполнить ряд специфических шагов, чтобы обойти ограничения, связанные с настройками системы. Рассмотрим пошагово, как вы сможете интегрировать шрифт Fixed 6×13 в ваш терминал, если он не отображается в списке доступных.

Теория

Растровые шрифты представляют собой набор пикселей, каждый из которых отображает символ. В отличие от векторных шрифтов, растровые шрифты зависят от конкретного разрешения экрана и размера, на котором они отображаются. Несмотря на то, что они часто обеспечивали более четкое отображение на старых системах, современные дистрибутивы Linux, такие как Ubuntu, отказываются от использования растровых шрифтов по умолчанию в пользу более универсальных шрифтов в формате OpenType.

Пример

Для того чтобы включить растровые шрифты в Ubuntu 20.04, необходимо выполнить следующие действия:

  1. Удаление конфигурации, запрещающей растровые шрифты:

    • Удалите или переименуйте файл 70-no-bitmaps.conf в директории /etc/fonts/conf.d/. Это позволит системе начинать учитывать растровые шрифты.
    • Создайте символьную ссылку на 70-force-bitmaps.conf в вышеупомянутой директории:
      sudo ln -s /etc/fonts/conf.avail/70-force-bitmaps.conf /etc/fonts/conf.d/
  2. Перегенерация конфигураций шрифтов:

    • Выполните команды:
      sudo dpkg-reconfigure fontconfig-config
      sudo dpkg-reconfigure fontconfig
      sudo fc-cache -f

      Это нужно для применения изменений и обновления кеша шрифтов.

  3. Проверка доступа к шрифту:

    • Убедитесь, что Fixed шрифты действительно доступны:
      fc-list | grep "Fixed" | grep "6x13.pcf"

      Здесь мы проверяем наличие нужного шрифта в системе.

  4. Конвертация шрифта в otb:

    • Если шрифт в формате .pcf недоступен, его нужно сконвертировать. Для этого рекомендуется использовать fonttosfnt. В Ubuntu 20.04 версия этого инструмента содержит ошибки, поэтому необходимо скачать и собрать последнюю версию из репозитория:
      git clone https://gitlab.freedesktop.org/xorg/app/fonttosfnt.git
      sudo apt-get build-dep xfonts-utils libfreetype6-dev libfontconfig1-dev xclip libfontenc-dev x11proto-core-dev
      cd fonttosfnt
      ./autogen.sh
      ./configure
      make
  5. Конвертация bdf в otb:

    • Скачайте и преобразуйте .bdf файл в .otb:
      wget https://opensource.apple.com/source/X11fonts/X11fonts-14/font-misc-misc/font-misc-misc-1.1.2/6x13.bdf
      sed -i 's/FAMILY_NAME.*/FAMILY_NAME "MyFixed"/' 6x13.bdf
      ./fonttosfnt -b -c -g 2 -m 2 -o myfixed.otb 6x13.bdf
  6. Установка otb шрифта:

    • Скопируйте новый otb файл в папку шрифтов и перегенерируйте кеш:
      sudo cp myfixed.otb /usr/local/share/fonts
      sudo fc-cache -f
  7. Использование шрифта в терминале:

    • Теперь, открыв ваш терминал, вы должны иметь возможность выбрать "MyFixed" в качестве шрифта.

Применение

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

В результате выполнения всех вышеописанных шагов вы сможете использовать растровые шрифты в своей системе, несмотря на их вытесненное положение в современных распределениях Linux. Подобная настройка требует внимательности и понимания процесса работы с системными конфигурациями, однако итогово приводит к успешной интеграции нужного функционала.

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

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