Internet Info, s.r.o. Lupa Měšec Podnikatel Root Zdroják DigiZone Slunečnice Vitalia TopDrive KupDnes Navrcholu NovýTarif Dobrý web Weblogy Woko Jagg Computer.cz SK: MojeLinky

Hlavní navigace

GConf: konfigurace GNOME pod kontrolou

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.

Tweetni to Twitter Jaggni to! Jagg Del.icio.us Delicious

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.

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í:

Michal Burda

Michal Burda

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.

Školení: GIT správce zdrojových kódů

 

Seznamte se s možnosti systému správy verzí zdrojových kódů GIT, který používají i vývojáři linuxového jádra.

  • Proč správa verzí
  • Architektura GITu
  • GIT v praxi
  • a další

Podrobnější informace o školení a přihláška

Ohodnoťte jako ve škole:
Průměrná známka 2,57

Přehled názorů

OT: filozofie linuxu je nemyslet za uzivatele?
Eduard DRUSA 24. 2. 2010 08:08
Nový
├ 
Re: OT: filozofie linuxu je nemyslet za uzivatele?
jaromrax 24. 2. 2010 09:58
Nový
├ 
Re: OT: filozofie linuxu je nemyslet za uzivatele?
Lol Phirae 24. 2. 2010 10:44
Nový
│
├ 
Re: OT: filozofie linuxu je nemyslet za uzivatele?
Lol Phirae 24. 2. 2010 10:52
Nový
│
│
└ 
Re: OT: filozofie linuxu je nemyslet za uzivatele?
Petr Krčmář 24. 2. 2010 11:09
Nový
│
│
 
└ 
Re: OT: filozofie linuxu je nemyslet za uzivatele?
Lol Phirae 24. 2. 2010 11:18
Nový
│
│
 
 
└ 
Re: OT: filozofie linuxu je nemyslet za uzivatele?
Lol Phirae 24. 2. 2010 11:18
Nový
│
│
 
 
 
└ 
Re: OT: filozofie linuxu je nemyslet za uzivatele?
Petr Krčmář 24. 2. 2010 20:05
Nový
│
│
 
 
 
 
└ 
Re: OT: filozofie linuxu je nemyslet za uzivatele?
Lol Phirae 24. 2. 2010 22:31
Nový
│
│
 
 
 
 
 
└ 
Re: OT: filozofie linuxu je nemyslet za uzivatele?
Petr Krčmář 25. 2. 2010 10:01
Nový
│
│
 
 
 
 
 
 
└ 
Re: OT: filozofie linuxu je nemyslet za uzivatele?
Lol Phirae 25. 2. 2010 19:52
Nový
│
└ 
Re: OT: filozofie linuxu je nemyslet za uzivatele?
karpi 19. 3. 2010 21:12
Nový
└ 
Re: OT: filozofie linuxu je nemyslet za uzivatele?
ahl 24. 2. 2010 11:45
Nový
 
├ 
Re: OT: filozofie linuxu je nemyslet za uzivatele?
Lol Phirae 24. 2. 2010 11:54
Nový
 
└ 
Re: OT: filozofie linuxu je nemyslet za uzivatele?
Eduard DRUSA 24. 2. 2010 12:22
Nový
mmmm
Laco 24. 2. 2010 12:05
Nový
├ 
Re: mmmm
Tomáš Bžatek 24. 2. 2010 14:29
Nový
└ 
Re: mmmm
Testovátko 24. 2. 2010 14:31
Nový
GSettings
Tomáš Bžatek 24. 2. 2010 14:34
Nový
└ 
Re: GSettings
HKou 24. 2. 2010 22:44
Nový
 
├ 
Re: GSettings
m. 25. 2. 2010 11:30
Nový
 
├ 
Re: GSettings
Petr Krčmář 25. 2. 2010 11:46
Nový
 
│
└ 
Re: GSettings
HKou 25. 2. 2010 12:52
Nový
 
│
 
└ 
Re: GSettings
jaromrax 25. 2. 2010 14:41
Nový
 
│
 
 
└ 
Re: GSettings
Petr Mejzlík 25. 2. 2010 16:00
Nový
 
│
 
 
 
└ 
Re: GSettings
m. 25. 2. 2010 17:01
Nový
 
│
 
 
 
 
└ 
Re: GSettings
Petr Mejzlík 25. 2. 2010 17:30
Nový
 
│
 
 
 
 
 
└ 
Re: GSettings
Lol Phirae 25. 2. 2010 19:54
Nový
 
│
 
 
 
 
 
 
└ 
Re: GSettings
Tomáš Bžatek 26. 2. 2010 14:21
Nový
 
│
 
 
 
 
 
 
 
└ 
Re: GSettings
Lol Phirae 26. 2. 2010 16:28
Nový
 
│
 
 
 
 
 
 
 
 
└ 
Re: GSettings
Tomáš Bžatek 26. 2. 2010 16:43
Nový
 
│
 
 
 
 
 
 
 
 
 
└ 
Re: GSettings
Lol Phirae 26. 2. 2010 17:27
Nový
 
│
 
 
 
 
 
 
 
 
 
 
└ 
Re: GSettings
Petr Mejzlík 26. 2. 2010 20:35
Nový
 
│
 
 
 
 
 
 
 
 
 
 
 
└ 
Re: GSettings
HKou 26. 2. 2010 22:40
Nový
 
│
 
 
 
 
 
 
 
 
 
 
 
 
└ 
Re: GSettings
Petr Mejzlík 26. 2. 2010 22:56
Nový
 
│
 
 
 
 
 
 
 
 
 
 
 
 
 
└ 
Re: GSettings
Lol Phirae 27. 2. 2010 00:28
Nový
 
│
 
 
 
 
 
 
 
 
 
 
 
 
 
 
└ 
Re: GSettings
Petr Mejzlík 27. 2. 2010 12:29
Nový
 
│
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
├ 
Re: GSettings
m. 27. 2. 2010 13:33
Nový
 
│
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
├ 
Re: GSettings
Lol Phirae 27. 2. 2010 17:11
Nový
 
│
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
└ 
Re: GSettings
Petr Mejzlík 27. 2. 2010 20:22
Nový
 
│
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
└ 
Re: GSettings
m. 28. 2. 2010 10:13
Nový
 
└ 
Re: GSettings
Tomáš Bžatek 26. 2. 2010 14:31
Nový
 
 
├ 
Re: GSettings
HKou 26. 2. 2010 18:09
Nový
 
 
└ 
Re: GSettings
lolek 28. 2. 2010 14:53
Nový
 
 
 
└ 
Re: GSettings
Lol Phirae 28. 2. 2010 18:37
Nový
Závislosti gconfu
petr_p 27. 2. 2010 18:20
Nový
       

Tento text je již více než dva měsíce starý. Chcete-li na něj reagovat v diskusi, pravděpodobně vám již nikdo neodpoví. Pro řešení aktuálních problémů doporučujeme využít naše diskusní fórum.

Zasílat nově přidané příspěvky e-mailem