بعض الشرح عن dconf ماهو وبماذا يستخدم

بسم الله الرحمن الرحيم
السلام عليكم ورحمة الله وبركاته



بعض الشرح عن dconf ماهو وبماذا يستخدم.


 

مقدمة :


ماهو dconf ؟ 

بشكل بسيط dconf هو قاعدة بيانات يتم فيها تخزين إعدادات البرامج التي تستخدم المكتبة الرسومية Gtk (للأمانة لا أعلم إذا كانت تستخدم من طرف أخر) بعض اﻷمثلة عن هذه البرامج كل مشروع جنوم من واجهة وبرامج وهناك أيضا بعض الواجهات الأخرى مثل unity و cinnamon بالإضافة إلى الكثير من البرامج الاخرى , طبعا ليس شرط أن البرنامج الذي يستخدم مكتبة Gtk الرسومية يجب ان يكون أو يجب عليه تخزين إعدادات برنامجه في dconf اﻷمر على حسب المطور ماذا إختار.

قاعدة بيانات ال dconf شيء مثل ملفات ال registry في ويندوز والتي تكون مخزنة على ما أذكر في هذا المسار c:\windows\system32\config والتي ممكن تغير قيمها من برنامج إسمه registry.exe وهو ليس الوحيد لاكن هو الإفتراضي الذي ياتي مع ويندوز.


هل ممكن ان أغير قيم الإعدادات المخزنة في قاعدة بيانات dconf من سطر الأوامر ؟

الجواب نعم من خلال عدة برامج كما registry.exe في ويندوز هناك برنامج إسمه dconf وهو برنامج يعمل من سطر الاوامر لا يشتتكم ان إسمه dconf فهذا برنامج إسمه هكذا أي إذا صح التعبير تم تسميته على إسم ما يتعامل معه ,وهناك برنامج أخر إسمه gsettings و هناك برنامج رسومي إسمه dconf-editor و هناك بعض البرامج المتفرقة التي إستخدمت ما ساشرحه اليوم لتغير بعض الإعدادات المحددة مثل برنامج gnome tweak tool و غيره .

هناك الكثير من البرامج والواجهات في لينكس تخزن إعداداتها في ملفات نصية عادية لاكن قاعدة بيانات dconf ليست نصية ولا يمكن التعامل معها على أنها ملف نصي لاكن ممكن التعامل معها من خلال البرامج التي ذكرتها في الأعلى او من خلال إستخدم كلاس Settings في موديل Gio أي أننا سنستخدم ما إستخدمته البرامج التي ذكرتها في الأعلى .

سنعمل من خلال لغة البرمجة بايثون بالنسبة لباقي اللغات ينفع أيضا لاكن ليس من خلال هذا الشرح ,كل لغة يتوفر لها مكتبة Gtk ممكن إستخدامها لاكن في هذا الشرح وضعت مثال بسيط من خلال بايثون.

لن أشرح في هذا الموضوع كيف ممكن إستخدام dconf لتخزين إعدادات برامجنا من خلال بايثون او غيرها سأشرح فقط كيف أغير قيم الإعدادات المخزنة فيه ,على العموم هذا الموضوع قد يكون مقدمة مهمة تجهز للتقدم بالأمر والإستفادة منه في برامجنا أقصد الإستفادة وفهم ماذا يحدث وليس فقط نسخ لصق للأسطر البرمجية لأن الامر فيه تفاصبل في الحقيقة إعدادات البرامج بالقيم الإفتراضية تخزن في ملف xml في هذا المسار /usr/share/glib-2.0/schemas/ ثم يتم عمل لهم بطريقة ما compile ليتم إدراجهم في قاعدة بيانات ثنائية في الحقيقة إذا كنت تريد بناء توزيعة مبنية على أي توزيعة أخرى وتريد وضع إعداداتك الخاصة هذه الملفات هي مدخلك للأمر طبعا إعدادات الواجهات والبرامج التي تستخدم dconf حيث ممكن عمل لها override أي تجاوز الإعدادات الإفتراضية بإعدادات خاصة بك.


أين يتم حفظ ملف قاعدة بيانات dconf ؟

