Erstens sollten sich Apps nicht damit anlegendconf
Einführung von der dconf Projektseite:
dconf
ist ein einfaches Konfigurationssystem. Der Hauptzweck ist die Bereitstellung eines Backends für GSettings auf Plattformen, auf denen noch keine Konfigurationsspeichersysteme vorhanden sind.
Wo werden die Daten gespeichert? (Referenz: https://wiki.gnome.org/Projects/dconf/SystemAdministrators )
Ein Profil ist eine Liste von Konfigurationsdatenbanken. Wie es scheint, verwenden Gnome & Unity dasselbe Profil.
$ cat /etc/dconf/profile/gdm
user-db:user
system-db:gdm
user-db:user
: Die erste Datenbank im Profil ist schreibgeschützt rw
und wird im Basisverzeichnis 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 zu GVariant Database einen Textstilspeicher aus db.d/*
Ordner binden . Beispiel (Beachten Sie den Dateipfad, der Teil von ist system-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? by trent zeigt ein schönes Beispiel für die Verwendung der GSettings-API in einer Quickly-Anwendung und seine Schlussfolgerung basiert auf seinen Erfahrungen.
Zurück zu Vino. Jede Anwendung, die GSsettings verwendet, sollte ihre Schemas definieren und diese 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>
...
Wenn Sie bemerkt haben, wird das Schema mit einem id
und einem definiert path
. Der Name der Schemadatei folgt dem id
Wert.
<schema id='org.gnome.Vino' path='/org/gnome/desktop/remote-access/'>
*.enums.xml
Dateien sind für die benutzerdefinierte Aufzählungsdeklaration vorgesehen und können als neue Datentypen in *.gschema.xml
derselben verwendet werden schema 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 (Ref: Spielen mit dconf und gnome-tweak-tool )
Im Rahmen des Installationsprozesses (es hat einen dpkg-Trigger) werden Schemas mit dem glib-compile-schemas
Tool (aus glib) kompiliert.
sudo glib-compile-schemas /usr/share/glib-2.0/schemas
*.gschema.xml
wird zu einer Binärdatei kompiliert /usr/share/glib-2.0/schemas/gschemas.compiled
Vendor Override Files ( *.gschema.override
)
glib-compile-schemas
Liest neben Schemadateien auch Vendor-Override- Dateien. Hierbei handelt es sich um Schlüsseldateien, die Standardwerte für Schlüssel in den Schemas überschreiben können (Ref man glib-compile-schemas
. :) . Sie enthalten die Änderungen, die von der Ubuntu-Distribution vorgenommen wurden, um die Standardeinstellungen des Upstream-Schemas 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, siehe So passen Sie die Ubuntu Live-CD an (5. Anpassung 2: Hintergründe und Designs).
Dateien sperren
Derzeit unterstützt dconf nur das Sperren pro Schlüssel, keine Unterpfadsperre. Benutzerdefinierte Werte werden weiterhin in gespeichert user-db
, haben jedoch keine Auswirkungen auf Anwendungen. dconf / gsettings gibt stattdessen Standardwerte für diese gesperrten Schlüssel zurück. Sperrdateien werden in gespeichert db.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 folgende Schritte aus, um die Änderung der Sperren wirksam zu machen:
sudo dconf update
Ein gutes Schaufenster: dconf Einstellungen: Standardeinstellungen und Sperren
Globale Einstellungen ändern
Die Standardeinstellung für gsettings
/ dconf-editor
ist das Bearbeiten der user-db
. system-db
Schreiben Sie zum Ändern eine neue Überschreibungsdatei und kompilieren Sie die Schemas neu.
Ich konnte das nicht zum Laufen bringen:
sudo su gdm -c 'gsettings ...'
Weder die anderen Antworten, die Sie hier unter " Standardeinstellungen / Globale Gnome-Einstellungen festlegen" (Gnome 3) finden , beziehen sich auf eine ältere Version.
dconf dump /
Dumps alle Benutzer geändert Einträge, es enthält keine Einträge nie geändert oder zurückgesetzt worden. (Zum Beispiel beinhaltet es, dass die Einträge geändert oder festgelegt wurden, auch wenn ihre Werte mit den Standardwerten übereinstimmen). Siehe askubuntu.com/q/420527/26246 . Ist auch nicht der gesamte DB, kann man den Pfad einstellen. Beispiel:dconf dump /com/
dconf load / < file
ohne Anmeldung als Benutzer zu verwenden.sudo su username2 -c "dconf load / < file"