pátek 21. srpna 2009

Monitorování systému pomocí Conky

Co je to Conky a co umí si můžete přečíst třeba zde, nebo zde. Osobně oceňuji naprostou konfigurovatelnost, nízké systémové nároky a možnost jedním pohledem zkontrolovat stav a vytíženost celého systému. Conky je slušně vybaven pro spolupráci s externími skripty, takže jeho možnosti víceméně závisí na vašich schopnostech a fantazii. Na webu je toho spousta, pěkná sbírka nápadů je na ubuntu fóru. Některé z nich jsem upravil a použil, pár jsem si jich napsal sám, třeba se někomu budou hodit:

Detekce disku v CD/DVD mechanice
Dynamické zobrazování informací o výměnných discích
Automatický restart Conky po pádu


Klikněte na obrázek pro zobrazení použitých objektů.







Detekce disku v CD/DVD mechanice
Celkem dlouho mi trvalo než jsem našel způsob, jak zjistit z command lajny obsah šuplíku mé optické mechaniky a nakonec jsem našel starý, leč funkční a vyhovující program CDCTL, který umí, mimo jiné, zjistit, co konkrétně se v mechanice nachází, či nenachází. Program je potřeba ručně zkompilovat, ale při překladu mi hlásil chybu. Zakomentoval jsem tedy problematický řádek, na který se kompilátor odvolával a pak již překlad proběhl bez komplikací. Pokud ví někdo o jednodušší metodě, jak zjistit obsah mechaniky, budu rád za tip, nepochybuji, že jsem jen zatím nenašel. CDCTL mi tedy zjistí typ disku a pokud je to disk datový, přečtu název disku příkazem isoinfo.
  
cdrom-detect.sh
#!/bin/bash

a=`cdctl -g`
case $a in
*audio* ) echo "Audio CD"; exit ;;
*mixed* ) echo "mixed-mode disc"; exit ;;
*"no disc"* ) echo "no disc"; exit ;;
*"no info"* ) echo "blank disk?"; exit ;;
esac
isoinfo -d -i /dev/cdrom | awk -F": " '/Volume id/{print $2}'

Dynamické zobrazování informací o výměnných discích
Dynamické zobrazování připojených disků řeším pomocí výpisu obsahu složky /media, kam Ubuntu připojuje disky a vytváří přístupové body s jejich jmény. Ze seznamu odstraním trvale připojené disky a optickou mechaniku, které monitoruji z Conky přímo. Pro větší univerzálnost kódu bych takto mohl vypsat všechny disky, ale takhle mám trvale připojené disky seřazené podle sebe a libovolně pojmenované, protože skript jako jméno monitorovaného diskového oddílu použije jméno přípojného bodu ve složce /media a disky z fstab by se v mém případě nepřehledně jmenovaly sda1, sda2,.. (ano, šlo by to změnit) a výměnné disky si barevně odliším pro větší přehlednost. Pro nedostatek místa ještě zkrátím delší názvy, aby se vešly k ostatním parametrům. Výstup skriptu obsahuje i formátovací značky, které Conky při volání scriptu pomocí execp, nebo execpi provede. Tedy v Conky budeme skript volat třeba tímto ${execpi 2 ~/.conky/removable-drives.sh}. Připojené disky jsou řazeny abecedně. 
Ještě bych mohl zmínit, že při připojení disku se Conky vertikálně roztáhne a má tendenci se posunout celé. Já jsem chtěl, aby byl spodní konec pevný a okno expandovalo směrem nahoru, čehož jsem dosáhl nastavením parametru alignment na middle_right (nebo middle_left)  a přesnou pozici doladil parametrem gap_y.
  
removable-drives.sh
#!/bin/bash

list=`ls -1 /media/|sed -e 's/cdrom0//' -e 's/cdrom//' -e 's/sda1//' -e 's/sda2//' -e 's/sda4//' -e 's/sdb1//'|sed '/^$/d'`
if [ "$list" ]; then {
  echo "$list" | while read line
     do name="${line:0:7}"
     echo '
${color 030}${fs_bar 14,309 /media/'$line'}${color}
 ${goto 12}${voffset -21}$font'$name'${goto 70}${fs_type /media/
'$line'}${goto 125}${fs_size /media/'$line'}${goto 190}${fs_free_perc /media/'$line'}%${goto 230}${fs_free /media/'$line'}${voffset 1}'
done }
  else {
    echo '${voffset -3}'
    exit
  }
fi
echo '${voffset -5}'


Vše, co je zelenou barvou je kód pro Conky, do kterého pouze vkládáme v proměnné $line označení příslušného disku. Tedy toto formátování si každý musí přepsat, aby mu vyhovovalo pro jeho účely. Zrovna tak na začátku skriptu si každý definuje pouze disky, které chce z automatiky vyřadit.


Automatický restart Conky po pádu
Pády se dějí především při intenzivnějším připojování a odpojování disků, což samzřejmě souvisí s použitím mého předešlého skriptu. Nevím, co přesně to způsobuje, ale Conky se vymlouvá na to, že používám příliš mnoho fontů. V běžném provozu se to děje jen výjimečně a pokud už se to stane, script spustí Conky okamžitě znovu, takže přijdete jen o předchozí průběhy grafů. Následující skript funguje pro start i ukončení, tedy pokud zjistí, že Conky už běží, naopak je ukončí. Zde je nutno podotknout, že skript počítá jen s jednou instancí Conky.

conky-launcher.sh
#!/bin/bash

  if [
`pidof conky` ] ; then
  killall conky
  killall conky_launcher.sh
  exit
fi
 while [ true ]
  do
    if [ !
`pidof conky` ] ; then sleep 0.5
      conky
    fi
  echo Restarting Conky....
 done

Další skripty, které používám, kliknutím stáhnete:

Kontrola novývh zpráv na Gmail. Nutno si do skriptu dopsat jméno a heslo.
A vlastní .conkyrc. Je psaný na můj hardware, nebude bez úprav fungovat všude stejně. 

Užitečné odkazy:
http://conky.sourceforge.net/documentation.html 

6 komentářů:

  1. V úvodu článku máš screen conky, nemáš k němu i konfig. soubor?

    OdpovědětVymazat
  2. Všechno je v článku, na konci máš odkaz i na .conkyrc

    OdpovědětVymazat
  3. Ahoj...

    Moc hezky vymyšlené, a zpracované.
    Podstatnou část skriptů jsem po úpravě použil na svém domácím PC s Mandriva Linuxem a KDE.

    Dík... Jirka

    OdpovědětVymazat
  4. Ahoj a díky za komentář, jsem rád že se Ti to hodilo.

    OdpovědětVymazat
  5. Nazdar,
    prosim tě, co napsat pro ukázání těch info o GK, když mám ATI?

    Díky za odpověď.

    OdpovědětVymazat
  6. To bohužel neporadím, zatím jsem to neřešil.

    OdpovědětVymazat

Zkuste prosím při komentováni používat místo volby Anonymní volbu Název/adresa URL, kde vyplníte nějakou přezdívku, adresu zadávat nemusíte. Vědět, které příspěvky jsou od jednoho člověka, je fajn. Díky.

Pokud by se vám náhodou odeslaný komentář na stránce nezobrazil, vytáhnu ho z koše hned jak si toho všimnu. I Google spam filter se občas sekne.