Hlavní navigace

GConf: konfigurace GNOME pod kontrolou

24. 2. 2010
Doba čtení: 5 minut

Sdílet

Na Linuxu jsem si vždy vážil jeho konfigurovatelnosti a přizpůsobitelnosti: všechno je soubor a všechno v souborech je text. Filozofií Unixu a tím i Linuxu je nemyslet za uživatele. A tak mě opravdu těší, že ani moderní grafické uživatelské rozhraní jako GNOME nezanevřela na příkazový řádek.

GConf je démon, knihovna a nástroj pro správu uživatelských preferencí. Ačkoliv autoři deklarují, že jeho použití je nezávislé, využívají jej především aplikace patřící do rodiny GNOME. Účelem GConf je poskytnout programům jednotné API pro správu uživatelských předvoleb. Preference se ukládají ve formátu jméno/hodnota do průhledné adresářové struktury a čitelných textových souborů ve formátu XML. Za normálních okolností naleznete repozitář uživatelských preferencí ve vašem domovském adresáři, v podadresáři .gconf.

Databáze uživatelských předvoleb, kterou GConf spravuje, je vlastně jakási hierarchická struktura klíčů a hodnot podobná souborovému systému. Klíč může představovat „adresář“, a tehdy obsahuje seznam dalších klíčů, nebo se chová jako „soubor“ a obsahuje hodnotu. Tak například cesta /desktop/gnome/background/picture_filename vede ke klíči, který uchovává název souboru s obrázkem na pozadí pracovní plochy.

Komu GConf připomíná registry z MS Windows, ten má pravdu. Klasické microsoftí registry ovšem trpěly (trpí?) několika vážnými neduhy. Registry obsahují spoustu nedokumentovaných hodnot a orientace v nich je příjemná asi jako listování čínským telefonním seznamem v sibiřských palčácích. Navíc neuvážený zásah do registrů Windows často končí katastrofou. Poměrně obtížné je také nastavovat defaultní hodnoty zároveň na velkém množství počítačů. GConf se snaží takovým problémům vyhnout.

Mezi zajímavé vlastnosti systému GConf patří zejména:

  • jednoduché API, které by se s postupem času nemělo příliš měnit,
  • čitelné prostředí, možnost přidávat komentáře k jednotlivým klíčům a řádně zdokumentovat každou uloženou hodnotu nastavení,
  • automatické ukládání užitečných meta-informací spolu s uživatelskými preferencemi (např. která aplikace daný klíč používá, kdy se naposledy měnila jeho hodnota a podobně),
  • zaměnitelný backend: v současnosti se používá především ukládání do XML souborů, architektura GConfu je ale otevřená i pro jiná úložiště jako např. LDAP nebo SQL databáze,
  • služba notifikace změn: všechny zainteresované aplikace jsou démonem ihned informovány, když v konfiguraci dojde k nějaké změně. To velmi usnadňuje programování s využitím komponent a zlepšuje uživatelův požitek z ovládání grafického rozhraní. Pokud je nějaká komponenta použita ve více programech, změna nastavení jedné se může okamžitě promítnout do všech ostatních. Zakážete-li například v nastavení GNOME zobrazování ikon v nástrojové liště, změna se ihned promítne do všech aplikací bez nutnosti je restartovat.
  • zamykání prostředků, takže nemohou nastat problémy se souběžným přístupem více programů ke stejným datům.

Správa konfigurací

GConf umožňuje definovat několik úložišť, které se prohlížejí při vyhledávání uživatelských preferencí. Pro GConf verze 2 jsou úložiště specifikována v souboru /etc/gconf/2/path. (Ano, hádáte správně, dvojka v cestě určuje verzi GConfu – tj. dočkáme-li se GConfu verze 3, změní se cesta pravděpodobně na /etc/gconf/3/path.) Úložiště mohou být sdílená všemi uživateli systému (jen pro čtení) nebo soukromá pro každého uživatele (čtení i zápis).

Standardním obsahem souboru /etc/gconf/2/path je:

xml:readonly:/etc/gconf/gconf.xml.mandatory
include "$(HOME)/.gconf.path"
xml:readwrite:$(HOME)/.gconf
xml:readonly:/etc/gconf/gconf.xml.defaults

Úložiště jsou procházena v pořadí této deklarace. Procházení končí v okamžiku, kdy je hledaný klíč nalezen. Pokud systém nalezne hledaný klíč hned v prvním úložišti, jež je deklarováno jen pro čtení ( readonly), uživatelé jeho hodnotu nemohou měnit. Úložiště /etc/gconf/gconf.xml.mandatory tedy může sloužit pro uchování hodnot nastavení, která mají být společná všem uživatelům – dá se tak zajistit stejný neměnný vzhled GUI např. v internetové kavárně. Úložiště /etc/gconf/gconf.xml.defaults, které je v seznamu až na konci, zase může obsahovat defaultní hodnoty, které se použijí v případě, že se nenalezne potřebný klíč v uživatelově osobním úložišti $(HOME)/.gconf.

