?

Log in

No account? Create an account
Previous Entry Поделиться Next Entry
Добавление core X11-шрифтов в FontPath X-сервера в Debian Linux
unix_junkie wrote in ru_linux
Товарищи, здравствуйте.

Я по-прежнему использую core X11 fonts.

В свете того, что из Debian исключили пакет xfs, а пересобрать libxft2 с нужными ключами и опакетить оба компонента под Debian 9 я так и не собрался, фрагмент моего xorg.conf сейчас выглядит так:

Section "Files"
	ModulePath   "/usr/lib/xorg/modules"
	FontPath     "unix/:7100"
	FontPath     "/usr/share/fonts/X11/misc"
	FontPath     "/usr/share/fonts/X11/cyrillic"
	FontPath     "/usr/share/fonts/X11/100dpi/:unscaled"
	FontPath     "/usr/share/fonts/X11/75dpi/:unscaled"
	FontPath     "/usr/share/fonts/X11/Type1"
	FontPath     "/usr/share/fonts/X11/100dpi"
	FontPath     "/usr/share/fonts/X11/75dpi"
	FontPath     "built-ins"
	FontPath	"/usr/share/fonts/opentype/cantarell"

	#
	# ... ещё 100+ строк аналогичного содержания
	#

	FontPath	"/usr/share/fonts/truetype/yanone-kaffeesatz"
EndSection


В каждом из каталогов из списка – сгенерённые fonts.dir и fonts.scale.

Хотя, если бы в системе был xfs, то весь этот зоопарк попал бы в
/etc/X11/fs/config, но от этого не перестал бы быть зоопарком.

И вот хочется этот процесс автоматизировать:


  • автоматически регистрировать/дерегистрировать в xorg.conf и/или
    /etc/X11/fs/config каталоги при установке и удалении шрифтов;

  • автоматически создавать fonts.dir и fonts.scale при
    установке/обновлении пакетов и удалять при удалении.



В Debian 6 и ранее всем этим занимался Defoma ([1], [2]), но метаинформацию ему
предоставляли сопровождающие пакетов со шрифтами (чего сейчас они
делать, естественно, не будут).

Сейчас я посмотрел на соотв. триггеры в Debian 9, но состояние там
малоутешительное: в /etc/X11/fonts/* можно создать свои
*.dir/*.scale/*.alias (через dh_installxfonts), но, во-первых, это
должен сделать сам сопровождающий пакета, и, во-вторых, это работает
только для шрифтов, устанавливаемых в /usr/share/fonts/X11/:

# PROMISE: DH NOOP WITHOUT tmp(usr/share/fonts/X11)

foreach my $package (@{$dh{DOPACKAGES}}) {
        my $tmp=tmpdir($package);

        # Find all font directories in the package build directory.
        my @fontdirs;
        foreach my $parentdir ("$tmp/usr/share/fonts/X11/") {
                opendir(DIR, $parentdir) || next;
                @fontdirs = grep { -d "$parentdir/$_" && !/^\./ } (readdir DIR);
                closedir DIR;
        }

        # ...
}


Можно ли решить проблему через дебиановские триггеры? Может, я таки до
конца не разобрался?

Или какие альтернативы посоветуете?

Дебановских машин несколько (рабочая, домашняя, несколько мобильных),
поэтому подход "напиши на bash цикл и запускай его каждый раз после
обновления пакетов" не нравится.

Запускать виртуальную машину со старым Debian Squeeze и xfs и забирать
шрифты с tcp://squeeze-vm:7100 тоже не хочется.

Всем заранее спасибо.
Метки: , , ,

  • 1
Ну, fontconfig примерно для этого устанавливает триггеры на несколько папочек (см. /var/lib/dpkg/info/fontconfig.triggers ).

Можно или свой такой жэ, или к нему в fontconfig.postinst вписать свои обновления (заодно, во втором случае, можно будет как раз fc-list всякий использовать, поскольку fc-cache ужэ отработает).

В Arch, этим занимается скрипт ALPM.
В самом PKGBUILD fontconfig-infinality-ultimate


[2018-06-20 12:43] [ALPM] running 'systemd-update.hook'...
[2018-06-20 12:44] [PACMAN] Running 'pacman --upgrade fontconfig-infinality-ultimate-2.13.0-1-x86_64.pkg.tar.xz'
[2018-06-20 12:44] [ALPM] transaction started
[2018-06-20 12:44] [ALPM] removed fontconfig (2.13.0+10+g58f5285-1)
[2018-06-20 12:44] [ALPM-SCRIPTLET]
[2018-06-20 12:44] [ALPM-SCRIPTLET] Check for dead symlinks and leftover files
[2018-06-20 12:44] [ALPM-SCRIPTLET] in /etc/fonts/conf.d/
[2018-06-20 12:44] [ALPM-SCRIPTLET]
[2018-06-20 12:44] [ALPM] installed fontconfig-infinality-ultimate (2.13.0-1)
[2018-06-20 12:44] [ALPM-SCRIPTLET]
[2018-06-20 12:44] [ALPM-SCRIPTLET] Thank you for checking out fontconfig-infinality-ultimate.
[2018-06-20 12:44] [ALPM-SCRIPTLET]
[2018-06-20 12:44] [ALPM-SCRIPTLET] By default, fontconfig will use presets for the free font collection
[2018-06-20 12:44] [ALPM-SCRIPTLET] from [infinality-bundle-fonts] repository.
[2018-06-20 12:44] [ALPM-SCRIPTLET]
[2018-06-20 12:44] [ALPM-SCRIPTLET] If you are going to use either a custom font collection or core
[2018-06-20 12:44] [ALPM-SCRIPTLET] Microsoft families, set the appropriate presets using
[2018-06-20 12:44] [ALPM-SCRIPTLET] fc-presets command.
[2018-06-20 12:44] [ALPM-SCRIPTLET]
[2018-06-20 12:44] [ALPM-SCRIPTLET] Removing redundant symlinks ...
[2018-06-20 12:44] [ALPM-SCRIPTLET] Done.
[2018-06-20 12:44] [ALPM-SCRIPTLET] Creating symlinks for free font collection ...
[2018-06-20 12:44] [ALPM-SCRIPTLET] Done.
[2018-06-20 12:44] [ALPM-SCRIPTLET] Updating font cache...
[2018-06-20 12:44] [ALPM-SCRIPTLET] Done.
[2018-06-20 12:44] [ALPM] transaction completed
[2018-06-20 12:44] [ALPM] running 'systemd-update.hook'...



# alpm hook
install -D -m 644 "${srcdir}"/fc-cache-ib.hook \
"${pkgdir}/usr/share/libalpm/hooks/90-fc-cache-ib.hook"


  • 1