blog.garaż.net

08 maj 2006

Conky i sensory

Conky to program monitorujący na bieżąco wybrane parametry maszyny, na której został uruchomiony. Domyślnie, dosłownie rezyduje w tle, wyświetlając informacje o stopniu wykorzystania procesora, wolnej przestrzeni na dysku, procesach. Przy tym w porównaniu np. do gdesklets jest szalenie lekki i nie przejawia typowych dla innych aplikacji monitorujących dużych zachcianek na czas procesora.

![Free Image Hosting at www.ImageShack.us](http://img176.imageshack.us/img176 /3088/conky3iy.png)

Pierwszy sposób

Teraz coś dla ludzi, którzy nie do końca rozumieją jak zmusić do wyświetlania informacji pobieranych z czujników rozmieszczonych na płycie głównej. Conky posiada zmienną i2c, która wymaga kilku parametrów, pierwszy określony jako dev, odpowiedzialny za wskazanie urządzenia, z którego mają być odczytywane informacje, drugi type określa rodzaj czujnika i w końcu ostatni określa numer czujnika. Jeśli chcemy dowiedzieć się jak nazywa się urządzenie, z którego należy odczytać informacje, musimy zajrzeć po prostu do katalogu /sys/bus/i2c/devices/ Jeśli chcesz zrobić to szybko, otwórz po prostu konsolę i wpisz:

# cd /sys/bus/i2c/devices/
# ls

Dla dobrze skonfigurowanego lm_sensors, dla mojej płyty (K7VZA v.2) jest to: 9191-6000 Właśnie to musimy wpisać w pole dev.

Drobna uwaga. Ten sposób działa prawdopodobnie tylko z jądrami z serii 2.6 (tak przynajmniej mówi oficjalna dokumentacja Conky, możliw jest jednak skorzystanie z pewnego obejścia poprzez wykorzystanie np. tail i wyłuskania informacji z dowolnego pliku - ten sposób opiszę później).

A oto przykładowy kod Conky, którego ja używam, skorzystaj z niego jeśli nie wiesz jak samemu zapisać odpowiednie wartości, pamiętaj tylko o podmianie słów zmień_mnie na odpowiednią nazwę urządzenia. Całość możesz po prostu wkleić za słówkiem kluczowym TEXT w pliku konfiguracyjnym Conkiego.

${color lightgrey}Temp: ${color lightgrey}CPU:${color #cc2222} ${i2c zmień_mnie temp 1}${color lightgrey}, SYS:${color #cc2222} ${i2c zmień_mnie temp 2}${color lightgrey}, SBr:${color #cc2222} ${i2c zmień_mnie temp 3}
${color lightgrey}Fan:  ${color lightgrey}CPU:${color #cc2222} ${i2c zmień_mnie fan 1}${color lightgrey}, P/S:${color #cc2222} ${i2c zmień_mnie fan 2}

Uwaga odnośnie nowych kerneli

Od wersji 2.6.22 zmienił się sposób przechowywania informacji i struktura pseudo systemu plików dla urządzeń i2c (w tym także dla monitorów sprzętu). Od teraz informacji o temperaturze należy szukać w katalogu /sys/class/hwmon, co wymusiło także poprawki w samym Conkim. Nowa wersja 1.2.7 Conkiego wprowadza obsługę dodatkowych zmiennych platform oraz hwmon. Aby szybko przystosować nasz plik wystarczy sprawdzić poleceniem ls /sys/class/hwmon numer urządzenia (jeśli dostaniemy hwmon0 to numerem jest właśnie 0) i zamienić zmienne i2c na hwmon oraz wspomniane liczby urządzeń, aby wyglądało to mniej więcej tak:

Temp: CPU: ${hwmon zmień_mnie temp 1}, SYS: ${hwmon zmień_mnie temp 2}, SBr: ${hwmon zmień_mnie temp 3}
Fan:  CPU: ${hwmon zmień_mnie fan 1}, P/S: ${hwmon zmień_mnie fan 2}

Drugi sposób

Drugi sposób - jeśli sensory działają, ale Conky nie potrafi ich obsłużyć

Aby uzyskać informacje, wykorzystamy metodę exec, która wykonuje polecenie i wyświetla jego stadardowe wyjście oraz kilka podstawowych poleceń operujących na tekstach. Jeśli posiadasz w systemie poprawnie skonfigurowane lm_sensors, komenda sensors powinna dać na wyjściu coś w tym stylu:

# sensors
via686a-isa-6000
Adapter: ISA adapter
CPU core:  +1.63 V  (min =  +0.06 V, max =  +3.10 V)
+2.5V:     +3.10 V  (min =  +2.37 V, max =  +2.62 V)   ALARM
I/O:       +3.34 V  (min =  +3.13 V, max =  +3.47 V)
+5V:       +5.08 V  (min =  +4.51 V, max =  +5.50 V)
+12V:     +12.06 V  (min = +10.81 V, max = +13.20 V)
CPU Fan:  4560 RPM  (min =  998 RPM, div = 8 )
P/S Fan:     0 RPM  (min = 84375 RPM, div = 8 )
SYS Temp:  +33.4°C  (high =   +50°C, hyst =   +55°C)
CPU Temp:  +33.1°C  (high =   +50°C, hyst =   +55°C)
SBr Temp:  +22.4°C  (high =   +45°C, hyst =   +50°C)
#

Jak łatwo zauważyć są tu interesujące nas informacje, w postaci tekstu, który Conky jak najbardziej umie wyświetlić, teraz sęk w tym aby pozbyć się nadmiaru śmieci. :) Oczywiście nic nie stoi na przeszkodzie aby wyświetlić całość tego wyjścia jeśli masz taką ochotę, wystarczy wpisać w miejscu za znacznikiem TEXT w pliku ~/.conkyrc, np. coś takiego: ${exec sensors}. Dzięki temu Conky wyświetli całe wyjście tego polecenia. Jeśli jednak chcemy wyłuskać tylko część informacji warto skorzystać z kilu filtrów. Grep wyłuska dla nas linie zawierające odpowiednie informacje, a cut przepuści tylko pola, które mu wskarzemy. Jeśli mamy ochotę oglądać tylko i wyłącznie temperature procesora, płyty głównej oraz zasilacza zapiszmy to w ten sposób:

${exec sensors | grep 'SYS Temp\|CPU Temp\|SBr Temp' | cut -c 1-19}

Zapis parametrów grepa oznacza linie zawierające ciągi znaków SYS Temp lub CPU Temp lub SBr Temp (znak potoku w wyrażeniach, które tu tworzymy oznacza alternatywe, i aby nie był interpretowany przez powłokę koniecznie musimy go poprzedzić backslashem stąd zapis |). Parametr cut mówi, które znaki mają być wycięte z tego co przekaże nam grep (wyciynamy pierwsze 19 liter co odpowiada wycięciu na przykład takiego fragmentu: CPU Temp: +33.1°C).

Jeśli chcesz sprawdzić co zostanie wyświetlone za pomocą takiego wyrażenia możesz po prostu wykonać ją w konsoli, wpisując po prostu: # sensors | grep 'SYS Temp\|CPU Temp\|SBr Temp' | cut -c 1-19

Miłej zabawy. :)

Komentarze

  • Quirel (2008-08-06 00:26:06):

    Dzięki temu artowi udało mi się uruchomić temperatury w Conky :)
    A wszystko przez te nowe jąderko :P

Comments !