Вопрос или проблема
Я использую 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:
- Получите пакет otb-шрифтов с сайта https://www.archlinux.org/packages/community/any/terminus-font-otb/ (ссылка Download From Mirror)
- Преобразуйте пакет в .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
- Удалите /etc/fonts/conf.d/70-no-bitmaps.conf
- Установите полученный deb-пакет:
sudo dpkg -i terminus-font-otb_4.48-2_all.deb
- Выход и повторный вход (или перезапуск 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 поддержка растровых шрифтов в старом формате больше не осуществляется. Я попытался следовать методу на этой странице, но он не сработал для меня.
В итоге мне удалось конвертировать и использовать нужный шрифт, сделав следующие шаги:
- Открыл его в fontforge (
/usr/share/fonts/X11/misc/6x13-ISO8859-1.pcf.gz
) - Редактирование информации о шрифте (Элемент -> Информация о шрифте), изменив имя и семейство, чтобы оно не конфликтовало с растровым шрифтом.
- Сохранение в формате otb (Файл -> Создать шрифты…) в
~/.fonts
. - Затем добавление нового файла в
/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, необходимо выполнить следующие действия:
-
Удаление конфигурации, запрещающей растровые шрифты:
- Удалите или переименуйте файл
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/
- Удалите или переименуйте файл
-
Перегенерация конфигураций шрифтов:
- Выполните команды:
sudo dpkg-reconfigure fontconfig-config sudo dpkg-reconfigure fontconfig sudo fc-cache -f
Это нужно для применения изменений и обновления кеша шрифтов.
- Выполните команды:
-
Проверка доступа к шрифту:
- Убедитесь, что Fixed шрифты действительно доступны:
fc-list | grep "Fixed" | grep "6x13.pcf"
Здесь мы проверяем наличие нужного шрифта в системе.
- Убедитесь, что Fixed шрифты действительно доступны:
-
Конвертация шрифта в 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
- Если шрифт в формате
-
Конвертация 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
- Скачайте и преобразуйте .bdf файл в .otb:
-
Установка otb шрифта:
- Скопируйте новый otb файл в папку шрифтов и перегенерируйте кеш:
sudo cp myfixed.otb /usr/local/share/fonts sudo fc-cache -f
- Скопируйте новый otb файл в папку шрифтов и перегенерируйте кеш:
-
Использование шрифта в терминале:
- Теперь, открыв ваш терминал, вы должны иметь возможность выбрать "MyFixed" в качестве шрифта.
Применение
Данная процедура показывает, как включить поддержу растровых шрифтов в системах, которые изначально их не поддерживают. Подобные действия могут быть полезны для пользователей, которые предпочитают классический вид терминала или нуждаются в специфических шрифтах для работы с старыми программами.
В результате выполнения всех вышеописанных шагов вы сможете использовать растровые шрифты в своей системе, несмотря на их вытесненное положение в современных распределениях Linux. Подобная настройка требует внимательности и понимания процесса работы с системными конфигурациями, однако итогово приводит к успешной интеграции нужного функционала.