関連 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
単純なgtkhello-worldプログラムを作成し、それをlibgtkのみにリンクし、mate、gnome、またはデスクトップライブラリを使用しない場合は機能します。選択した外観が表示されます。 「org.mate.interface」がlibgtkにハードコードされていないことは間違いありません。そして、「gsettings」はlibgtkにハードコードされていないと思います。では、どのようにして構成を取得するのでしょうか?環境変数、ドットファイル、Xサーバープロパティ、何ですか?
そして、「gsettings」はlibgtkにハードコードされていないと思います。
GSettingsはほとんどのGNOMEプログラムのプライマリ構成ストレージであり、実際にWaylandのGTK 3でテーマ名を取得するために使用されるため、これは悪い仮定です。具体的には、gdkdisplay-waylandはgtk-theme
スキーマでorg.gnome.desktop.interface
を使用します。
ただし、X11では、GTKは XSETTINGSプロトコル を使用します。この場合、別のDE固有のデーモンが必要な場所からさまざまな設定を取得し、X11の選択メカニズムを使用して標準形式で再公開します。
起動時に、_XSETTINGS_S [N]選択に対してXGetSelectionOwner()を呼び出して設定ウィンドウを識別し、StructureNotifyMask | PropertyChangeMaskのマスクを使用してXSelectInput()を呼び出して設定ウィンドウで通知を選択する必要がある各クライアント。
[…]クライアントは、設定ウィンドウから_XSETTINGS_SETTINGSプロパティの内容を読み取り、このドキュメントの「_XSETTINGS_SETTINGS形式」セクションの情報に従って解釈することができます。
MATEを使用しているため、mate-settings-daemon
はXSETTINGSプロバイダーです。 GSettingsからorg.mate.interface
を読み取り、XSETTINGSを介して値をNet/ThemeName
として再公開し、GTKが最終的に取得できるようにします。
XSETTINGSプロトコルを使用すると、バックエンドは無関係になります。古いGNOMEとMATEバージョンはGConfを使用し、XfceはXfConfを使用し、テキストを使用するスタンドアロンxsettingsdがあります(一方、ご覧のとおり、プロトコルはX11に非常に固有であり、Wayland内では使用できません。)
xsettingsdパッケージには、現在実行中のプロバイダーからデータをダンプするdump_xsettings
ツールも付属しています。
すべてのデスクトップ環境がXSETTINGSプロバイダーを実行しているわけではないことに注意してください。たとえば、LXDEのlxappearance
を使用すると、構成ファイルが編集されます。GTK2の場合は~/.gtkrc-2.0
、GTK3の場合は~/.config/gtk-3.0/settings.ini
です。これらは常に読み取りますが、最も低い優先度で使用されます–GSettingsまたはXSETTINGSで指定されたパラメーターが常に優先されます。
概要: