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

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 !