Po pierwsze, aplikacje nie powinny zadzieraćdconf
Wprowadzenie ze strony projektu dconf :
dconf
to system konfiguracji niskiego poziomu. Jego głównym celem jest zapewnienie zaplecza GSettings na platformach, które nie mają jeszcze systemów pamięci konfiguracji.
Gdzie są przechowywane dane? (Patrz: https://wiki.gnome.org/Projects/dconf/SystemAdministrators )
Profil to lista baz danych konfiguracji. Wygląda na to, że Gnome & Unity używa tego samego profilu.
$ cat /etc/dconf/profile/gdm
user-db:user
system-db:gdm
user-db:user
: Pierwsza baza danych w profilu jest do odczytu i zapisu rw
i jest tworzona w katalogu osobistym użytkownika.
$ file ~/.config/dconf/user
/home/sneetsher/.config/dconf/user: GVariant Database file, version 0
system-db:gdm
: tylko czytać
$ file /etc/dconf/db/gdm
/etc/dconf/db/gdm: GVariant Database file, version 0
dconf
może powiązać magazyn stylów tekstowych oprócz GVariant Database z db.d/*
folderu. Przykład (ścieżka pliku powiadomienia, więc jest to część 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
...
Pliki schematu: Relacja między schema id
&schema path
( *.gschema.xml
)
Co to jest plik XML schematu w folderze data / glib-2.0 mojej aplikacji Quickly? przez trent pokazuje dobry przykład użycia GSettings API w aplikacji Quickly, a jego wnioski oparte są na jego doświadczeniu.
Powrót do Vino. Każda aplikacja korzystająca z GSsettings powinna zdefiniować swoje schematy i przechowywać je / instalować w /usr/share/glib-2.0/schemas/
(Jest to katalog 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>
...
Jeśli zauważyłeś, schemat jest zdefiniowany za pomocą id
a oraz a path
. Nazwa pliku schematu jest zgodna z id
wartością.
<schema id='org.gnome.Vino' path='/org/gnome/desktop/remote-access/'>
*.enums.xml
pliki służą do deklaracji niestandardowego wyliczenia, które mają być używane jako nowe typy danych w *.gschema.xml
tym samym 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'
Kompilowanie schematu ( zob . : Gra z dconf i gnome-tweak-tool )
W ramach procesu instalacji (ma wyzwalacz dpkg), schematy są kompilowane za pomocą glib-compile-schemas
narzędzia (z glib)
sudo glib-compile-schemas /usr/share/glib-2.0/schemas
*.gschema.xml
zostanie skompilowany do pliku binarnego /usr/share/glib-2.0/schemas/gschemas.compiled
Pliki zastępowania dostawcy ( *.gschema.override
)
Oprócz plików schematów glib-compile-schemas
odczytuje pliki zastępowania dostawcy , które są plikami kluczy, które mogą przesłonić domyślne wartości kluczy w schematach (patrz:) man glib-compile-schemas
. Zawierają zmiany wprowadzone przez dystrybucję Ubuntu w celu zastąpienia domyślnych schematów nadrzędnych.
$ 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']
Przykład zastosowania zastępowania plików, zobacz Jak dostosować Live CD Ubuntu? (5. Dostosowanie 2: Tła i motywy).
Zablokuj pliki
Obecnie dconf obsługuje tylko blokowanie według klucza, bez blokady podścieżki. Wartości zdefiniowane przez użytkownika będą nadal przechowywane, user-db
ale nie będą miały wpływu na aplikacje. dconf / gsettings zwraca zamiast tego wartości domyślne dla zablokowanych kluczy. Zablokuj pliki są przechowywane w db.d/locks/
. Przykład:
$ 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
...
Po modyfikacji blokad, aby uruchomić skutecznie:
sudo dconf update
Dobra prezentacja: dconf Ustawienia: ustawienia domyślne i blokady
Zmiana ustawień globalnych
Domyślną opcją gsettings
/ dconf-editor
jest edycja user-db
. Aby to zmienić system-db
, napisz nowy plik zastępowania i ponownie skompiluj schemat.
Nie mogłem tego uruchomić:
sudo su gdm -c 'gsettings ...'
żadne inne odpowiedzi tutaj Ustaw domyślne / globalne preferencje gnome (Gnome 3) , może być tak, jak w starej wersji.
dconf dump /
zrzuca wszystkie zmienione przez użytkownika wpisy, nie zawiera wpisy nigdy zmieniane lub zostały zresetowane. (na przykład zawiera wpisy zostały zmienione lub ustawione, nawet ich wartości są takie same jak domyślne). Zobacz askubuntu.com/q/420527/26246 . Również nie jest cała baza danych, możesz ustawić ścieżkę. np .:dconf dump /com/
dconf load / < file
bez zalogowania się jako użytkownik.sudo su username2 -c "dconf load / < file"