كل مستخدم له ملف قاعدة بيانات خاصة حتى لا تتداخل الأمور وهي تحافظ على السرية وخصوصية كل مستخدم بإعداداته الخاصة به لهذا في كل مجلد منزل لمستخدم ما يوجد ملف قاعدة بيانات dconf في هذا المسار config/dconf. غالبا سيكون إسمه user لاكن ليس شرط في الحقيقة يمكنك ان تحصل على الإسم من خلال قراءة الملف الموجود في هذا المسار etc/dconf/profile/  بالمناسبة في حال قمت بحذف لملف قاعدة البيانات dconf ثم قمت بعمل logout ثم الدخول للنظام سيتم توليد ملف جديد بالإعدادات الإفتراضية المتوفرة في ملفات xml أي ستعمل reset لكل الإعدادات ولكل البرامج التي تخزن إعداداتها فيه.



لنبدأ :


الأن شرح بعض الأمور لنأخذ مثال عن واجهة Gnome Shell توفر Gnome Shell  إذا صح التعبير  مسار أو عنوان id خاص بها داخل قاعدة بيانات dconf والذي هو org.gnome.Shell ثم داخل هذا المسار هناك مفاتيح keys ولكل مفتاح قيم ممكن تغيرها أو عمل لها reset وممكن الإستعلام عنها و...إلخ قد يكون المفتاح يحفظ قيمة نصية أو مثلا قائمة list داخلها قيم نصية او مثلا true or false و...إلخ .

لنأخذ مثال من خلال برنامج gsettings الذي تكلمت عنه سابقا ساغير الصورة الخلفية لواجهة جنوم شل .
نلاحظ برنامج gsettings ثم الأمر ماذا أريد ان أفعل مثل تغير قيمة أو إستعلام و...إلخ وهنا أردت ان أغير القيمة لهذا إستخدمت set ثم وضعت المسار ثم وضعت المفتاح المراد تغير قيمته ثم وضعت القيمة والتي هي معنا الان قيمة نصية لمسار الصورة .




الأن سأقوم باﻷمر من خلال سكربت بايثون .

 أولا إستدعيت المكتبات الضرورية .

ثانيا قمت بإنشاء كائن object من class الصنف Settings وأعطيته المسار الذي أريده .

ثم طلبت تغير قيمة مفتاح picture-uri لقيمة نصية التي هي مسار الصورة وهنا نلاحظ انني إستخدمت نوع بيانات خاص ممكن الحصول عليه كما في الصورة نلاحظ حرف ال s يحدد ان القيمة نصية وهو إختصار ل string لو كان مثلا true او fasle نضع حرف b بدل حرف الs وهو إختصار ل bool ولو كانت القيمة int نضع حرف i وهكذا.

طبعا ممكن الإستعلام وعمل reset والكثير من الأمور من خلال Settings و هناك أنواع بيانات أخرى متوفرة في GLib.Variant لاكن سأكتفي بهذا ممكن قرائة وثائق GLib وGio.Settings  لمن أراد التوسع أكثر لاكن غالبا هذا ما سنحتاجه .

رابط سكربت إستخدمت فيه Gio.Settings طبعا بالإضافة لأشياء أخرى مثل dbus .


في الصورة السابفة مجرد تنفيذ أمر set_values ستتم التغيرات وإجراءات تغير الصورة الخلفية, ممكن إذا أردنا من خلال delay و apply تغير هذه السياسة بحيث ممكن أن نقوم بتغير أكثر من قيمة ثم عندما نريد نطلب إجراء التغير من خلال apply أظن الامر واضح .



أخيرا :


هذا موضوع قديم كنت اتكلم فيه عن gsettings لاكن لم تكن معلوماتي في وقتها ناضجة كثيرا فهو موضوع قديم جدا على العموم فيه بعض المعلومات الجيدة .
https://arfedora.blogspot.com/2015/10/gnome-shell_23.html


بعض الوثائق الرسمية .
https://developer.gnome.org/gio/stable/GSettings.html

https://developer.gnome.org/glib/2.54/glib-GVariant.html


