Для ГУИ-шных программ с длинными именами вместо алиасов обычно можно использовать симлинки, уж они наверняка будут восприниматься. Например,
ln -s /usr/bin/thunderbird tb
cac2s
root имеет право на выполнение всех без исключения операций.
root (и только root) имеет право выполнить команду chattr +i , которая устанавливает для файла в ext2/3/4 атрибут “immutable”, что блокирует его изменение и удаление всеми пользователями, включая root.
Также root имеет право выполнить команду chattr -i , которая снимет этот атрибут.
[root@first ~]# echo 1 > test
[root@first ~]# chattr +i test
[root@first ~]# rm test
rm: невозможно удалить «test»: Операция не позволяется
[root@first ~]# chattr -i test
[root@first ~]# rm test
[root@first ~]#
Испытал сие на пакмане. В основном успешно – и пакет обновился, и конфиги остались нетронуты.
Но ругань в консоли стояла многоэтажная :)
Ошибиться было трудно. Я создал два файлика, 00-bold.conf и 99-normal.conf.
Как можно догадаться из названия, первый делал все шрифты жирными, второй – нормальными.
В результате с одним первым шрифт во вновь запускаемой программе становился жирным, с обоими – обычным. То есть, 99 применяется после 00.
/etc/fonts/conf.d/README я читал, там написано почти то же самое, только "in numeric order". Так что на всякий случай пришлось проверить :)
Из /etc/fonts.conf :
<include ignore_missing="yes">conf.d</include>
Из документации:
<include ignore_missing=“no”>
This element contains the name of an additional configuration file or directory. If a directory, every file within that directory starting with an ASCII digit (U+0030 - U+0039) and ending with the string ``.conf'' will be processed in sorted order.
Да нет, тут вроде нигде не неписано “in reversed order”.
Проверил экспериментально – применяется в нормальном порядке, от 0 к 9.
mechanical
переписывать все конфиги
Так я и не переписывал ВСЕ конфиги :)
Просто я не хочу, чтобы пакет снова включал те конфиги, которые я явно выключил.
У fontconfig есть общий файл настроек /etc/fonts/fonts.conf, папка с факультативными настройками /etc/fonts/conf.avail/ и папка симлинками для локальных настроек /etc/fonts/conf.d/ .
conf.d is the conventional name for a directory of additional configuration files managed by external applications or the local administrator.
http://www.freedesktop.org/software/fontconfig/fontconfig-user.html#AEN226
Я бы стерпел, если бы пакет обновлял fonts.conf и conf.avail . Но он лезет в локальные настройки! Если бы разработчики считали, что эти настройки должны обновляться автоматически, папки с симлинками НЕ БЫЛО БЫ, потому что ЭТИ симлинки БЕССМЫСЛЕННЫ, если их нельзя менять! Раз она есть – значит разработчики предназначили её для настройки, а каждый раз приспосабливаться к причудам мэйнтейнеров, которые не согласны с разработчиками, либо считают себя “external applications or the local administrator” в МОЕЙ системе, я не собираюсь :)
создание своего PKGBUILD и ручное его обновление
Ну вот, я так и сделал.
тем более, что обновляется он раз в пятилетку
И это было одним из решающих аргументов. Лучше раз в год обновить самому пакет, чем через год долго искать причину незаметно возникшего бардака со шрифтами.
vadik
chattr +i имя_файла
Это с ~/.fonts.conf ?
Пробовал когда-то делать ему chmod 444, chown root:root, но права пользователя позволяли КДЕ удалять его и создавать заново, что он и делал. Вот chattr +i не пробовал, только что посмотрел, что это такое. Вроде работает, спасибо! :)
Надо будет взять этот метод на вооружение. Против пакетов, правда, не поможет, они под рутом, хотя… если вынести на ФС только для чтения… Нет, тогда пакет выдаст ошибку, а это ещё хуже.
А вот против лихих ГУИ или шаловливых юзеров – сработает. Век живи…

mechanical, я вас понял с первого раза, спасибо и вам за участие!
Вы всё правильно пишете, все настройки можно переопределить в конце, но для этого надо знать, что там в начале, и предусматривать в своём конфиге специальные секции только для отмены вышестоящих. А если там добавят ещё какие-то новшества, то учитывать ещё и их… Уж лучше всё же “с чистого листа”.

