Dconf- সম্পাদক এবং gsettings একই ডাটাবেস অ্যাক্সেস করা উচিত নয়?


34

এটি একটি মূলত 'একাডেমিক' প্রশ্ন --- কনফিগারেশন সিস্টেমের অভ্যন্তরের আরও ভাল করে বোঝার চেষ্টা করা।

আমি বুঝি যে dconf সিস্টেম gnome3 যে (থামানো হয়েছে) প্রতিস্থাপিত হয়েছে নতুন কনফিগারেশন সিস্টেম GConf ; এটি জিকনফ, ডকনফ, গ্যাসেটিংস এবং তাদের মধ্যে সম্পর্কের থেকে যথেষ্ট স্পষ্ট ।

আমার কাছে মনে হয়েছিল যে প্রোগ্রামগুলি 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-সম্পাদক

উত্তর:


39
  • dconf-editorschema pathসেটিংস ডেটা ট্রি দেখানোর জন্য ব্যবহার করে। জিভিআরএনটি ডাটাবেসে ডেটা সঞ্চয় করতে ব্যবহৃত একই কাঠামো।

  • gsettings(গ্লিব -২.০ থেকে) schema idসেটিংসের ডেটা প্রদর্শন / পেতে ব্যবহার করে। অন্য কোনও অ্যাপ্লিকেশনের মতো একই পদ্ধতিতে জিএসটিটিং এপিআই ব্যবহার করা উচিত।

  • অ্যাপ্লিকেশন বিকাশকারী তার নিজের পছন্দ অনুযায়ী উভয়ই সেট করতে পারবেন। (ক্যানোনিকাল নামকরণের জন্য কিছু বাধা সহ) সুতরাং এর pathচেয়ে আলাদা হতে পারে idতবে বেশিরভাগ অ্যাপ্লিকেশন বিকাশকারীরা অভিন্ন শব্দ সিরিজ / সংমিশ্রণটি ব্যবহার করতে পছন্দ করে। কিছু একই মূলধন সংরক্ষণ করে না। জেনোম থেকে ট্র্যাকার প্রকল্পের উদাহরণ

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

    এছাড়াও, কিছু বিকল্প অ্যাপ্লিকেশনগুলি একই সেটিংস ভাগ করে দেয় যা জিনোম ডেস্কটপের অন্তর্ভুক্ত। উদাহরণ:input-sources


  • প্রথমত, অ্যাপ্লিকেশনগুলিতে গণ্ডগোল করা উচিত নয়dconf

    Dconf প্রকল্প পৃষ্ঠা থেকে পরিচিতি :

    dconfএকটি নিম্ন-স্তরের কনফিগারেশন সিস্টেম। এর মূল উদ্দেশ্য হ'ল প্ল্যাটফর্মগুলিতে জিএসটিটিংগুলিকে ব্যাকএন্ড সরবরাহ করা যা ইতিমধ্যে কনফিগারেশন স্টোরেজ সিস্টেম নেই।

  • কোথায় তথ্য সংরক্ষণ করা হয়? (রেফ: https://wiki.gnome.org/ প্রকল্পগুলি / ডকনফ / সিস্টেম অ্যাডমিনিস্ট্রেটর )

    একটি প্রোফাইল কনফিগারেশন ডাটাবেসের একটি তালিকা। দেখে মনে হচ্ছে যে জিনোম এবং ইউনিটি একই প্রোফাইল ব্যবহার করে।

    $ 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/*ফোল্ডার থেকে জিভিআর্যান্ট ডেটাবেস ছাড়াও একটি পাঠ্য শৈলীর স্টোর বাঁধতে পারে । উদাহরণ (ফাইলের পথ লক্ষ্য করুন, সুতরাং এটি একটি অংশ 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) এর মধ্যে সম্পর্ক

    আমার দ্রুত প্রয়োগের ডেটা / গ্লিব -২.০ ফোল্ডারে স্কিমা এক্সএমএল ফাইলটি কী? ট্রেন্ট দ্বারা তাত্ক্ষণিকভাবে অ্যাপ্লিকেশনটিতে জিএসটিটিং এপিআই ব্যবহার করার একটি দুর্দান্ত উদাহরণ এবং তার অভিজ্ঞতার ভিত্তিতে তার উপসংহার দেখায়।

    ভিনো ফিরে। প্রতিটি অ্যাপ্লিকেশন যা জিএসেটেটিংগুলি ব্যবহার করে তার স্কিমার সংজ্ঞা দেওয়া উচিত এবং সেগুলিতে এটি সংরক্ষণ করা / ইনস্টল করা উচিত /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'
    
  • স্কাইমার সংকলন (রেফারেন্স: ডেকনফ এবং জিনোম-টুইক-টুল দিয়ে বাজানো )

    ইনস্টলেশন প্রক্রিয়া অংশ হিসাবে (এটি একটি dpkg ট্রিগার আছে), স্কিমা এর glib-compile-schemasসরঞ্জাম (গ্লিব থেকে) দিয়ে সংকলিত হয়

    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পড়ে , যা মূল ফাইলগুলি স্কিমাতে কীগুলির ডিফল্ট মানগুলিকে ওভাররাইড করতে পারে (রেফারেন্স )। এগুলি উবার্টু বিতরণ দ্বারা আপস্ট্রিম স্কিমা ডিফল্টগুলিকে ওভাররাইড করার জন্য পরিবর্তনগুলি ধারণ করে।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']
    

    ওভাররাইড ফাইলগুলি ব্যবহারের উদাহরণ, উবুন্টু লাইভ সিডি কীভাবে কাস্টমাইজ করবেন? (5. কাস্টমাইজেশন 2: পটভূমি এবং থিম)।

  • লক ফাইল

    বর্তমানে, ডকনফ কেবল প্রতি-কী লকিং সমর্থন করে, কোনও সাব-পাথ লক নেই। ব্যবহারকারীর সংজ্ঞায়িত মানগুলি এখনও এতে সংরক্ষণ করা user-dbহবে তবে অ্যাপ্লিকেশনগুলিতে কোনও প্রভাব ফেলবে না। dconf / gsettings locked লক করা কীগুলির পরিবর্তে ডিফল্ট মানগুলি দেয় returns লক ফাইলগুলি সংরক্ষণ করা হয় 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-editoruser-dbsystem-db

    আমি এটি কাজ করতে পারি না:

    sudo su gdm -c 'gsettings ...'
    

    উভয় উত্তর এখানে নেই ডিফল্ট / গ্লোবাল জিনোম পছন্দসমূহ (জিনোম 3) সেট করুন এটি পুরানো প্রকাশের জন্য হতে পারে।


1
@ রুমানো, এটি সম্পর্কে জানতে আমারও কৌতূহল ছিল had আপনাকে অনেক ধন্যবাদ.
user.dz

1
আপনি কীভাবে ডিসকনফ ব্যবহার করে ব্যবহারকারী-নির্দিষ্ট সেটিংস সংজ্ঞায়িত করতে পারেন (বলুন, আমাকে একটি ব্যবহারকারীর জন্য সেটিংসের একটি সেট স্থাপন করতে হবে (অ্যাকাউন্ট তৈরি করার পরে তার / তার / con / .config / dconf dir এ প্রয়োজনীয় ফাইলগুলি অনুলিপি করতে হবে)) এবং অন্যটি দ্বিতীয় ব্যবহারকারীর জন্য, কিভাবে?)? আফাইক, "পাঠ্য শৈলীর দোকান" কেবলমাত্র সিস্টেম-ব্যাপী সেটিংসের জন্য সমর্থিত, তাই না? শুধুমাত্র ব্যবহারকারীর সেটিংস (যেমন ~ / .config / dconf / ব্যবহারকারীর মধ্যে থাকা) ডাম্প করার কোনও উপায় আছে? আমি "ডকনফ ডাম্প /" সম্পর্কে জানি তবে এটি সিস্টেম ডিফল্ট সহ পুরো ব্যবহারকারী ডিবি-র জন্য for ডকুমেন্টেশন চূড়ান্ত অসম্পূর্ণ।
আনাতোলি

1
@ আনাতোলি, হ্যাঁ, পাঠ্য স্টোর কেবল সিস্টেম ওয়াইড ডাটাবেসের জন্য কাজ করে। প্রকৃতপক্ষে dconf dump /সমস্ত ব্যবহারকারীর পরিবর্তিত এন্ট্রি ডাম্প করে, এতে এন্ট্রি কখনও পরিবর্তন হয় না বা পুনরায় সেট করা হয় না। (উদাহরণস্বরূপ, এতে অন্তর্ভুক্ত রয়েছে যে এন্ট্রি পরিবর্তন করা হয়েছে বা সেট করা হয়েছে এমনকি তাদের মানগুলি ডিফল্ট হিসাবে একই)। Askubuntu.com/q/420527/26246 দেখুন । পুরো ডিবিও নয়, আপনি পথ নির্ধারণ করতে পারেন। উদা:dconf dump /com/
user.dz

1
@ User.dz, স্পষ্টির জন্য ধন্যবাদ। সুতরাং ব্যবহারকারী-নির্দিষ্ট সেটিংস কনফিগার করার একমাত্র উপায় হ'ল প্রয়োজনীয় ব্যবহারকারী সেটিংস সহ অন্য একটি পরিষ্কার অ্যাকাউন্টে 'ব্যবহারকারী' জিভিডিবি-বাইনারি ফাইল তৈরি করা এবং তারপরে .config / dconf ফোল্ডারে অনুলিপি করা? আফাইক, dconf load / < fileব্যবহারকারী হিসাবে লগ ইন না করে ব্যবহার করার কোনও উপায় নেই ।
আনাতলি

1
@ আনাটোলি, হ্যাঁ একটাই পথ। আপনার পাসওয়ার্ড বা রুট পাওয়ার (সুরক্ষা বিধি) কখনই প্রয়োজন তার লগ না করেই অন্য ব্যবহারকারীর সেটিংস পরিবর্তন করার সহজ উপায় হতে পারে। এটি কাজ করা উচিত sudo su username2 -c "dconf load / < file"
user.dz
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.