Dconf-editor ve gsettings aynı veri tabanına erişmemeli midir?


34

Bu temelde 'akademik' bir sorudur --- konfigürasyon sistemini doğuranları daha iyi anlamaya çalışmak.

Anlıyorum dconf sistemi (kaldırıldı) yerini almıştır gnome3 yeni yapılandırma sistemidir gconf ; bu, Gconf, Dconf, Gsettings ve aralarındaki ilişkiden açıkça anlaşılıyor .

Programların bana görünüyordu gsettingsve dconf-editornerede aynı erişmek için sadece iki farklı yolu dconf da bu durum doğrulanmaktadır veritabanını
dconf nedir, işlevi nedir ve bunu nasıl kullanabilirim?

EDIT: Birisinin bazı şema adında bir fark olduğunu fark ettiğini keşfettim, buraya bakın --- dconf şema adları büyük / küçük harf duyarlı mı? ; ancak farkların bununla sınırlı olmadığı görülüyor. Cevaplardan birinde uyumsuzluk örneği var, ancak bunun nedenini açıklamadım .

Ama son zamanlarda, anahtarların erişilebilir olduğunu gsettingsve dconf-editoraynı olmadığını keşfettim . Örneğin, ayarları altında bulundukları vinosırada ayarlar dconf-editoraltındadır org.gnome.desktop.remote-access(aşağıdaki ekran görüntüsüne bakın) org.gnome.Vino. Farkı açıklayan bazı belgeler var mı?

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
[...]

ve:

(0)samsung-romano:~/tmp/try% gsettings list-recursively org.gnome.desktop.remote-access
No such schema 'org.gnome.desktop.remote-access'

Ancak dconf-editöründe :

dconf-düzenleyici

Yanıtlar:


