Gconf — GNOME pod maską

W tym artykule chciałbym przybliżyć wam funkcje, budowę i zastosowanie narzędzia Gconf. Gconf jest krótko mówiąc systemem przechowywania preferencji różnych programów jak również samego środowiska graficznego wbudowanym w GNOME 2.

Jego poprzednikiem był gnome-config. Był to bardzo prosty system konfiguracji wykorzystujący pliki .INI. Takie rozwiązanie sprawdzało się tylko przy małych aplikacjach, dlatego już w GNOME 1.4 wprowadzono system gconf, aczkolwiek dopiero w wersji 2 zaczęto wykorzystywać nowy system na szeroką skalę. W budowie jest on troszkę podobny do rejestru systemu Windows, jednak podobieństwo jest małe i najwięcej wspólnego mają graficzne interfejsy do zarządzania kluczami.

Budowa

Wszystkie dane przechowywane są w plikach XML, które znajdują się w odpowiednich katalogach. Ustawienia pobierania są najpierw w trybie tylko do odczytu (gdy nie jesteśmy superużytkownikiem, tak zwanym rootem) z pliku /etc/gconf/gconf.xml.mandatory. Znajdują się tam siłowe, wymuszone ustawienia dla wszystkich użytkowników (słowo „mandatory” w języku angielskim oznacza „obowiązkowy”). Ustawień tych (na wszelki wypadek) nie można zmienić ani usunąć. W następnej kolejności przetwarzany jest plik $(HOME)/.gconf ( $HOME to zmienna środowiskowa oznaczająca ścieżkę do naszego folderu domowego) już w trybie do odczytu i zapisu. Na samym końcu dodawane są wartości domyślne z pliku etc/gconf/gconf.xml.defaults. Są one, tak samo jak wartości obowiązkowe, dla zwykłego użytkownika ładowane w trybie tylko do odczytu, a ich wartość zmienić może jedynie root.
Klucze podzielone są na katalogi lecz te w odróżnieniu od „regedita” mają bardzo intuicyjne nazewnictwo. Łatwo się domyśleć, że w gałęzi /apps znajdują się dane aplikacji, natomiast /system to informacje o systemie. Każdy klucz ma swój schemat, który zawiera skrócony oraz pełny opis klucza, jego domyślną wartość oraz typ wartości (int, string itp). Jest to swego rodzaju dokumentacja, bardzo przydatna dla administratorów.

Zarządzanie w trybie tekstowym

Gconftool jest narzędziem do tekstowego zarządzania gconfem. Pozwala m.in. na pobieranie, modyfikowanie i usuwanie zarówno kluczy jak i ich wartości, instalacje schematów. Przykładowo, aby pobrać informacje o naszym motywie ikon, wydamy polecenie gconftool-2 -g /desktop/gnome/interface/icon_theme. Możemy też zmienić tapetę – gconftool-2 -t string -s /desktop/gnome/background/picture_filename /scieżka/do/tapety. Oczywiście opcji i możliwości jest dużo, aby je poznać najlepiej zapoznać się z manualem do programu gconftool-2 (man gconftool-2).

W trybie graficznym

Gconf-editor to nakładka graficzna na narzędzie gconftool. Dzięki „edytorowi konfiguracji” możemy łatwo zmieniać wartości kluczy bez wpisywania długich komend do terminala.

1_thmb.jpg
Rys.1 Gconf w akcji

Gdy uruchomimy narzędzie gconf-editor na koncie administratora lub poprzez sudo gconf-editor, będziemy mogli ustawić wartości obowiązkowe oraz zmienić wartości domyślne. Aby dokonać tego niebezpiecznego czynu (nie polecam zbyt dużej zabawy z domyślnymi ustawieniami…), należy po uruchomieniu edytora konfiguracji z menu „Plik” wybrać „nowe okno ustawień obowiązujących” (lub użyć skrótu klawiszowego CTRL+M”) lub „nowe okno ustawień domyślnych” (albo CTRL+D na klawiaturze).

