Dies ist grundsätzlich eine „akademische“ Frage – ein Versuch, die Innereien des Konfigurationssystems besser zu verstehen.
Ich verstehe, dass diedconfsystem ist das neue Konfigurationssystem in Gnome3, das das (veraltete) ersetzt hat.gconf; das geht ganz klar ausGconf, Dconf, Gsettings und die Beziehung zwischen ihnen.
Es schien mir, dass die Programme gsettings
und dconf-editor
waren nur zwei verschiedene Möglichkeiten, um auf die gleichedconfDatenbank, die bestätigt wird in
Was ist dconf, was ist seine Funktion und wie verwende ich es?
BEARBEITEN: Ich habe festgestellt, dass jemand es als Unterschied in der Groß-/Kleinschreibung in einigen Schemanamen bemerkt hat, siehe hier ---Unterscheiden sich die Namen der Dconf-Schemata zwischen Groß- und Kleinschreibung?; aber es scheint, dass die Unterschiede nicht darauf beschränkt sind. In einer der Antworten gibt es ein Beispiel für eine Nichtübereinstimmung, aber ich habe keine Erklärung dafür gefundenWarum.
Aber vor kurzem habe ich festgestellt, dass die Schlüssel, auf die von gsettings
und zugegriffen werden kann, dconf-editor
nicht dieselben sind. Beispielsweise vino
befinden sich die Einstellungen für dconf-editor
unter org.gnome.desktop.remote-access
(siehe Screenshot unten), während sie sich in gsettings unter befinden org.gnome.Vino
. Gibt es eine Dokumentation, die den Unterschied erklärt?
Ingeinstellungen:
(0)samsung-romano:~/tmp/try% gsettings list-recursively org.gnome.Vino
org.gnome.Vino alternative-port uint16 5900
org.gnome.Vino authentication-methods ['none']
org.gnome.Vino disable-background false
[...]
Und:
(0)samsung-romano:~/tmp/try% gsettings list-recursively org.gnome.desktop.remote-access
No such schema 'org.gnome.desktop.remote-access'
Aber inDconf-Editor:
Antwort1
dconf-editor
wird verwendetschema path
, um den Einstellungsdatenbaum anzuzeigen. Dieselbe Struktur wird zum Speichern von Daten in der GVariant-Datenbank verwendet.gsettings
(ab glib-2.0) wird verwendet,schema id
um Einstellungsdaten anzuzeigen/abzurufen. Genauso wie jede andere Anwendung, die die GSetttings-API verwendet.Es liegt am Anwendungsentwickler, beides nach Wunsch festzulegen (mit einigen Einschränkungen für die kanonische Benennung). Es
path
könnte also anders sein,id
aber die meisten Anwendungsentwickler bevorzugen die Verwendung identischer Wortreihen/-kombinationen. Einige behalten die Groß- und Kleinschreibung nicht bei. BeispielTracker-Projekt von Gnome<schema id="org.freedesktop.Tracker.Miner" path="/org/freedesktop/tracker/miner/" />
Darüber hinaus verwenden einige alternative Anwendungen dieselben Einstellungen, die zum Gnome-Desktop gehören. Beispiel:
input-sources
Erste,Apps sollten nicht mit
dconf
Einführung vondconfProjektseite:
dconf
ist ein Low-Level-Konfigurationssystem. Sein Hauptzweck besteht darin, ein Backend für GSettings auf Plattformen bereitzustellen, die noch keine Konfigurationsspeichersysteme haben.Wo werden die Daten gespeichert?(Referenz:https://wiki.gnome.org/Projects/dconf/SystemAdministrators)
Ein Profil ist eine Liste von Konfigurationsdatenbanken. Es scheint, dass Gnome und Unity dasselbe Profil verwenden.
$ cat /etc/dconf/profile/gdm user-db:user system-db:gdm
user-db:user
: Die erste Datenbank im Profil ist lese-/schreibbarrw
und wird im Home-Verzeichnis des Benutzers erstellt.$ file ~/.config/dconf/user /home/sneetsher/.config/dconf/user: GVariant Database file, version 0
system-db:gdm
: schreibgeschützt$ file /etc/dconf/db/gdm /etc/dconf/db/gdm: GVariant Database file, version 0
dconf
könnte zusätzlich zur GVariant-Datenbank aus dem Ordner einen Textstilspeicher bindendb.d/*
. Beispiel (Beachten Sie den Dateipfad, es ist also ein Teil vonsystem-db:gdm
):$ cat /etc/dconf/db/gdm.d/00-upstream-settings # This file is part of the GDM packaging and should not be changed. # # Instead create your own file next to it with a higher numbered prefix, # and run # # dconf update # [org/gnome/desktop/a11y/keyboard] enable=true [org/gnome/desktop/background] show-desktop-icons=false ...
Schemadateien: Beziehung zwischen
schema id
&schema path
(*.gschema.xml
)Was ist die Schema-XML-Datei im Ordner data/glib-2.0 meiner Quickly-Anwendung?vontrentzeigt ein schönes Beispiel für die Verwendung der GSettings-API in einer Quickly-Anwendung und seine Schlussfolgerung basierend auf seinen Erfahrungen.
Zurück zu Vino. Jede Anwendung, die GSsettings verwendet, sollte ihre Schemata definieren und sie hier speichern/installieren
/usr/share/glib-2.0/schemas/
(es ist ein Glib-Verzeichnis):$ dpkg -L vino | grep -i glib-2.0 /usr/share/glib-2.0 /usr/share/glib-2.0/schemas /usr/share/glib-2.0/schemas/org.gnome.Vino.enums.xml /usr/share/glib-2.0/schemas/org.gnome.Vino.gschema.xml $ more /usr/share/glib-2.0/schemas/org.gnome.Vino.gschema.xml <schemalist> <schema id='org.gnome.Vino' path='/org/gnome/desktop/remote-access/'> <key name='enabled' type='b'> <summary>Enable remote access to the desktop</summary> <description> If true, allows remote access to the desktop via the RFB protocol. Users on remote machines may then connect to the desktop using a VNC viewer. </description> <default>false</default> </key> <key name='prompt-enabled' type='b'> <summary>Prompt the user before completing a connection</summary> <description> If true, remote users accessing the desktop are not allowed access until the user on the host machine approves the connection. Recommended especially when access is not password protected. </description> <default>true</default> </key> ...
id
Wie Sie vielleicht bemerkt haben, ist das Schema mit einem und einem definiertpath
. Der Schemadateiname folgt demid
Wert.<schema id='org.gnome.Vino' path='/org/gnome/desktop/remote-access/'>
*.enums.xml
Dateien dienen zur benutzerdefinierten Aufzählungsdeklaration und sollen als neue Datentypen*.gschema.xml
mit denselben verwendet werdenschema id
.$ cat /usr/share/glib-2.0/schemas/org.gnome.Vino.enums.xml <!-- Generated data (by glib-mkenums) --> <schemalist> <enum id='org.gnome.Vino.VinoIconVisibility'> <value nick='never' value='0'/> <value nick='always' value='1'/> <value nick='client' value='2'/> </enum> </schemalist> <!-- Generated data ends here --> $ gsettings range org.gnome.Vino icon-visibility enum 'never' 'always' 'client' $ gsettings get org.gnome.Vino icon-visibility 'client'
Kompilieren von Schemas(Referenz:Spielen mit dconf und Gnome-Tweak-Tool)
Als Teil des Installationsprozesses (es verfügt über einen Dpkg-Trigger) werden Schemata mit
glib-compile-schemas
dem Tool (von glib) kompiliert.sudo glib-compile-schemas /usr/share/glib-2.0/schemas
*.gschema.xml
wird in eine Binärdatei kompiliert/usr/share/glib-2.0/schemas/gschemas.compiled
Vendor-Override-Dateien(
*.gschema.override
)Zusätzlich zu den Schemadateien
glib-compile-schemas
liestLieferantenüberschreibungDateien, bei denen es sich um Schlüsseldateien handelt, die Standardwerte für Schlüssel in den Schemata überschreiben können (Ref:man glib-compile-schemas
). Sie enthalten die von der Ubuntu-Distribution vorgenommenen Änderungen, um die Schemastandards der Upstream-Distribution zu überschreiben.$ ls /usr/share/glib-2.0/schemas/*.gschema.override /usr/share/glib-2.0/schemas/10_compiz-gnome.gschema.override /usr/share/glib-2.0/schemas/10_desktop-base.gschema.override /usr/share/glib-2.0/schemas/10_evolution-common.gschema.override /usr/share/glib-2.0/schemas/10_gnome-settings-daemon.gschema.override /usr/share/glib-2.0/schemas/10_gnome-shell.gschema.override /usr/share/glib-2.0/schemas/10_gnome-system-log.gschema.override /usr/share/glib-2.0/schemas/10_gsettings-desktop-schemas.gschema.override /usr/share/glib-2.0/schemas/10_libgtk-3-common.gschema.override /usr/share/glib-2.0/schemas/10_ubuntu-settings.gschema.override /usr/share/glib-2.0/schemas/20_ubuntu-gnome-default-settings.gschema.override $ cat /usr/share/glib-2.0/schemas/10_gnome-settings-daemon.gschema.override [org.gnome.desktop.wm.keybindings] switch-input-source=['<Super>space'] switch-input-source-backward=['<Shift><Super>space']
Beispiel für die Verwendung von Override-Dateien, sieheWie passe ich die Ubuntu Live-CD an?(5. Anpassung 2: Hintergründe und Themen).
Dateien sperren
Derzeit unterstützt dconf nur die Sperrung einzelner Schlüssel, keine Sperrung von Unterpfaden. Benutzerdefinierte Werte werden weiterhin in gespeichert,
user-db
haben aber keine Auswirkung auf Anwendungen. dconf/gsettings gibt stattdessen Standardwerte für diese gesperrten Schlüssel zurück. Sperrdateien werden in gespeichertdb.d/locks/
. Beispiel:$ cat /etc/dconf/db/gdm.d/locks/00-upstream-settings-locks /org/gnome/desktop/a11y/keyboard/enable /org/gnome/desktop/background/show-desktop-icons /org/gnome/desktop/lockdown/disable-application-handlers /org/gnome/desktop/lockdown/disable-command-line /org/gnome/desktop/lockdown/disable-lock-screen /org/gnome/desktop/lockdown/disable-log-out /org/gnome/desktop/lockdown/disable-printing /org/gnome/desktop/lockdown/disable-print-setup /org/gnome/desktop/lockdown/disable-save-to-disk /org/gnome/desktop/lockdown/disable-user-switching ...
Führen Sie nach der Änderung der Sperren Folgendes aus, damit sie wirksam wird:
sudo dconf update
Ein gutes Beispiel:dconf-Einstellungen: Standardeinstellungen und Sperren
Globale Einstellungen ändern
Die Vorgabe für
gsettings
/dconf-editor
ist die Bearbeitung vonuser-db
. Um dies zu ändernsystem-db
, schreiben Sie eine neue Override-Datei und kompilieren Sie die Schemata neu.Ich habe es nicht geschafft, das hier zum Laufen zu bringen:
sudo su gdm -c 'gsettings ...'
weder die anderen Antworten hierStandardmäßige/globale Gnome-Einstellungen festlegen (Gnome 3), möglicherweise war das für eine alte Version.