Postupně si ladím Conky pro svůj netbook a tak jsem narazil na problém, jak zobrazovat statistiku jen pro síťové zařízení, které je právě používáno. Conky sice nabízí proměnnou if_up (interface), tedy můžete podmínit zobrazení bloku kódu tím, že je konkrétní zařízení zapnuté, jenže v tomto případě není zajímavé, zda je zapnuté, ale zda je připojeno, nebo ještě lépe, zda je momentélně používáno jako výchozí pro přístup systému k síti. Jelikož se o připojení k síti stará v Ubuntu Network Manager (NM), začal jsem právě u něj. V Ubuntu 10.10 již NM konečně dostal i cli rozhraní pro správu připojení z příkazové řádky, tak jsem začal se studiem manuálu. ...
Příkaz
Příkaz
$ nm-tool
vypíše stav NM a dostupných sťových zařízení. Příkaz nemá žádné parametry a pro strojové zpracování je výpis nevhodný. Mocnějším nástrojem je příkaz nmcli, pro všechny jeho možnosti se podívejte do manuálu.
$ man nmcli
První nápad byl takový, že se poptám NM na aktivní síťové zařízení a to předám Conky. To vyžaduje přesunutí části conky kódu obsahující zobrazení síťové statistiky do externího skriptu, který Conky zavolá pomocí ${execp cesta/ke/skriptu}, skript se optá NM, upraví jméno zařízení v conky kódu a ten vrátí Conky, které si ho zpracuje. Z příkazu nmcli můžete dostat výpis přizpůsobený pro konkrétní potřeby strojového zpracování, k čemuž slouží přepínače -t a -f jímž můžete ovlivnit, které konkrétní sloupce do výpisu dostanete. Například jsem zjistil, že příkaz
$ nmcli con status
vypíše aktivní síťová zařízení a ze sloupce DEFAULT se dá vyčíst, které se zrovna používá pro přístup k síti. Pak tedy můžete výpis zjednodušit, aby obsahoval pouze relevantní informace
$ nmcli -t -f DEVICES,DEFAULT con status
Pokud budou například zapnuté zařízení eth0 a wlan0, může výpis vypadat takto
eth0:yes
wlan0:no
eth má standardně přednost a odpojí wlan. Chcete-li dostat pouze název aktivního zařízení, stačí výstup prohnat filtrem
$ nmcli -t -f DEVICES,DEFAULT con status | grep yes | cut -d : -f 1
Nojo, tohle je sice pěkné, ale použití nmcli je neskutečně náročné na výkon procesoru. Jen tento jediný dotaz zabere procesoru Atom N450 skoro sekundu a vytížení procesoru vylítne na deset procent. To je pro Conky nepoužitelné. Můžete to pouštět v delších časových intervalech, ale to zas Conky na změnu připojení nebude reagovat hned a to není dokonalé řešení, které by se mi líbilo.
Proměnná if_up v Conky rozlišuje pouze to, zda je zařízení zapnuté, pokud třeba odpojíte od počítače síťový kabel, ztratíte připojení, ale if_up si toho nevšimne. Ze systému se dá naštěstí vyšťourat více a lepší zdroj se nachází v systémovém adresáři /sys/class/net/, kde jsou informace o stavu všech síťových zařízení v systému
$ ls /sys/class/net
Pokud víte, že používáte pouze zařízení eth0 a wlan0, stačí se podívat, zda jsou připojené k síti
$ cat /sys/class/net/eth0/operstate
$ cat /sys/class/net/wlan0/operstate
$ cat /sys/class/net/wlan0/operstate
Dostanete buď up, nebo down. (Ve zmíněném adresáři je i plno dalších informací, které by vás mohly zajímat). Conky má jednu chytrou proměnnou, která umožňuje testovat existenci konkrétního souboru a dokonce i tento soubor prohledat, zda se v něm nachází zadaný řetězec. Pak je to jednoduché, v Conky skriptu použijete konstrukci
${if_existing /sys/class/net/eth0/operstate up} <zde se nachází kód pro statistiku eth0> $endif
Zrovna tak vytvoříte blok pro wlan0 a Conky pak zobrazí jen statistiku aktivního zařízení.
I zde je ovšem nějaká ta vada na kráse. Pokud v NM nevypnete drátové připojení, ani nevytáhnete kabel, jen síť v menu odpojíte, tímto postupem to nezjistíte. Tedy zjistíte to třeba tak, že vám Conky místo IP adresy zobrazí No Address. To je ovšem spíše taková malinká muška, která mi náladu nezkazí, neboť při mém způsobu používání netbooku na toto ani nenarazím. Dále (alespoň v mém případě) má NM nastaveno jako výchozí připojení to kabelové a pokud jsem připojen k wifi síti a pak připojím kabel, NM přepne automaticky na kabelové připojení, což tato detekce nezjistí a zobrazí v Conky obě zařízení.
Zatím jsem se k dokonalosti nedostal, ale pokud na něco zajímavého přijdu, informace doplním.
Zatím jsem se k dokonalosti nedostal, ale pokud na něco zajímavého přijdu, informace doplním.
Nazdar,
OdpovědětVymazatjá jsem problematiku ohledně sítí vyřešil tak, že mám nastaveno zobrazení jak pro eth0, tak pro wlan. Jelikož na koleji jsem připíchnutej na drátu, ale doma nebo v učebnách na wifi, tak se mi to hodí a nevadí mi to.
Ale zajímalo by mne jak si zobrazit čas do vybití baterie NTB. Procentuální bar tam mám, ale co s časem?
Díky za odpověď.
Ahoj, na zbývající čas podle ACPI je $battery_time
OdpovědětVymazathttp://conky.sourceforge.net/variables.html