ذكرت سابقا أنه ممكن عمل override لملفات xml نلاحظ كيف يمكن الأمر من خلال إنشاء ملف بالإعدادات الخاصة بنا وإنهاء إسمه ب gschema.override وممكن ان يبدأ إسمه برقم ثم علامة _ وعندها في حال وجود ملفين بذات الإعدادات ستكون الأسبقية للرقم الاعلى مثلا لنفترض أردت تخطي هذا الملف الموجود في الصورة في الأسفل وهو خاص بفريق فيدورا ممكن عمل ملف بذات الإعدادات المذكورة داخله لاكن سأقوم بتسمية أول الملف برقم أعلى أحببت أن أوضح هذا الشيء بشكل سريع وممكن بعدها مثلا تحزيم هذا الملف وتثبيته أثناء إنشاء التوزيعة وعند كل إنشاء لمستخدم جديد سيتم الأخذ بهذه الإعدادات على انها تتخطى الإعدادات الأساسية .




  اخبرا صورة لإحدى محاولاتي وقد نجحت .








شارك الموضوع

مواضيع ذات صلة

التسميات

2016 (1) 23 (1) 24 (3) 25 (1) 26 (1) 27 (1) إتصال (1) إختراق (2) أدة (1) أدوات (1) إرسال (1) أرش (1) إسترجاع (1) إستعلام (1) أشياء (4) أشياء تفعلها (5) إصلاح (6) إصلاحrealtek (1) إضافات (1) إضافة (1) أعجوبة (1) أعجوية (1) إعداد (1) إقاف (2) أقسام (1) ألعاب (2) الفرق (1) الفلاشة (1) القسم هوم (1) الكتابة بالعربية (1) إلى جانب (1) أندرويد (1) إنشاء مستودع (1) أيات (1) أيزو (1) أيقومات (1) أيقونات (1) ايقونات (2) باتش (1) بارامتر (1) بايثون (14) برامج (47) برامج إسلامية (2) برنامج (18) برودباند (1) بعد (4) بعد التثبيت (5) بلوتوث (1) بناء (1) بيئة عمل (1) تثبيت (25) تجهيز (2) تجهيو من دون (2) تحزيم (2) تحقق (1) تحويل (1) تخصيص (5) ترجمة (2) ترقية (1) تسجيل الشاشة (1) تشغيل (3) تعريف (13) تعطيل (2) تعلم (6) تفعلها (4) تفعيل (2) تقطع الأحرف (1) تقعيل (1) تنزيل (2) تورنت (1) توسعة (1) ثيم (5) ثيمات (1) جافا (1) جماليات (7) جنوم (1) حجم (1) حرق (2) حزمة (1) حل (2) دالة (1) دورة (1) ريدهات (2) سكربت (2) شرح (10) صورة متحركة (1) فايرفوكس (1) فصل (1) فلاشة (3) فيدورا (26) فيدورا بالعربي (1) قاموس (1) كالي (2) كتاب (2) كتب (2) كرت (1) كروت الشاشة (1) كلمة المرور (2) كورس (1) كورورا (1) لعبة (1) لينكس (2) لينكسو (1) ماهو (3) متغير البيئة (1) مجانا (1) محاكات (2) محاكي (1) محمل الإقلاع إصلاح (1) مستودعات (1) مشكلة (2) ملف نصي (1) من إصدار (1) نظام ملفات (1) نمط (2) نواة (1) هجين (4) وايرلس (1) وهمي (2) ويندوز (2) active (2) add (1) after (4) alias (1) andoid studio (1) android (1) android studio (1) Apache (1) arboot (1) arboot fix (1) arch (3) archiso (1) arfedoraccframework (3) arfedoracontrolcenter (3) arfedy (1) atari (1) atom (1) ayat (1) bicon (1) blivet (1) blivet-gui (1) bluetooth (1) book (2) books (2) bootloader fix (1) broadband (1) broadcom (1) broadwayd (1) build (2) builddep (1) bumblebee (1) bumbleebe (2) burn (2) byzanz (1) c# (1) camera (1) cannot open display (1) cannot open display: :0 (1) ccna (1) cd (2) centos (1) change (1) chsh (1) cisco (1) clion (1) clone (1) code.org (1) connect (1) contra (1) convert (1) copr (1) could not connect to the debugger (1) cpu (1) cpufreq (1) createrepo (1) csharp (1) curlew (1) custom (2) dbus (1) dconf (1) dd (1) defragment (2) desktop (1) desktop entry (1) dictionary (1) disks (1) dnf (12) do (4) docker (1) download (2) downloads manager (1) dply (1) DRI PRIME (1) driver (8) dukto (1) e2fsck (1) efi (4) el forkane (1) elforkane (1) elif (1) emergency (3) emergency mode (3) enable (2) error mounting /dev/sd (1) ext4 (1) extend (1) extensions (2) fakenes (1) fast startup (2) fceux (1) fedora (38) fedora 25 alpha (1) fedora cloude (1) fedoraوفيدورا (1) fedy (1) fgmac (2) fgmac-24 (1) file (1) firefox (2) fix (8) flash mem (1) flash memory (2) flashplayer (1) flatpak (2) fpaste (1) free (1) freebsd (1) function (1) game (3) games (1) gedit (1) genymotion (1) gettext (1) gif (1) gimp (1) gio (1) github (5) github.io (1) glibc-common (1) gmaclinux (2) gnome (9) gnome disk (1) gnome shell (12) gnome terminal (1) gnome-disks (1) gnu (1) goldendict (1) google web designer (1) gradio (1) group (1) grub (5) grub2 (1) gtk (3) gtk+ (1) hack (2) hash (3) hdmi (3) hibernate (1) home (2) hosspot (1) hybrid (2) icon (2) icons (3) ide (1) if (1) install (28) installf (9) installing (4) intellij idea (1) iso (1) java (3) jdk (2) jetbrains (1) jetbrains toolbox (1) kali (2) kernel (1) kernel parameters (1) key (1) kickstarts (2) korora (1) krita (1) kvm (1) kvm switches (1) learn (1) legacy (1) legacy bios (3) libreoffice (2) life is trange (1) linux (7) lv (1) lvm (2) mac (4) macros (1) mageia (1) MariaDB and PHP Lamp Server (1) mate terminal (1) mbr (1) md5sum (1) mirro (1) mo (1) mono (2) monodevelop (2) mount (1) mp4 (1) multi screen (1) natron (1) nautilus (2) nes (1) netbeans (1) netcut (1) nintendo (1) ntfs (2) nvidia (7) objdesktop (1) ojuba (2) oop (1) opensuse (1) opera (1) optirun (2) oracle (1) os.path (1) package (1) page (1) pages (1) pantheon (1) parameter (1) parameters (1) password (2) patch (1) path (2) pdf (1) peek (1) photoshop (1) phpstorm (1) plugin (3) plugins (1) plymouth (1) po (1) polkit (1) PostinstallerF (1) pot (1) powerline (2) powerline-go (1) primary display (1) primus (1) primusrun (1) programs (3) put (1) pv (1) pycharm (2) pygobject (1) pygtk (1) python (31) qdbus (1) qemu (2) qemu-kvm (1) query (1) radio (1) raspberry pi (4) raspbian (2) reclaim space (2) record (1) redhat (2) remix (1) remix os (1) repo (4) repofrompath (1) resize2fs (1) rhel (1) rpm (6) rpmbuild (1) rtl8188ee (1) rtl8192c (1) rtl8192ce (1) rtl8192cu (1) rtl8192de (1) rtl8192ee (1) rtl8192se (1) rtl8723ae (1) rtl8723be (1) rtl8723com (1) rtl8821ae (1) rubymine (1) salix (1) scratch (2) scratch2.scratch 2 (1) script (2) seconday display (1) self (1) send (1) settings (1) sha1256sym (1) share desktop (1) shortcut (1) shutter (1) skel (1) skel ماهو (1) skype (1) skype.برامج (1) slackware (1) soundcloud (1) source code (1) spec (2) sqlmap (1) ssh (3) sshd (2) st-trans (1) steam (2) su (1) sudo (2) sudoers (1) swap (2) switch (1) Switchable Graphics (1) synergy (1) teamviewer (1) terminal (2) theme (4) things (4) to (5) tor (2) tor browser (1) torrent (1) transfer closed with 736700 bytes remaining to read (1) translation (1) turn off (2) tuxcut (1) txt (1) ubuntu (1) uefi (5) unable to mount location (1) unity (1) unity3d (1) upgrade (1) usb (1) useradd (2) utf-8 (1) vega (1) vg (1) vgaوتبديل (1) vi (1) vim (1) vino (1) virtual (1) virtual box (1) virtualbox (2) vmware (3) vnc server (1) vokoscreen (1) webstorm (1) wifi (1) windows (3) windows-1256 (1) X Error: BadAccess (1) X Error: BadDrawable (1) yum (2) zeal (1) zealdocs (1)