В чем разница между .Xresources и .Xdefaults?

59

Эти два файла имеют одинаковую функцию. В чем разница между двумя, если таковые имеются?

freedrull
источник

Ответы:

68

~/.Xdefaultsэто старый метод хранения X ресурсов. Этот файл перечитывается каждый раз при запуске программы Xlib. Если X11 используется по сети, файл должен присутствовать в той же файловой системе, что и программы.

~/.Xresourcesновее. Он загружается xrdbв RESOURCE_MANAGERсвойство корневого окна X11. Всякий раз, когда какая-либо программа ищет ресурс, он читается прямо из RESOURCE_MANAGER.

Если это свойство не существует, Xlib возвращается к старому методу чтения .Xdefaultsпри каждом запуске программы. Обратите внимание, что большинство дистрибутивов будут загружаться ~/.Xresourcesавтоматически, если они присутствуют, что приведет .Xdefaultsк игнорированию, даже если вы никогда не запускались xrdbвручную.

Преимущество нового метода заключается в том, что достаточно вызвать xrdbодин раз, и ресурсы будут доступны для любой программы, работающей на этом дисплее, будь то локальная или удаленная. (Название ~/.Xresources- только соглашение - вы можете использовать xrdbдля загрузки любого файла, даже .Xdefaults.)

Руководство по программированию Xlib P.441:

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

Позже была создана программа xrdb для хранения настроек пользовательских ресурсов из .Xresources в свойстве XA_RESOURCE_MANAGER корневого окна на текущем X-сервере, поэтому все клиенты, подключенные к одному и тому же серверу, имеют к ним доступ. Если пользователь не вызвал xrdb для установки свойства, тогда читается .Xdefaults.

Википедия :

[...] X-ресурсы хранятся в двух стандартных местах, в зависимости от того, применяются ли они ко всем экранам или к конкретному:

  • свойство RESOURCE_MANAGER корневого окна экрана 0
  • свойство SCREEN_RESOURCES корневого окна произвольного экрана

Это не совсем конец на этом.

  • Там также есть $XENVIRONMENTпеременная, которая по умолчанию, если не установлена. Это используется так же, как , но всегда читается независимо от того , присутствует ли . Вы можете использовать файлы, чтобы сохранить некоторые настройки, специфичные для машины, в то время как они используются для глобальных настроек .~/.Xdefaults-hostname.XdefaultsRESOURCE_MANAGER.Xdefaults-hostnamexrdb

Оба элемента # 4 и # 5, перечисленные ниже, по-видимому, используются только программами на чистом Xlib, а не GTK 3 или другими наборами инструментов.

  • Четвертое местоположение - это каталог, на который указывает $XAPPLRESDIRпеременная окружения. (Странно, если переменная не установлена, $HOMEиспользуется по умолчанию.) Когда программа запускается, она проверяет, существует ли какой-либо из следующих файлов (имя файла совпадает с именем класса программы):

    • $XAPPLRESDIR/$LC_CTYPE/XTerm
    • $XAPPLRESDIR/language/XTerm
    • $XAPPLRESDIR/XTerm

    ( languageполучается $LC_CTYPEпутем удаления всего, кроме первого компонента; например, en_US.utf-8en.)

  • Пятое место является общесистемным «приложение-дефолты» каталоги. Опять же, каталоги app-defaults проверяются при запуске программы, если у них есть файл с именем программы. Например, XTerm (в Arch Linux) использует:

    • /etc/X11/$LC_CTYPE/app-defaults/XTerm
    • /etc/X11/language/app-defaults/XTerm
    • /etc/X11/app-defaults/XTerm
    • /usr/share/X11/$LC_CTYPE/app-defaults/XTerm
    • /usr/share/X11/language/app-defaults/XTerm
    • /usr/share/X11/app-defaults/XTerm

    Файлы app-defaults обычно устанавливаются /usr/shareвместе с самой программой; переопределения администратора будут идти в /etc.


Все, что упомянуто выше, подробно описано в документации по инструментарию X.org - статья X Toolkit Intrinsics - C Language Interface , раздел Загрузка базы данных ресурсов .

К сожалению, я не смог найти ни одного недавнего руководства пользователя, описывающего ресурсы X, в основном потому, что оно не имеет значения в 2012 году. Но для исторической (читай: ужасно устаревшей) информации вы можете прочитать руководство пользователя X Window System для X11 R3 и R4 раздела X Window System 9: настройка ресурсов (начиная со страницы 181).

grawity
источник
Отличный ответ, но следует отметить, что не все реализации следуют правилам правильно. Например, я помню, что приложения SunOS 4 и Solaris 6 не воспринимают изменения .Xdefaults, если впоследствии я не запустил явно «xrdb». Также может быть странно, когда приложение и X-сервер работают на разных хостах. Некоторые приложения читают локальный файл, а некоторые - базу данных с X-сервера.
Дэвид С.
1
@DavidC .: Такое поведение Xdefaults имеет следующие правила , описанные выше. Если xrdbеще когда - либо была запущена для этого X дисплея с момента входа - то есть, если X корневая свойство существует - то Xlib не будет использовать .Xdefaults вообще больше.
Гравитация
1
Это имеет смысл. Но все еще есть много явно загруженных приложений, которые будут читать содержимое ~ / .Xresources и игнорировать базу данных xrdb. Что может быть действительно раздражающим, если вы переходите на другой хост (у которого есть другой .Xresources) и обнаруживаете, что приложение не отображает его содержимое так, как при локальном запуске.
Дэвид С.