2

Связано с тем, где Gtk+ тема по умолчанию сохранена

Я использую рабочий стол Mate. Я вижу, что мои настройки внешнего вида сохраняются в gsettings:

$ gsettings get org.mate.interface gtk-theme
'TraditionalOk'
$ gsettings get org.mate.interface font-name
'Ubuntu 11'
$ gsettings get org.mate.font-rendering dpi 
173.0

Если я пишу простую программу gtk hello-world и связываю ее просто с libgtk, без библиотек mate, gnome или desktop, это работает. Отображает выбранный вид. Я почти уверен, что «org.mate.interface» не прописан в libgtk. И я предполагаю, что "gsettings" не жестко запрограммирован в libgtk. Так как это получить мою конфигурацию? Переменная окружения, dotfile, свойство X-сервера, что?

1 ответ1

1

И я предполагаю, что "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. Например, с помощью lxappearance LXDE просто редактирует файлы конфигурации: ~/.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).

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .