डॉन्क-एडिटर और gsettings एक ही डेटाबेस का उपयोग नहीं करना चाहिए?


34

यह एक मूल रूप से 'अकादमिक' प्रश्न है --- बेहतर कॉन्फ़िगरेशन सिस्टम सराय को समझने की कोशिश करने के लिए।

मैं समझता हूं कि gconome3 में dconf सिस्टम नया विन्यास प्रणाली है जिसने (हटाए गए) gconf को बदल दिया है ; यह Gconf, Dconf, Gsettings और उनके बीच के संबंधों से काफी स्पष्ट है

यह मुझे प्रतीत हुआ कि प्रोग्राम gsettingsऔर dconf-editorजहां एक ही डॉन्फ डेटाबेस को एक्सेस करने के लिए सिर्फ दो अलग-अलग तरीके हैं , जो कि डॉन्कफ में
क्या है, इसकी फ़ंक्शन क्या है, और मैं इसका उपयोग कैसे करता हूं?

संपादित करें: मुझे पता चला कि किसी ने इसे कुछ स्कीमा नाम के मामले में अंतर के रूप में देखा, यहाँ देखें --- क्या ड्यूकफ़ स्कीमा नाम मामले के प्रति संवेदनशील हैं? ; लेकिन ऐसा लगता है कि मतभेद केवल उस तक ही सीमित नहीं हैं। एक जवाब में बेमेल का एक उदाहरण है, लेकिन मुझे ऐसा क्यों नहीं मिला ।

लेकिन हाल ही में मुझे पता चला है कि कुंजी से सुलभ gsettingsऔर dconf-editorसमान नहीं हैं। उदाहरण के लिए, के लिए सेटिंग्स vinoमें हैं dconf-editorके तहत org.gnome.desktop.remote-access(नीचे स्क्रीनशॉट देखें) जबकि gsettings में वे किया जा रहा है org.gnome.Vino। कुछ प्रलेखन है जो अंतर की व्याख्या करते हैं?

में 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
[...]

तथा:

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

लेकिन dconf- संपादक में :

dconf-संपादक

जवाबों:


