И я предполагаю, что «gsettings» не жестко запрограммирован в libgtk.
Это неверное предположение, поскольку GSettings является основным хранилищем конфигурации для большинства программ GNOME и действительно используется для получения имени темы в GTK 3 в Wayland. В частности, gdkdisplay-wayland использует gtk-theme
в org.gnome.desktop.interface
схеме.
В X11, однако, GTK использует протокол XSETTINGS, где отдельный демон, специфичный для DE, получает различные настройки из любого места и повторно публикует их в стандартном формате, используя механизм выбора X11.
При запуске каждый клиент, который должен идентифицировать окно настроек, вызывает XGetSelectionOwner () для выбора _XSETTINGS_S [N] и выбирает уведомление в окне настроек, вызывая XSelectInput () с маской StructureNotifyMask | PropertyChangeMask.
[…] Затем клиент может приступить к чтению содержимого свойства _XSETTINGS_SETTINGS из окна настроек и интерпретировать его в соответствии с информацией в разделе «Формат _XSETTINGS_SETTINGS» этого документа.
Поскольку вы используете MATE, mate-settings-daemon
это поставщик XSETTINGS. Он читает org.mate.interface
из GSettings и повторно публикует значение как Net/ThemeName
через XSETTINGS, где GTK может, наконец, получить его.
Использование протокола XSETTINGS делает бэкэнд неактуальным - например, более старые версии GNOME и MATE использовали GConf, в то время как Xfce использует XfConf, и существует автономный xsettingsd, который использует текстовый файл. (С другой стороны, как вы можете видеть, протокол очень специфичен для X11 и не может использоваться в Wayland.)
Пакет xsettingsd также поставляется с dump_xsettings
инструментом, который выгружает данные от любого провайдера, который работает в данный момент.
Обратите внимание, что не во всех средах рабочего стола работает поставщик XSETTINGS. Например, с помощью LXDE lxappearance
просто редактируются файлы конфигурации: ~/.gtkrc-2.0
для GTK 2 и ~/.config/gtk-3.0/settings.ini
для GTK 3. Они всегда читаются, но используются с самым низким приоритетом - указанные параметры GSettings или XSETTINGS всегда побеждают.
Резюме:
- GTK 3 поддерживает $ GTK_THEME для временного переопределения темы.
- В Wayland GTK 3 считывает название темы из GSettings с резервным файлом конфигурации.
- В X11 GTK 2/3 получает имя темы из демона XSETTINGS с резервным файлом конфигурации.
- GTK 1 не поддерживает ничего, кроме файловой конфигурации (gtkrc).