Ovládání z příkazového řádku

Dobrá zpráva: uživatelská nastavení ve správě GConfu se dají měnit přímo z příkazového řádku. To přináší spoustu zajímavých možností, neboť chování svých oblíbených aplikací můžete modifikovat pomocí skriptů – díky službě notifikace změn popisované výše se aplikace o změně nastavení dozví okamžitě a ihned na ni také zareagují.

Práci s repozitáři uživatelských preferencí v příkazovém řádku obstarává utilita jménem  gconftool-2. Projděme si nyní její základní funkce.

gconftool-2 --all-dirs <cesta>

vypíše všechny „podadresáře“ klíče zadaného parametrem <cesta>. Zadáte-li například gconftool-2 --all-dirs /, vypíše se obsah kořenu repozitáře uživatelských nastavení:

/apps
/desktop
/system
/schemas

Příkaz:

gconftool-2 -a <cesta>

zobrazí všechny dvojice klíče/hodnoty na dané cestě. Například gconftool-2 -a /desktop/gnome/background vypíše všechny klíče týkající se aktuálního nastavení pozadí pracovní plochy:

picture_filename = /home/michal/Pictures/wallpapers/Thou_Shall_Not_Pass_by_alexiuss2.jpg
picture_options = stretched
color_shading_type = solid
primary_color = #b0b068684040
picture_opacity = 100
secondary_color = #b0b068684040
draw_background = true

Použijete-li místo -a parametr -R, vypíšou se rekurzivně klíče včetně všech podklíčů.

Chceme-li pouze zjistit hodnotu konkrétního klíče, použijeme příkaz

gconftool-2 -g <cesta>

Konkrétně volání gconftool-2 -g /apps/evolution/mail/accounts vypíše nastavení e-mailových účtů v Evolution.

Modifikace hodnot se provádí následujícím příkazem:

gconftool-2 --type <typ> --set <cesta> <hodnota>

Příkaz nastaví klíči specifikovanému <cestou> danou <hodnotu>. Parametr <typ> určuje datový typ modifikovaného klíče a musí to být něco z bool, float, int, list, pair nebo string. Kupříkladu

gconftool-2 --type string --set /apps/gnome-terminal/profiles/Default/background_type transparent

nastaví průhledné ( transparent) pozadí ve standardním profilu GNOME terminálu.

Nástroj gconftool-2 má spoustu dalších parametrů, ale nemá smysl je zde všechny rozebírat. Ostatně všechny podrobnosti jsou dobře popsány v manuálu GConfu.

Praktický příklad: změna SMTP serveru v poštovním klientu Evolution

Svého času jsem řešil jeden malý problém. Se svým notebookem často střídám sítě (domov/práce), přičemž každá síť vyžaduje jiné nastavení SMTP serveru v poštovním klientu Evolution. Zkoušel jsem různé možnosti, jak tuto nepříjemnost řešit, subjektivně nejlepším se ale nakonec ukázalo vyrobení jednoduchého BASH skriptu, který pomocí utility gconftool-2 modifikuje nastavení Evolution podle potřeby. Napojení skriptu například na nějakou ikonu v GUI je již triviální.

#!/bin/bash
SMTP=${1?'Prvním parametrem musí být doménové jméno SMTP serveru!'}

SETUP=`gconftool-2 --get /apps/evolution/mail/accounts | sed "s/\(<url>smtp:\/\/\)[^;]*/\1${SMTP}\//g"`
gconftool-2 --type=list --list-type=string --set /apps/evolution/mail/accounts "$SETUP"

První volání utility gconftool-2 přečte aktuální konfiguraci e-mailových účtů v Evolution a pomocí roury ( |) pošle výsledek sed, který v řetězci vyhledá a změní nastavení SMTP serveru. Výsledek uložený v proměnné SETUP se pak znovu zapíše do konfigurace Evolution.

UX DAy - tip 2

Závěr

GConf představuje způsob, jakým především GNOME aplikace uchovávají uživatelské preference a nastavení. Kromě služby aplikacím je občas potřebný i administrátorům a samotným uživatelům, pokud někdy chtějí měnit nastavení programů „ručně“ nebo pomocí vlastních skriptů, což lze velmi snadno pomocí příkazu gconftool-2. Myslím, že alespoň základní povědomí o tomto nástroji každému dnešnímu linuxákovi velmi prospěje.

Další čtení:

Byl pro vás článek přínosný?

Autor článku

Michal Burda vystudoval informatiku a aplikovanou matematiku a nyní pracuje na Ostravské univerzitě jako odborný asistent. Zajímá se o data mining, Javu a Linux.