首先,应用程序不应混乱dconf
dconf项目页面的介绍:
dconf
是一个低级配置系统。其主要目的是在尚未具有配置存储系统的平台上为GSettings提供后端。
数据存储在哪里?(参考: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
可以从db.d/*
文件夹中绑定GVariant数据库和文本样式存储。示例(注意文件路径,它是的一部分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
)之间的关系
Quickly应用程序的data / glib-2.0文件夹中的模式XML文件是什么?通过特伦特显示了快速的应用程序使用API GSettings一个很好的例子,他的结论基于他的经验。
回到维诺。每个使用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
与same 一起用作新数据类型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和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
读取供应商替代文件,它们是可以替代架构中键的默认值的密钥文件(参考:)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)的其他答案都可能不是针对旧版本的。