Tanie triki na GNOMiki ;)

Gconf-editor pozwala jak żadne inne narzędzie modyfikować system wedle własnego uznania. Poniższa tabela to ciekawy spis kluczy, których modyfikacja może dać ciekawe efekty…

klucz/gałąź opis i sugestie
/apps/notification-daemon/popup_location Położenie „dymku informacyjnego”. Możliwe wartości to „top_left”,”top_right”,”bottom_left” and „bottom_right”
/desktop/gnome/volume_manager/autoipod_command polecenie wykonywane automatycznie po podłączeniu iPoda (zwykłego odtwarzacza mp3 firmy noname również), domyślnie uruchamiany jest rhythmbox (odtwarzacz audio). Ciekawym rozwiązaniem byłaby synchronizacja danych pomiędzy katalogiem z muzyką a odtwarzaczem muzyki
/desktop/gnome/url-handlers/ W tej gałęzi przechowywane są „łapacze linków” (dziwna nazwa, ale zgadza się z funkcją). Przykładowo gdy /desktop/gnome/url-handlers/gg/command ma wartość gaim-url-handler "%s", to po kliknięciu na link gg:2813235 zostanie uruchomiony komunikator gaim z oknem rozmowy z numerem 2813235… Każda podgałąź gałęzi musi zawierać 3 klucze – command (komenda), enabled (włączony lub wyłączony) oraz needs_terminal (polecenie uruchamiane w terminalu)
/apps/nautilus/desktop/computer_icon_visible Określa czy ikona „Komputer” ma się znajdować na pulpicie.
/apps/nautilus/desktop/*_icon_visible Jak wyżej, analogicznie postępujemy wstawiając w miejsce gwiazdki wyraz home (folder domowy), documents (dokumenty), network (sieć) lub trash (kosz)
/apps/nautilus/desktop/computer_icon_name Alternatywna nazwa dla ikonki Komputer
apps/nautilus/desktop/*_icon_name Jak wyżej, analogicznie postępujemy wstawiając w miejsce gwiazdki wyraz home (folder domowy), documents (dokumenty), network (sieć) lub trash (kosz)
/apps/nautilus/desktop/volumes_visible Określa czy ikonka urządzenia ma być automatycznie dodawana do pulpitu.
/apps/nautilus/preferences/confirm_trash Jeśli odznaczymy, to nie będzie potrzeby potwierdzania każdej operacji przeniesienia pliku do kosza
/apps/nautilus/preferences/show_desktop Możemy wyłączyć pokazywanie ikon :]
/apps/nautilus/icon_view/captions Lista podpisów pod ikoną w widoku ikon lub na pulpicie. Ilość wyświetlanych podpisów zależy od stopnia powiększenia. Dopuszczalne wartości to: „size”, „type”, „date_modified”, „date_changed”, „date_accessed”, „owner”, „group”, „permissions”, „octal_permissions” i „mime_type”.
/apps/gnome-session/options/show_splash_screen Jeżeli odhaczymy, to nie będzie wyświetlany ekran powitalny
/apps/nautilus/preferences/executable_text_activation Co robić w wykonywalnymi plikami tekstowymi kiedy są aktywowane (pojedynczym lub podwójnym kliknięciem). Dopuszczalne wartości: „launch” – uruchomienie jako program, „ask” – pytanie co zrobić poprzez okno dialogowe, „display” – wyświetlanie jako pliki tekstowe.
/apps/nautilus/preferences/desktop_is_home_dir Określa, czy Nautilus użyje katalogu domowego użytkownika jako pulpitu. Jeżeli nie, wówczas jako pulpit użyty zostanie katalog ~/Desktop.
/apps/gnome-screenshot/include_border Dołączanie do zrzutu ekranu ramki menedżera okien
/apps/gnome-screenshot/border_effect Efekt dodawany do zewnętrznej części krawędzi przy robieniu zrzutu ekranu korzystając z domyślnego narzędzia GNOME. Dopuszczalne wartości to „shadow” (cień), „none” (brak) oraz „border”.

Przykład zastosowania

Na koniec wykorzystamy w praktyce istnienie gconfa. Poniższy skrypt został napisany w bashu, do poprawnego działania potrzebuje programów zenity i scrot [ten pierwszy jest domyślnie zainstalowany w Ubuntu, ten drugi musiałem zainstalować (sudo apt-get install scrot)]. Scrot to świetna aplikacja konsolowa do tworzenia zrzutów ekranu, a zenity to program do wyświetlania graficznych okienek z ustaloną przez nas zawartością. Skrypt wyświetla informacje o motywie ikon/GTK/Metacity oraz o czcionce GTK/Metacity po czym robi zrzut ekranu.

#!/bin/bash
ikony=`gconftool-2 -g /desktop/gnome/interface/icon_theme`
motyw_gtk=`gconftool-2 -g /desktop/gnome/interface/gtk_theme`
motyw_metacity=`gconftool-2 -g /apps/metacity/general/theme`
czcionka_gtk=`gconftool-2 -g /desktop/gnome/interface/font_name`
czcionka_meta=`gconftool-2 -g /apps/metacity/general/titlebar_font`
scrot %Y-%m-%d.png -q100 -d 1&
zenity --info --text "
ikony : $ikony
motyw GTK :$motyw_gtk
motyw metacity :$motyw_metacity
czcionka gtk: $czcionka_gtk
czcionka metacity :$czcionka_meta
A teraz uśmiechnij się do zdjęcia ;)
"

Efekt końcowy wygląda mniej więcej tak:

2_thmb.jpg
Rys. 2 Robimy zrzut ekranu, trochę mniej standardowo

Zachęcamy do zamieszczania w komentarzach swoich skryptów wykorzystujących Gconf a także innych ciekawych zastosowań tego rozbudowanego konfiguratora.

Komentarze (RSS)
Komentarze są prywatnymi opiniami dodających je osób. Prosimy o zachowanie kultury wypowiedzi. Komentarze obraźliwe oraz obniżające poziom serwisu będą usuwane. Więcej w regulaminie komentowania.

25 komentarzy

  1. rootkit 14 czerwca 2007 o godz. 23:28 #

    Fajny artykuł, dzięki :]

  2. szejk 14 czerwca 2007 o godz. 23:32 #

    Jedyna rzecz z gnome którą chciałbym zobaczyc w kde.

  3. michuk 14 czerwca 2007 o godz. 23:53 #

    A jak za dużo namieszacie to też jest rozwiązanie: how-to-cleanup-your-gnome-registry

  4. ventrue 15 czerwca 2007 o godz. 0:40 #

    Widzę, że ostateczna wersja tego świetnego artykułu wreszcie ujrzała światło dzienne :)

  5. marb 15 czerwca 2007 o godz. 0:48 #

    @szejk, jesteś pierwszą osobą, która chwali gconf :) Zazwyczaj zarówno użytkownicy zarówno kde jak i gnome 'jadą' po gconf'ie za zbytnie podobieństwo do windowsowego rejestru.

    Dla mnie może być, brakuje mi za to opisu sporej części opcji, czy choćby info o typie i formacie danych jakie należy wprowadzać w pola. Dlatego, ten artykuł jest bardzo przydatny.

  6. kubaw 15 czerwca 2007 o godz. 1:04 #

    Niezłe to, niezłe. Kto powiedział że wszystko w windowsie jest złe? Przydało by się takie coś globalnie, nie tylko dla gnome. Tzn. żeby więcej aplikacji chciało z tym współpracować.

  7. szejk 15 czerwca 2007 o godz. 1:26 #

    @marb

    Akurat ja uważam że windziany rejestr to jest jedna z lepszych rzeczy w tym systemie, może trochę przerośnięty ale jak sie dba o system to nie ma większego problemu z nim. Jedynie regedit jest do dupy , do dziś nie zrobili w nim na przykład wyszukiwania przyrostowego. Pozatym rejestr dostarcza wspólne api dla całego systemu i wszystkich aplikacji a nie jak w linuksie co plik konfiguracyjny to inny format.

  8. michuk 15 czerwca 2007 o godz. 2:31 #

    Pozatym rejestr dostarcza wspólne api dla całego systemu i wszystkich aplikacji a nie jak w linuksie co plik konfiguracyjny to inny format.

    Z drugiej strony jednak rejestr windowsowy edytować jest naprawdę trudno — łatwo coś zepsuć, to robota dla profesjonalisty. Edycja plików konfiguracyjnych w /etc, szczególnie jak są dobrze opisane, to banał.

    Rejestr GNOME jest trochę poręczniejszy od tego z Windows, ale cały czs ma za mało dokumentacji. Ideałem byłoby wspólne API i rejestr, ale z możliwością edycji dla konkretnej aplikacji i z sensownie rozmieszczoną dokumentacją. No i oczywiście przyrostowe backupy robione automatycznie.

  9. szejk 15 czerwca 2007 o godz. 2:48 #

    @michuk

    Prawda, takie połączenie najlepszych cech rejestru windowsa i gconfa opartego na plikach xml było by idealne. Jak by wypracowano standart jakiś że wszystkie pliki konfiguracyjne są oparte np o xml to o ile łatwiej by było pisać wszelkie narzędzia konfiguracyjne takie jak webmin czy yast. Dzis twórcy tych narzędzi muszą praktycznie dla każdego programu pisać odzielny algorytm parsujący. Po za tym pliki xml dalej moża edytować przy pomocy vima ;)

  10. rootkit 15 czerwca 2007 o godz. 10:10 #

    Ale fajnie by było jakbyś opisał więcej opcji :]

  11. Kenneth 15 czerwca 2007 o godz. 11:10 #

    Nom, przydalby sie opis wiekszej ilosci opcji, np. jak zmienic kolor zegarka na systrayu?

  12. rootkit 15 czerwca 2007 o godz. 11:35 #

    skoro już tak o Gnome, to zapraszam: http://www.gnome.yoyo.pl :) Poszukuję: admina, 2 moderatorów i oczywiście userów :]

  13. michuk 15 czerwca 2007 o godz. 11:57 #

    @rootkit: po co nowe forum o GNOME? Nie lepiej stworzyć podforum na forum.jakilinux.org? Są już userzy, admini, moderatorzy :) Think about it.

  14. rootkit 15 czerwca 2007 o godz. 12:13 #

    XFce ma swoje forum i calkiem niezle im idzie (www.xfce.daxa.pl) także czemu ma nie powstać małe forum o Gnome? :-)

  15. michuk 15 czerwca 2007 o godz. 13:22 #

    XFce ma swoje forum i calkiem niezle im idzie (www.xfce.daxa.pl) także czemu ma nie powstać małe forum o Gnome?

    Nie jestem fanem rozdrobnienia i zakładania kont na 100 forach traktujących o każdej bibliotece systemu. Wydaje mi się, że lepiej jest gromadzić społeczność w jednym miejscu (albo chociaż w kilku miejscach, a nie kilkuset). Jest już forum PLUGu, jest Polskie Forum Linuksowe, jest forum jakilinux.org (może coś przeoczyłem), a oprócz tego jest usenet z tematycznymi grupami. Wydaje mi się, że starczy. Ale to tylko moje zdanie, nie bierz tego jako krytyka tej konkretnej inicjatywy. Ja ogólnie stoję na stanowisku, że lepiej się łączyć niż dzielić :)

  16. rootkit 15 czerwca 2007 o godz. 15:31 #

    Traktuje to forum jako miejsce, w którym można "posegregować" wszystkie problemy, FAQ, tricki i pytania – będzie można łatwiej znaleźć info o interesującym zagadnieniu (w tym wypadku gnome), nie trzeba będzie przeszukiwać całego neta, forum ubuntu albo suse, żeby znaleźć jedną rzecz dotyczącą jednego programu :] Poza tym polityka unixowa: wiele małych programów (for) sprawdza się dużo lepiej niż jedno duże :)

  17. OKII 15 czerwca 2007 o godz. 16:01 #

    Jedyna rzecz z gnome którą chciałbym zobaczyc w kde.

    Coś podobnego z GUI pod KDE – Elektra, jednak opis współpracy tego "cuda" z Gconf nie nastraja optymizmem:

    Status: outdated, not working

    Gconf Pairs are stored in Gconf

    What is this backend really doing?

    Z paroma innymi "backend'ami" opisywanymi na tej stronie też nie jest dobrze. Choć kilka już "fully working". ;) Jest jeszcze KCfg Creator i KConfigEditor, oba autorstwa Zacka Rusina. Co do Elektry to w tym małpowaniu rejestru Windows poszedł autor trochę za daleko – stara strona na sourceforge "The Linux Registry", dobrze, że nowa strona nie ma "rejestr" w nazwie. Jedną ikonkę to nawet bezpośrednio skopiował z regedit'a (choć to szczegół, ciekawe jak to ma się do licencji).

  18. kubaw 15 czerwca 2007 o godz. 17:04 #

    @rootkit: dlatego wymyślono coś takiego jak subfora.

  19. michuk 15 czerwca 2007 o godz. 18:19 #

    Poza tym polityka unixowa: wiele małych programów (for) sprawdza się dużo lepiej niż jedno duże :)

    Jasne i wielu biednych userów zakłada po 50 kont na różnych forach szukając odpowiedniego do zadania pytania….

    Jak tam chcecie. IMHO rozdrobnienie tylko i wyłącznie utrudnia znalezienie pomocy.

  20. lukas 15 czerwca 2007 o godz. 18:26 #

    Świetna robota. Przydałby się więcej tych trików tak jak ktoś pisał wyżej! ;D

  21. pi00 16 czerwca 2007 o godz. 0:03 #

    Jak najbardziej zgadzam się z michukiem. Również nie lubię mieć masy loginów. Swoją drogą myślałem, że po zarejestrowaniu się na jakilinux.org będę miał konto na forum, a tu masz :P

  22. michuk 16 czerwca 2007 o godz. 13:11 #

    Swoją drogą myślałem, że po zarejestrowaniu się na jakilinux.org będę miał konto na forum, a tu masz

    No niestety forum było wdrażana "na chybcika" i nie zrobiliśmy integracji (chyba nikt jeszcze zresztą nie zrobił pomiędzy WP a pubBB). Riklaunim pracuje nad tym.

  23. obi_gl 17 czerwca 2007 o godz. 10:55 #

    Co do tanich chwytów na GNOMiki… kilka jest też w:
    http://portal.suse.pl/wiki/index.php/GNOME http://portal.suse.pl/wiki/index.php/Metacity
    ale to pewnie już każdy zna :>

  24. lukas 17 czerwca 2007 o godz. 12:21 #

    ale to pewnie już każdy zna :>

    Nie zna! ;]. Dzięki Ci obi_gl za np.

    Rozmiar ikon na pulpicie

(wymagane)
URI
Uwaga! Niektóre komentarze, m.in. te dodane przez niezalogowanych i nowych użytkowników, są ręcznie moderowane. Jeśli Twój komentarz nie ukaże się od razu, nie dodawaj go ponownie, tylko cierpliwie poczekaj na akceptację.

Literówki najlepiej zgłaszać jabberem: michuk@jakilinux.org lub kocio@jabber.org!

W komentarzach możesz używać prostych znaczników HTML. Przykłady:
  • Link: <a href="jaklinux.org">Linux dla każdego</a>,
  • Wytłuszczenie: <strong>tekst pogrubiony</strong>,
  • Kursywa: <em>tekst pochylony</em>,
  • Przekreślenie: <del>tekst przekreślony</del>,
  • Kod: <code>printf("blok kodu");</code>,
  • Cytat: <blockquote>cytat</blockquote>
Uwaga: jeśli dodasz nieznany znacznik, będzie on niewidoczny, gdyż system filtruje takie znaczniki.