А вот с “конфиги из ~/.fonts.conf всё равно применяются последними” ошибочка вышла. Как я уже писал выше, ~/.fonts.conf работает не само по себе, а только потому, что в /etc/fonts/conf.d/50-user.conf -> ../conf.avail/50-user.conf написано:
<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<fontconfig>
        <!-- Load per-user customization file -->
        <include ignore_missing="yes">~/.fonts.conf.d</include>
        <include ignore_missing="yes">~/.fonts.conf</include>
</fontconfig>
То есть, ~/.fonts.conf выполняется как раз в середине, под нумером 50.
КДЕ переписывал, пока я не стал удалять 50-user.conf
Xfce сейчас пока не переписывает.
Другие не проверял, но если у них есть в настройки шрифтов, их сглаживания и т.д., то могут очень даже, а если сейчас не пытаются, но потом что-то в них сломают и опять начнётся.

Но не о том речь. У меня СВОИ конфиги, где подробно расписано, как какие шрифты будут выглядеть при каком размере. И я так или иначе делаю их недоступными для изменений любыми роботами, будь то пакетные скрипты или непрошенные ГУИ-“помошники”.
Папка conf.d/ содержит симлинки специально для того, чтобы их можно было оттуда удалять или добавлять туда. Но авторы пакета почему-то считают своим долгом конфигурировать его сами. Неправильно изменять файлы пакета, но делать пакеты с “зашитыми” конфигами тоже неправильно.
Поэтому, если я не могу запретить этому неправильному пакету выполнять его неправильные скрипты, я не буду неправильно менять его файлы, гораздо правильнее выкинуть весь пакет и сделать свой. :)

У меня уже набралось почти два десятка самосборных пакетов, но там либо меня не устраивала версия, либо требовался патч, либо просто не было в репозиториях.
Теперь просто одним больше, но это первый пакет, который пришлось заменить исключительно из-за конфигов.
Спасибо, я в курсе. Но увы, не подходит.
Пользовательские конфиги очень любят переписывать всякие ушлые *DE, поэтому именно их приходится нейтрализовывать в первую очередь. Допустим, я для этого удаляю симлинк 50-user.conf из conf.d/ . А при обновлении пакета его скрипт заботливо все “недостающие” ссылочки восстановит:
configs=('20-fix-globaladvance.conf'
         '20-unhint-small-vera.conf'
         '29-replace-bitmap-fonts.conf'
         '30-metric-aliases.conf'
         '30-urw-aliases.conf'
         '40-nonlatin.conf'
         '45-latin.conf'
         '49-sansserif.conf'
         '50-user.conf'
         '51-local.conf'
         '60-latin.conf'
         '65-fonts-persian.conf'
         '65-nonlatin.conf'
         '69-unifont.conf'
         '80-delicious.conf'
         '90-synthetic.conf')
post_install() {
  echo -n "updating font cache... "
  /sbin/ldconfig -r .
  pushd /etc/fonts/conf.d > /dev/null
  for config in "${configs[@]}"; do
    ln -sf ../conf.avail/${config} .
  done
  popd > /dev/null
  /usr/bin/fc-cache -f
  echo "done."
}
Насколько я понимаю, каталог conf.d/ всё же предназначен для локальной настройки, а пакет его фактически захватывает.
Так что если действовать по предложенным правилам, то своих конфигов у меня не будет. А они есть, и мне совсем неинтересно, когда их ломают.
Столкнулся с неожиданной проблемой.
Требуется: свои файлы настроек для fontconfig, то есть полностью заменить /etc/fonts/*

Проблема: пакет fontconfig при обновлении пытается заменять файлы конфигурации и добавлять новые, что неприемлемо.
Попытка решения:
NoExtract = etc/fonts/*
NoUpgrade = etc/fonts/*
не работает, более того, install-скрипты пакета в любом случает игнорируют эти параметры.
Полумеры: замена пакета fontconfig на самосборный fontconfig-noconf, без конфигов.
В PKGBUILD:
conflicts=('fontconfig')
provides=('fontconfig=2.8.0')
Мнусы: самосборный пакет придётся обновлять самостоятельно, хотя в нём нет никаких отличий от репозитория, кроме конфигов и скриптов установки.
Может быть, всё же существует более правильный способ запретить определённому пакету прикасаться к конфигам?