ขั้นแรกแอพไม่ควรยุ่งกับdconf
บทนำจากหน้าโครงการdconf :
dconf
เป็นระบบการกำหนดค่าระดับต่ำ วัตถุประสงค์หลักคือเพื่อมอบแบ็กเอนด์ให้กับ GSettings บนแพลตฟอร์มที่ยังไม่มีระบบจัดเก็บข้อมูลการกำหนดค่า
ข้อมูลถูกเก็บไว้ที่ไหน? (Ref: https://wiki.gnome.org/Projects/dconf/SystemAdministrators )
โปรไฟล์คือรายการของฐานข้อมูลการกำหนดค่า ดูเหมือนว่า Gnome & Unity จะใช้โปรไฟล์เดียวกัน
$ cat /etc/dconf/profile/gdm
user-db:user
system-db:gdm
user-db:user
: ฐานข้อมูลแรกในโปรไฟล์คืออ่าน - เขียนrw
และสร้างขึ้นในโฮมไดเรกทอรีของผู้ใช้
$ file ~/.config/dconf/user
/home/sneetsher/.config/dconf/user: GVariant Database file, version 0
system-db:gdm
: อ่านเท่านั้น
$ file /etc/dconf/db/gdm
/etc/dconf/db/gdm: GVariant Database file, version 0
dconf
สามารถผูกร้านค้าลักษณะข้อความนอกเหนือจากฐานข้อมูล GVariant จากdb.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
)
ไฟล์ schema XML ในโฟลเดอร์ data / glib-2.0 ของแอปพลิเคชัน Quickly ของฉันคืออะไร โดยเทรนต์แสดงตัวอย่างที่ดีของการใช้ GSettings API ในแอปพลิเคชันอย่างรวดเร็วและข้อสรุปของเขาขึ้นอยู่กับประสบการณ์ของเขา
กลับไปที่ Vino แต่ละแอปพลิเคชันที่ใช้ GSsettings ควรกำหนดสคีมาและควรจัดเก็บ / ติดตั้งใน/usr/share/glib-2.0/schemas/
(เป็นไดเรกทอรี glib):
$ 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'
การรวบรวม Schema's (การอ้างอิง: การเล่นด้วย dconf และ gnome-tweak-tool )
ในฐานะที่เป็นส่วนหนึ่งของกระบวนการติดตั้ง (มันมีทริกเกอร์ 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
อ่านแทนที่ผู้ขายไฟล์ซึ่งเป็นไฟล์ที่สำคัญที่สามารถแทนที่ค่าเริ่มต้นสำหรับคีย์ใน schemas (Ref: man glib-compile-schemas
) พวกเขามีการเปลี่ยนแปลงที่ทำโดยการกระจาย Ubuntu เพื่อแทนที่ค่าเริ่มต้นของสคีมา
$ 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 Live CD (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 ...'
ไม่ใช่คำตอบอื่น ๆ ที่นี่ตั้งค่าเริ่มต้น / การตั้งค่า Gnome ทั่วโลก (Gnome 3)ซึ่งอาจเป็นของรุ่นเก่า