39
  • dconf-editorkullanımları schema pathgösterinin ayarları veri ağacına. Verileri GVariant veritabanında saklamak için kullanılan aynı yapı.

  • gsettings(glib-2.0'dan) schema idayar verilerini göstermek / almak için kullanılır. GSetttings API'sini kullanan diğer tüm uygulamalarla aynı şekilde yapılmalıdır.

  • Her ikisini de istediği gibi ayarlamak uygulama geliştiricisine kalmıştır. (kanonik adlandırma için bazı kısıtlamalarla). Bundan pathfarklı olabilir idancak çoğu uygulama geliştiricisi aynı kelime dizisini / birleşimini aynı kelimeyi kullanmayı tercih eder. Bazıları aynı büyük harf kullanımı korumaz. Gnome'dan Örnek İzleyici projesi

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

    Buna ek olarak, bazı alternatif uygulamalar Gnome masaüstüne ait aynı ayarları paylaşır. Örnek:input-sources


  • İlk olarak, Apps ile uğraşmamalıdconf

    Dan giriş dconf proje sayfası:

    dconfdüşük seviyeli bir yapılandırma sistemidir. Temel amacı, halihazırda konfigürasyon depolama sistemleri bulunmayan platformlarda GSettings'e arka uç sağlamaktır.

  • Veriler nerede saklanıyor? (Ref: https://wiki.gnome.org/Projects/dconf/SystemAdministrators )

    Profil, yapılandırma veritabanlarının bir listesidir. Görünüşe göre Gnome & Unity aynı profili kullanıyor.

    $ cat /etc/dconf/profile/gdm
    user-db:user
    system-db:gdm
    
    1. user-db:user: Profildeki ilk veritabanı okuma-yazma rwve kullanıcının ana dizininde yaratılmıştır.

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

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

      dconfdb.d/*klasörden GVariant Veritabanına ek olarak bir metin stili mağazasını bağlayabilir . Örnek (Dosya yoluna dikkat edin, bu nedenle bir parçasıdır 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
       ...
      
  • Şema Dosyaları: schema id&schema path ( *.gschema.xml) Arasındaki İlişki

    Quickly uygulamamın data / glib-2.0 klasöründeki şema XML dosyası nedir? tarafından trent bir hızla uygulamada GSettings API kullanarak güzel bir örneği gösterir ve onun sonuca onun deneyime dayalı.

    Vino'ya. GSsettings kullanan her uygulama şemalarını tanımlamalı ve bunları saklamalı / yüklemeli /usr/share/glib-2.0/schemas/(Bu bir glib dizinidir):

    $ 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>
    ...
    

    Fark ederseniz, şema bir idve a ile tanımlanır path. Şema dosyası adı iddeğeri izler .

    <schema id='org.gnome.Vino' path='/org/gnome/desktop/remote-access/'>
    
  • *.enums.xmldosyalar, *.gschema.xmlaynı şekilde yeni veri türleri olarak kullanılmak üzere özel numaralandırma bildirimi içindir 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'
    
  • Şemaların Derlenmesi (Ref: dconf ve gnome-tweak-tool ile çalma )

    Yükleme işleminin bir parçası olarak (dpkg tetikleyicisine sahiptir), şema glib-compile-schemasaracı (glib'den) aracıyla derlenir

    sudo glib-compile-schemas /usr/share/glib-2.0/schemas
    

    *.gschema.xml bir ikili dosyaya derlenecek /usr/share/glib-2.0/schemas/gschemas.compiled

  • Satıcı Geçersiz Kılma Dosyaları ( *.gschema.override)

    Şema dosyalarına ek olarak , şemalardaki anahtarların varsayılan değerlerini geçersiz kılan anahtar dosyalar olan satıcı geçersiz kılma dosyalarını glib-compile-schemasokur (Ref:) . Akış yukarı şema varsayılanlarını geçersiz kılmak için Ubuntu dağıtımında yapılan değişiklikleri içerir.man glib-compile-schemas

    $ 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']
    

    Geçersiz kılma dosyaları kullanımı örneği, Bkz . Ubuntu Live CD'si nasıl özelleştirilir? (5. Özelleştirme 2: Arka Planlar ve Temalar).

  • Dosyaları kilitle

    Şu anda, dconf yalnızca tuş başına kilitlemeyi destekler, alt yol kilidi yoktur. Kullanıcı tanımlı değerler depolanmaya devam eder user-dbancak uygulamalar üzerinde hiçbir etkisi olmaz. dconf / gsettings, kilitli anahtarlar için bunun yerine varsayılan değerleri döndürür. Kilit dosyaları saklanır db.d/locks/. Örnek:

    $ 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
    ...
    

    Kilitlerin değiştirilmesinden sonra etkili çalışma:

    sudo dconf update
    

    İyi bir vitrin: dconf Ayarlar: varsayılanlar ve kilitler

  • Genel Ayarları Değiştirme

    İçin varsayılan gsettings/ ' dconf-editordüzenlemek etmektir user-db. Değiştirmek için system-db, yeni bir geçersiz kılma dosyası yazın ve şemaları yeniden derleyin.

    Bunu işe alamadım:

    sudo su gdm -c 'gsettings ...'
    

    Buradaki diğer cevaplar da Varsayılan / Global Gnome Tercihlerini Belirleme (Gnome 3) , eski bir sürüm içindi.


1
@Rmano, bunu öğrenmek için de beni merak ettim. Çok teşekkür ederim.
user.dz

1
Dconf kullanarak kullanıcıya özel ayarları nasıl tanımlayacağınızı açıklayabilir misiniz (örneğin, bir kullanıcı için bir ayar kümesi dağıtmam gerekiyor (gerekli dosyaları hesabı oluşturduktan hemen sonra ~ / .config / dconf dizinine kopyalayın) ve diğer İkinci kullanıcı için nasıl?)? AFAIK, "text style store" sadece sistem çapında ayarlar için desteklenir, değil mi? Yalnızca kullanıcı ayarlarını terk etmenin bir yolu var mı (örneğin ~ / .config / dconf / user içindeki)? "Dconf dump /" hakkında bilgim var, ancak bu sistem varsayılanları dahil olmak üzere tüm kullanıcı DB'si içindir. Belgeler son derece eksik.
Anatoli

1
@Atotoli, Evet, metin deposu sadece sistem genelinde veritabanı için çalışıyor. Aslında dconf dump /tüm kullanıcı tarafından değiştirilmiş girişleri atar, hiç değiştirilmemiş ya da sıfırlanmış girişleri içermez. (örneğin, girişlerin değiştirildiğini veya ayarlarının değerlerinin varsayılanla aynı olmasına rağmen ayarlanmış olduğunu içerir). Askubuntu.com/q/420527/26246 adresine bakınız . Ayrıca bütün DB değil, yolu ayarlayabilirsiniz. örn .:dconf dump /com/
kullanıcı.dz

1
@ user.dz, açıklama için teşekkürler. Yani, kullanıcıya özel ayarları yapılandırmanın tek yolu, 'kullanıcı' GVDB ikili dosyasını gerekli ayarlarla başka bir temiz hesapta oluşturmak ve ardından .config / dconf klasörüne kopyalamak mı? AFAIK, dconf load / < filekullanıcı olarak giriş yapmadan kullanmanın bir yolu yok .
Anatoli

1
@Anatoli, Evet bu şekilde. Parolasına veya root gücüne (güvenlik kuralı) ne kadar ihtiyaç duyduğunuzu kaydetmeden, diğer kullanıcı ayarlarını değiştirmenin daha kolay bir yolu olabilir. Bu çalışması gerekir sudo su username2 -c "dconf load / < file"
user.dz
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.