it-swarm.com.de

Sollten dconf-editor und gsettings nicht auf dieselbe Datenbank zugreifen?

Dies ist eine im Grunde genommen 'akademische' Frage - um zu versuchen, die Innereien des Konfigurationssystems besser zu verstehen.

Ich verstehe, dass das dconf System das neue Konfigurationssystem in gnome3 ist, das das (veraltete) gconf ersetzt hat; Dies ist ganz klar aus Gconf, Dconf, Gsettings und die Beziehung zwischen ihnen .

Es schien mir, dass die Programme gsettings und dconf-editor nur zwei verschiedene Möglichkeiten bieten, auf dieselbe dconf -Datenbank zuzugreifen, die in bestätigt wird
Was ist dconf, welche Funktion hat es und wie verwende ich es?

BEARBEITEN: Ich habe festgestellt, dass jemand dies als einen Unterschied im Fall eines Schemanamens bemerkt hat. Siehe hier --- Sind bei dconf-Schemanamen die Groß- und Kleinschreibung zu beachten? ; 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 für gefunden, warum .

Aber in letzter Zeit habe ich festgestellt, dass die Tasten, auf die über gsettings und dconf-editor zugegriffen werden kann, nicht identisch sind. Die Einstellungen für vino befinden sich beispielsweise in dconf-editor unter org.gnome.desktop.remote-access (siehe Abbildung unten), während sie sich in gsettings unter org.gnome.Vino befinden. Gibt es eine Dokumentation, die den Unterschied erklärt?

In gsettings :

(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 in dconf-editor :

dconf-editor

33
Rmano
  • dconf-editor verwendet schema path, um den Einstellungsdatenbaum anzuzeigen. Dieselbe Struktur zum Speichern von Daten in der GVariant-Datenbank.

  • gsettings (aus glib-2.0) verwendet schema id, um Einstellungsdaten anzuzeigen/abzurufen. Genauso wie jede andere Anwendung, die die GSetttings-API verwendet.

  • Es ist Sache des Anwendungsentwicklers, beide Einstellungen so vorzunehmen, wie er möchte. (mit einigen Einschränkungen für die kanonische Benennung). Daher kann path anders sein als id, aber die meisten Anwendungsentwickler ziehen es vor, identische Wortreihen/Kombinationen zu verwenden. Einige bewahren nicht die gleiche Großschreibung. Beispiel Tracker-Projekt von Gnome

    <schema id="org.freedesktop.Tracker.Miner" path="/org/freedesktop/tracker/miner/" />
    

    Darüber hinaus haben einige alternative Anwendungen dieselben Einstellungen wie der Gnome-Desktop. Beispiel: input-sources


  • Erstens sollten sich Apps nicht mit dconf anlegen

    Einführung von dconf Projektseite:

    dconf ist ein Konfigurationssystem auf niedriger Ebene. Der Hauptzweck ist die Bereitstellung eines Backends für GSettings auf Plattformen, auf denen noch keine Konfigurationsspeichersysteme vorhanden sind.

  • Wo werden die Daten gespeichert? (Ref: 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
    
    1. user-db:user: Die erste Datenbank im Profil ist schreibgeschützt rw und wird im Ausgangsverzeichnis des Benutzers erstellt.

      $ file ~/.config/dconf/user
      /home/sneetsher/.config/dconf/user: GVariant Database file, version 0
      
    2. system-db:gdm: schreibgeschützt

      $ file /etc/dconf/db/gdm
      /etc/dconf/db/gdm: GVariant Database file, version 0
      

      dconf könnte einen Textstilspeicher zusätzlich zur GVariant-Datenbank aus dem Ordner db.d/* binden. Beispiel (Beachten Sie den Dateipfad, der Teil von system-db:gdm ist):

       $ 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 sein Schlussfolgerung basierend auf seiner Erfahrung.

    Zurück zu Vino. Jede Anwendung, die GSsettings verwendet, sollte ihre Schemas definieren und diese in /usr/share/glib-2.0/schemas/ speichern/installieren (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 path definiert. Der Name der Schemadatei folgt dem Wert id.

    <schema id='org.gnome.Vino' path='/org/gnome/desktop/remote-access/'>
    
  • *.enums.xml-Dateien sind für die benutzerdefinierte Enumerationsdeklaration vorgesehen und können als neue Datentypen in *.gschema.xml mit demselben schema id verwendet werden.

    $ 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'
    
  • Schema kompilieren (Ref: Spielen mit dconf und gnome-Tweak-tool )

    Im Rahmen des Installationsprozesses (es hat einen dpkg-Trigger) werden Schemas mit dem Tool glib-compile-schemas (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 Files (*.gschema.override)

    Zusätzlich zu Schemadateien liest glib-compile-schemas Vendor-Override-Dateien , bei denen es sich um Schlüsseldateien handelt, 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 Upstream-Schemastandards 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 user-db gespeichert, haben jedoch keine Auswirkungen auf Anwendungen. dconf/gsettings gibt stattdessen Standardwerte für diese gesperrten Schlüssel zurück. Sperrdateien werden in db.d/locks/ gespeichert. 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 die folgenden 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 des user-db. Um system-db zu ändern, schreiben Sie 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 hier Set Default/Global Gnome Preferences (Gnome 3) , möglicherweise war das für eine alte Version.

38
user.dz