IceButeo
Z JKwiki
Verze z 22:09, 2. 7. 2007; zobrazit aktuální verzi
← Starší verze | Novější verze →
← Starší verze | Novější verze →
- „Buteo“ je latinsky káně. „Ice“ protože to je pro IceWM.
- Stránka programu: http://jk.myserver.cz/programy/icebuteo
Obsah |
Cíl
Extrémě nenáročný, lehce rozšiřitelný a modulární nástroj na monitorování systému pro libovolný desktop. Napsané v C za použití XLib.
Poznámka: gkrellm je příliš náročný.
Ovládání
- Veškeré ovládání spočívá v zaslílání signálů (např. pomocí killall). Icebuteo nijak nepřijímá žádný vstup od uživatele (a tedy ani nikdy nesebere fokus).
- Signál HUP: restart programu (a tedy i načtení konfigurace).
- Signál ALRM: Skrytí/zobrazení (toggle).
Příklad konfigurace Icewm
- soubor ~/.icewm/keys
- ovládání ve stylu quake konzole
# Alt + to nalevo od '1' = zobrazení/skrytí key "Alt+grave" killall -ALRM icebuteo # Shift + Alt + to nalevo od '1' = restart key "Shift+Alt+grave" killall -HUP icebuteo
Konfigurace
- uložena v adresáři ~/.icebuteo
- soubor s hlavním konfiguračním souborm je předávan programu jako jediný parametr
- ukázková konfigurace je v adresáři config/ v balíčku s programem.
main.conf
Základní volby týkající se základní části programu
# main.conf max-widgets = 128 max-columns = 32 max-variables = 10000 layout-file = "layout.conf" font-normal = "-adobe-helvetica-medium-r-*-*-12-*-*-*-*-*-iso8859-2" font-bold = "-adobe-helvetica-bold-r-*-*-12-*-*-*-*-*-iso8859-2" font-big = "-adobe-helvetica-bold-r-*-*-24-*-*-*-*-*-iso8859-2"
layout.conf
Rozmístění widgetů a uspořádání okna.
# sloupce # width height visibility default_visibility COLUMN 128 128 100 1 # hodiny v 1. sloupci # type col x y w h variable default_value TEXT_FONT 0 - - - - - 1 TEXT_SHADOW 0 - - - - - 2 TEXT_ALIGN 0 - - - - - 0.5 TEXT 0 64 38 - - 101 "00:00" TEXT_DEFAULT 0 - - - - - - TEXT_ALIGN 0 - - - - - 0.5 TEXT 0 64 58 - - 102 "datum" TEXT 0 64 110 - - 111 "wmcdclock" BAR 0 2 116 124 10 112 0.6
modules.conf
Seznam modulů, jejich offset id proměnných (pro hodiny výše by to bylo 100) a konfigurace.
# modules.conf # name base config file "clock" 100 "mod-wifi.conf" "system" 200 "mod-sys.conf" "eth" 300 "mod-eth0.conf" "eth" 300 "mod-eth1.conf" "wifi" 400 "mod-wifi.conf" "ping" 500 "mod-ping.conf"
Jádro
- Moduly poskytují hodnoty pro jednotlivé proměnné. Jádro tyto proměnné zpřístupní GUI, které je vykreslí na displej.
- Moduly jsou loadovány při startu (dlopen)
- Každý modul si může zaregistrovat callback. Obsluha musí být co nejrychlejší – všechny moduly sdílejí jedno vlákno.
- Každý modul má k dispozici API displeje:
Callbacky
- hlavní smyčka programu je postavena na použití selectu, vše běží v jednom vlákně
- data je pointer pro použití v modulu, modul může být použit v několika instancích a není tedy možné používat nekonstantní globální proměnné.
- podrobnosti v modulu clock
- int mod_get_timeout_ptr(int mod_id, const void **mod_data, long long **value, int **timeout_always)
- předá hlavní části programu pointery na proměnné s nastavením časovače
- int mod_get_fd_list_ptr(int mod_id, const void **mod_data, int ***list_begin)
- předá hlavní části programu pointer na seznam file descriptorů ke sledování
- int mod_initialize(int mod_id, const void **mod_data, int var_offset, const char *arg)
- spuštěno jednou po načtení modulu
- int mod_cleanup(int mod_id, const void **mod_data)
- spuštěno jednou před odstraněním modulu
- int mod_timeout(int mod_id, const void **mod_data)
- spuštěno za čas definovaný v proměnné, jejíž adresu vrátil mod_get_timeout_ptr
- pokud timeout_always == 1, je zavoláno i když okno programu není vidět
- pokud timeout_always == 0, je zavoláno jen pokud je okno viditelné a těsně po zobrazení okna.
- int mod_filedescriptor(int mod_id, const void **mod_data, int fd)
- spuštěno, když jsou na filedescriptoru dostupná data ke čtení
API displeje
/* set variables */ void var_set_as_int (VAR_REF vr, int value); void var_set_as_float (VAR_REF vr, float value); void var_set_as_string (VAR_REF vr, char* value); /* get values */ int var_get_type (VAR_REF vr); int var_get_as_int (VAR_REF vr); float var_get_as_float (VAR_REF vr); char *var_get_as_string (VAR_REF vr);
- Proměnné existují odjakživa, jejich množství je definováno v main.conf.
- Pokud je proměnná uložena jako jiný typ, než je čtena, dojde ke konverzi. Co bude výsledkem této konverze není zaručeno – záleží to na schopnostech funkcí atoi, atof a printf.
GUI
- Pevně umístěné popup okno s displejem. Nepřijímá žádné události od uživatele.
- Popup okno je schovatelné signálem SIGALRM, který zasílá windowmanager při stisku vhodné klávesy.
- Signálem SIGHUP se Icebuteo restartuje (včetně načtení konfigurace).
Typy displejů
- FRAME, VSEP, HSEP
- Dekorace: rámeček, vertikální a horizontální čára
- Hodnota: —
- TEXT
- Text. Font, zarovnání a stín je třeba nastavit předem.
- Hodnota: string
- TEXT_DEFAULT, TEXT_FONT, TEXT_ALIGN, TEXT_SHADOW
- Není zobrazen, jen přednastaví vlastnosti textu v budoucnu kresleného.
- Hodnota: integer
- BAR, VBAR
- Obyčejný progressbar zleva doprava, resp. zespodu nahoru.
- Hodnota: float 0.0 - 1.0
Layout
Sloupce (column)
- Okno je rozděleno na sloupce.
- Viditelnost každého sloupce může být ovládána nějakou číselnou proměnnou (0 – neviditelný, jinak viditelný).
Kreslicí primitiva (widgety)
- Pozice widgetu je uvedena relativně k počátku sloupce.
- Každé kreslicí primitivum, které přijímá nějaký parametr, může být napojeno na proměnnou poskytovanou libovolným modulem.
Téma
Zatím je jen o nastavení barev.
Moduly
Dokončené
- clock: Čas, odpočítávač kompatibilní s wmcdclock
- battery: Stav baterie (ACPI)
- skeleton: šablona pro psaní nových modulů (doporučuji ale použít modul clock)
Plánované
- thermal: Teploty systému (ACPI)
- wifi: Monitorování síly signálu a jiných parametrů wifi karty
- eth: Síťová rozhraní
- ping: Obdoba wmpiki
- load: Zatížení systému
- mem: Využití paměti
- piperead: Načítání a parsování libovolných hodnot z stdout jiného programu
- event: D-Bus monotor specifických událostí (nový mail, zpráva na IM,...)
ToDo
- Defaultní volby pro konfigurační soubory – nyní je třeba uvédst všechny volby.
- Rozdělit layout.conf na více menších souborů a použít pro něj společný parser jako pro ostatní conf soubory.
- Widget pro kreslení grafů.
- Wiget pro reparent jiných oken.
- BUG: respawn zlobí pokud neběží z konzole.
- BUG: pokud je spuštěn dříve než IceWM, je ve špatné vrstvě.