39
  • dconf-editorschema pathसेटिंग्स डेटा ट्री दिखाने के लिए उपयोग करता है। GVariant डेटाबेस में डेटा स्टोर करने के लिए उपयोग की जाने वाली समान संरचना।

  • gsettings(glib-2.0 से) schema idसेटिंग्स डेटा दिखाने / प्राप्त करने के लिए उपयोग करता है। किसी अन्य अनुप्रयोग के समान तरीका जो GSetttings API का उपयोग करता है।

  • यह एप्लिकेशन डेवलपर पर निर्भर है कि वह दोनों को सेट करना चाहता है। (विहित नामकरण के लिए कुछ प्रतिबंध के साथ)। तो pathइससे भिन्न हो सकते हैं idलेकिन अधिकांश एप्लिकेशन डेवलपर्स समान शब्द श्रृंखला / संयोजन का उपयोग करना पसंद करते हैं। कुछ समान पूंजीकरण को संरक्षित नहीं करते हैं। उदाहरण ग्नोम से ट्रैकर परियोजना

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

    इसके अलावा, कुछ वैकल्पिक एप्लिकेशन समान सेटिंग्स साझा करते हैं जो ग्नोम डेस्कटॉप से ​​संबंधित हैं। उदाहरण:input-sources


  • सबसे पहले, Apps के साथ खिलवाड़ नहीं करना चाहिएdconf

    Dconf परियोजना पृष्ठ से परिचय :

    dconfएक निम्न-स्तरीय कॉन्फ़िगरेशन सिस्टम है। इसका मुख्य उद्देश्य उन प्लेटफार्मों पर GSettings को एक बैकएंड प्रदान करना है जिनके पास पहले से कॉन्फ़िगरेशन स्टोरेज सिस्टम नहीं है।

  • डेटा कहाँ संग्रहीत किया गया है? (संदर्भ: https://wiki.gnome.org/Projects/dconf/SystemAdministrators )

    एक प्रोफ़ाइल कॉन्फ़िगरेशन डेटाबेस की एक सूची है। ऐसा लगता है कि गनोम और एकता एक ही प्रोफ़ाइल का उपयोग करते हैं।

    $ cat /etc/dconf/profile/gdm
    user-db:user
    system-db:gdm
    
    1. user-db:user: प्रोफाइल में पहला डेटाबेस रीड-राइट है rwऔर इसे उपयोगकर्ता के होम डायरेक्टरी में बनाया गया है।

      $ file ~/.config/dconf/user
      /home/sneetsher/.config/dconf/user: GVariant Database file, version 0
      
    2. system-db:gdm: सिफ़ पढ़िये

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

      dconfdb.d/*फ़ोल्डर से GVariant Database के अलावा एक टेक्स्ट स्टाइल स्टोर को बाँध सकता है । उदाहरण (सूचना फ़ाइल पथ, इसलिए यह एक हिस्सा है 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
       ...
      
  • स्कीमा फ़ाइलें: schema idऔरschema path ( *.gschema.xml) के बीच संबंध

    मेरे त्वरित आवेदन के डेटा / glib-2.0 फ़ोल्डर में स्कीमा XML फ़ाइल क्या है? ट्रेंट द्वारा एक त्वरित आवेदन में GSettings एपीआई का उपयोग करने का एक अच्छा उदाहरण दिखाता है, और उनके अनुभव के आधार पर उनका निष्कर्ष।

    वापस करने के लिए Vino। GSsettings का उपयोग करने वाले प्रत्येक एप्लिकेशन को अपने स्कीमा को परिभाषित करना चाहिए और उन्हें /usr/share/glib-2.0/schemas/इसमें स्टोर करना चाहिए / स्थापित करना चाहिए (यह एक शानदार निर्देशिका है):

    $ 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ए और ए के साथ परिभाषित किया गया है path। स्कीमा फ़ाइल नाम idमान का अनुसरण करता है ।

    <schema id='org.gnome.Vino' path='/org/gnome/desktop/remote-access/'>
    
  • *.enums.xmlफाइलें कस्टम एन्यूमरेशन डिक्लेरेशन के लिए हैं, *.gschema.xmlउसी के साथ नए डेटा प्रकारों के रूप में उपयोग किया जाए 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'
    
  • संकलन स्कीमा के (रेफरी: dconf और सूक्ति-ट्वीक-उपकरण के साथ बजाना )

    स्थापना प्रक्रिया के भाग के रूप में (इसमें dpkg ट्रिगर है), स्कीमा को glib-compile-schemasउपकरण से संकलित किया जाता है (glib से)

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

    *.gschema.xml एक बाइनरी फ़ाइल के लिए संकलित किया जाएगा /usr/share/glib-2.0/schemas/gschemas.compiled

  • विक्रेता ओवरराइड फ़ाइलें ( *.gschema.override)

    स्कीमा फ़ाइलों के अलावा, वेंडर ओवरराइड फ़ाइलों को glib-compile-schemasपढ़ता है , जो कुंजी फाइलें हैं जो स्कीमा में कुंजी के लिए डिफ़ॉल्ट मान को ओवरराइड कर सकती हैं (Ref:) । वे अपस्ट्रीम स्कीमा चूक को ओवरराइड करने के लिए उबंटू वितरण द्वारा किए गए परिवर्तन शामिल हैं।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']
    

    ओवरराइड फ़ाइलों का उपयोग उदाहरण, Ubuntu लाइव सीडी को अनुकूलित करने के लिए कैसे देखें ? (5. अनुकूलन 2: पृष्ठभूमि और विषय-वस्तु)।

  • फ़ाइलों को लॉक करें

    वर्तमान में, dconf केवल प्रति-कुंजी लॉकिंग का समर्थन करता है, कोई उप-पथ लॉक नहीं। उपयोगकर्ता परिभाषित मूल्य अभी भी संग्रहीत किए user-dbजाएंगे , लेकिन अनुप्रयोगों पर कोई प्रभाव नहीं पड़ेगा। dconf / gsettings उन बंद कुंजियों के बदले डिफ़ॉल्ट मान देता है। लॉक फ़ाइलों में संग्रहीत हैं db.d/locks/। उदाहरण:

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

    ताले संशोधन के बाद, प्रभावी चलाने के लिए:

    sudo dconf update
    

    एक अच्छा प्रदर्शन: dconf सेटिंग्स: चूक और ताले

  • ग्लोबल सेटिंग्स बदलना

    के लिए डिफ़ॉल्ट gsettings/ dconf-editorसंपादित करना है user-db। बदलने के लिए system-db, एक नई ओवरराइड फ़ाइल लिखें और स्कीमा को पुनः लिखें।

    मुझे यह काम नहीं मिला:

    sudo su gdm -c 'gsettings ...'
    

    न तो अन्य उत्तर यहां सेट डिफॉल्ट / ग्लोबल गनोम प्रिवेंसेस (ग्नोम 3) , हो सकता है कि एक पुरानी रिलीज के लिए था।


1
@ रमनो, मुझे इसके बारे में जानने की उत्सुकता थी। आपका बहुत बहुत धन्यवाद।
user.dz 20

1
क्या आप यह बता सकते हैं कि dconf का उपयोग करके उपयोगकर्ता-विशिष्ट सेटिंग्स को कैसे परिभाषित किया जाए (कहते हैं, मुझे एक उपयोगकर्ता के लिए सेटिंग्स का एक सेट तैनात करने की आवश्यकता है (खाता बनाने के बाद उसकी / उसके / .config / dconf dir के लिए आवश्यक फ़ाइलों की प्रतिलिपि बनाना) और दूसरा। दूसरे उपयोगकर्ता के लिए, कैसे?) AFAIK, "टेक्स्ट स्टाइल स्टोर" केवल सिस्टम-वाइड सेटिंग्स के लिए समर्थित है, है ना? क्या केवल उपयोगकर्ता सेटिंग्स डंप करने का कोई तरीका है (जैसे कि ~ / .config / dconf / उपयोगकर्ता में)? मैं "dconf डंप /" के बारे में जानता हूं, लेकिन यह सिस्टम डिफॉल्ट्स सहित संपूर्ण उपयोगकर्ता DB के लिए है। दस्तावेज बेहद अधूरा है।
अनातोली

1
@ अनाटोली, हाँ, टेक्स्ट स्टोर केवल सिस्टम वाइड डेटाबेस के लिए काम करता है। वास्तव में dconf dump /सभी उपयोगकर्ता परिवर्तित प्रविष्टियों को डंप करता है, इसमें ऐसी प्रविष्टियाँ शामिल नहीं हैं जिन्हें कभी बदला नहीं गया है या उन्हें रीसेट नहीं किया गया है। (उदाहरण के लिए, इसमें ऐसी प्रविष्टियाँ शामिल हैं जिन्हें बदल दिया गया है या यहां तक ​​कि उनके मान भी डिफ़ॉल्ट रूप में सेट हैं)। Askubuntu.com/q/420527/26246 देखें । इसके अलावा पूरे DB नहीं है, आप पथ सेट कर सकते हैं। उदा:dconf dump /com/
user.dz

1
@ user.dz, स्पष्टीकरण के लिए धन्यवाद। तो उपयोगकर्ता-विशिष्ट सेटिंग्स को कॉन्फ़िगर करने का एकमात्र तरीका आवश्यक सेटिंग्स वाले किसी अन्य स्वच्छ खाते पर 'उपयोगकर्ता' जीवीडीबी-बाइनरी फ़ाइल बनाकर है और फिर इसे .config / dconf फ़ोल्डर में कॉपी करना है? AFAIK, dconf load / < fileउपयोगकर्ता के रूप में लॉग इन किए बिना उपयोग करने का कोई तरीका नहीं है ।
अनातोली

1
@ अनाटोली, हाँ एक तरीका है। हो सकता है कि लॉग इन किए बिना किसी अन्य उपयोगकर्ता की सेटिंग में बदलाव करने का आसान तरीका आपको कभी भी उसके पासवर्ड या रूट पावर (सुरक्षा नियम) की आवश्यकता हो। यह काम करना चाहिए sudo su username2 -c "dconf load / < file"
user.dz
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.