Morfitronik Security & Privacy

Oczyszczanie bazy danych dconf

2015-10-17 16:00:43
Morfik

Jak możemy przeczytać na wiki projektu GNOME , dconf to swojego rodzaju baza danych, która zawiera informacje o konfiguracji systemu w postaci klucz-wartość. Jak nie korzystam, co prawda, ze środowisk graficznych ale wykorzystuję w swoim linux’ie szereg ich elementów, które mogą działać z powodzeniem w okrojonym systemie, np. gnome-keyring . Część programów wykorzystuje tę bazę danych do przechowywania swoich ustawień, które możemy zmieniać via gsettings , gconf lub też dconf . Problem pojawia się po dłuższym czasie używania systemu, gdzie cześć z ustawień jest już przestarzała, np. w wyniku zaprzestania użytkowania jakiejś aplikacji. Przydałoby się zatem raz na jakiś czas oczyścić te bazę danych ze zbędnych wpisów i o tym będzie ten wpis.

Gsettings, gconf oraz dconf

Zgodnie z informacjami jakie znalazłem tutaj , tutaj i tutaj, gconf jest już przestarzały i odnosi się do konfiguracji w środowiskach GNOME 2.x . Część z aplikacji jednak nadal może wykorzystywać to API. W nowszych wersjach GNOME, korzysta się z gsettings . Z kolei gsettings wykorzystuje dconf jako backend oferujący GUI ( dconf-editor ), które ułatwia zmianę ustawień. Tak na marginesie, opisy poszczególnych kluczy w dconf są pobierane z katalogu /usr/share/glib-2.0/schemas/ , natomiast baza danych jest trzymana w min. katalogu użytkownika pod ~/.config/dconf/user .

Plik ~/.config/dconf/user

Przyjrzyjmy się zatem bliżej plikowi ~/.config/dconf/user . Jest to plik binarny i nie damy rady podejrzeć go za pomocą edytora teksu. Wyżej wspomniałem, że możemy podejrzeć zawartość bazy korzystając, np. z dconf-editor , odpalmy go zatem:

Problem w tym, że dconf-editor umożliwia jedynie odczyt i zapis wartości poszczególnych kluczy dostępnych w bazie. Nie ma jednak opcji usuwania takich kluczy, czy czyszczenia bazy danych. W tym celu będziemy musieli wydobyć wpisy z bazy danych i usunąć ręcznie te, które są zbędne. Następnie, z tych pozostałych wpisów trzeba będzie sporządzić nową bazę danych.

Przechodzimy zatem do katalogu ~/.config/dconf/ i wydobywamy zawartość bazy danych:

$ cd ~/.config/dconf/
$ cp user user.back
$ dconf dump / > database

Po otwarciu pliku database , powinna nam się ukazać zawartość bazy. Poniżej jest przykładowa sekcja ustawień:

[apps/light-locker]
late-locking=false
lock-after-screensaver=uint32 1
lock-on-suspend=true
lock-on-lid=false

Są to dokładnie te wpisy, które widzieliśmy wyżej w gconf-editor . Niemniej jednak, baza danych zawiera jedynie wpisy, które różnią się od wartości domyślnych, czyli te, które zmieniliśmy. Dlatego też nie wpadajmy w panikę, gdy w pliku tekstowym bazy danych nie będzie linijek od opcji, które są pokazane w gconf-editor .

Odtwarzanie bazy danych dconf

Jeśli w powyższym pliku widzimy sekcje odnoszące się do programów, których nie mamy już w systemie, możemy takie bloki kodu usunąć. Dodatkowo, możemy także masowo zmienić konfigurację wszystkich widocznych tam parametrów – zawsze to wygodniejsze niż szukanie po kluczach w GUI.

Dokonywanie zmian na bazie danych dconf wymaga usunięcia starego pliku ~/.config/dconf/user , z którego korzysta system. Po usunięciu tego pliku, trzeba ponownie zalogować się w sesji graficznej. Ma to na celu reset ustawień, który zaowocuje utworzeniem nowego pliku user niezawierającego praktycznie żadnej treści. Dopiero po ponownym zalogowaniu możemy przywrócić zmienioną bazę danych. Jeśli nie przeprowadzimy tych czynności, to po odtworzeniu bazy i ponownym zalogowaniu się, wszystkie zmiany, które wprowadziliśmy, zostaną zresetowane.

By zbudować bazę wpisujemy w terminal poniższe polecenia:

$ cd ~/.config/dconf/
$ rm user

W tym miejscu restartujemy sesję graficzną. Po zalogowaniu się, ponownie przechodzimy do katalogu ~/.config/dconf/ i przeprowadzamy poniższe kroki:

$ cd ~/.config/dconf/
$ dconf load / < ./database
$ dconf update /

Teraz już tylko restartujemy sesję graficzną. I to w zasadzie wszystko.


Komentarze

Zawartość wpisu