IceButeo

Z JKwiki

Verze z 22:09, 2. 7. 2007; zobrazit aktuální verzi
← Starší verze | Novější verze →
Přejít na: navigace, hledání
„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ě.
kategorie