lm-sensors
Nástrojem, který vám zpřístupní výstupy čidel vašeho systému, je lm-sensors s knihovnou libsensors a nástroji sensors-detect a sensors. První nástroj (spuštěný s právy nejvyššího) proleze systém, najde všechny známé čipy a senzory sledující hardware, vypíše všechny moduly jádra, které vám je zpřístupní a nabídne jejich zápis do /etc/modules, aby se zaváděly při startu systému. Po zavedení patřičných modulů do jádra již nic z lm-sensors nepotřebujete k tomu, abyste mohli v Conky výstupy čidel zobrazovat, všechno dodá kernel.Součástí balíku lm-sensors je i služba (service), ale ve skutečnosti to není žádný démon, který by v systému běžel, její start jen spustí sensors s přepínačem -s, který projde konfigurační soubory /etc/sensors3.conf a /etc/sensors.d/* a zkontroluje syntaxi. Tyto konfigurační soubory jsou důležité především pro majitele senzorů, které "kecají", tedy udávají jiné hodnoty, než jsou reálné, protože je tu můžete pomocí klíčového slova set přepočítat na reálné. Plno těchto ukecaných čipů je podchyceno ve výchozím /etc/sensors3.conf a při spuštění příkazu sensors tak můžete dostat hodnoty patřičně zkorigované. Pokud váš ukecaný senzor korekci nedostal, můžete si přidat vlastní zápisem do souboru v /etc/sensors.d/. Současně máte možnost přepsat i popisky jednotlivých čidel pomocí klíčového slova label a výstup sensors si zpřehlednit.
Pokud si budete doplňovat konfiguraci sensors, bude se vám hodit syrový výstup, který odhalí které systémové soubory obsahují konkrétní hodnoty:
$ sensors -u
coretemp-isa-0000
Adapter: ISA adapter
Core 0:
temp2_input: 35.000
temp2_max: 80.000
temp2_crit: 100.000
temp2_crit_alarm: 0.000
Core 1:
temp3_input: 35.000
temp3_max: 80.000
temp3_crit: 100.000
temp3_crit_alarm: 0.000
it8718-isa-0290
Adapter: ISA adapter
in0:
in0_input: 1.072
in0_min: 0.000
in0_max: 4.080
in0_alarm: 0.000
in0_beep: 0.000
...
fan1:
fan1_input: 598.000
fan1_min: 10.000
fan1_alarm: 0.000
fan1_beep: 1.000
...
coretemp-isa-0000
Adapter: ISA adapter
Core 0:
temp2_input: 35.000
temp2_max: 80.000
temp2_crit: 100.000
temp2_crit_alarm: 0.000
Core 1:
temp3_input: 35.000
temp3_max: 80.000
temp3_crit: 100.000
temp3_crit_alarm: 0.000
it8718-isa-0290
Adapter: ISA adapter
in0:
in0_input: 1.072
in0_min: 0.000
in0_max: 4.080
in0_alarm: 0.000
in0_beep: 0.000
...
fan1:
fan1_input: 598.000
fan1_min: 10.000
fan1_alarm: 0.000
fan1_beep: 1.000
...
Srovnejte s:
$ sensors
coretemp-isa-0000
Adapter: ISA adapter
Core 0: +35.0°C (high = +80.0°C, crit = +100.0°C)
Core 1: +35.0°C (high = +80.0°C, crit = +100.0°C)
it8718-isa-0290
Adapter: ISA adapter
in0: +1.07 V (min = +0.00 V, max = +4.08 V)
...
fan1: 623 RPM (min = 10 RPM)
...
coretemp-isa-0000
Adapter: ISA adapter
Core 0: +35.0°C (high = +80.0°C, crit = +100.0°C)
Core 1: +35.0°C (high = +80.0°C, crit = +100.0°C)
it8718-isa-0290
Adapter: ISA adapter
in0: +1.07 V (min = +0.00 V, max = +4.08 V)
...
fan1: 623 RPM (min = 10 RPM)
...
Jinak doporučuju wiki Archu, tam jsou (nejen) lm-sensors podrobně:
https://wiki.archlinux.org/index.php/lm_sensors
Jak se dostat k původním datům z shellu
Conky i sensors data ze senzorů někde čtou a stejně tak je můžete číst i vy. Kernel to všechno dává k dispozici skrz virtuální souborový systém sysfs, konkrétně v adresáři /sys/devices/, kde má každé zařízení vlastní adresář, ale pro naše účely srozumitelnější strukturu naleznete v /sys/class/hwmon/, s podadresáři ve formátu hwmonX, kde X je pořadové číslo čipu, vracejícího určitou sadu hodnot. V mém systému s C2D na desce Gigabyte jsou k dispozici hwmon0, obsahující data z CPU (coretemp) a hwmon1 s daty ze základní desky (it8718). To pořadí, v jakém příkaz sensors vypisuje čipy, by mělo odpovídat číslování hwmon adresářů v systému. V hwmonX vás pak bude zajímat především adresář device, kde jsou již konkrétní data. Soubory s aktuálními hodnotami mají přívlastek input.
$ ls /sys/class/hwmon/hwmon0/device/
driver power temp2_input temp3_crit_alarm uevent
hwmon subsystem temp2_label temp3_input
modalias temp2_crit temp2_max temp3_label
name temp2_crit_alarm temp3_crit temp3_max
driver power temp2_input temp3_crit_alarm uevent
hwmon subsystem temp2_label temp3_input
modalias temp2_crit temp2_max temp3_label
name temp2_crit_alarm temp3_crit temp3_max
Najdete zde také jméno modulu (name), které se objevuje i ve výpisu sensors. Nejjednodušším způsobem, jak si ujasnit, které adresáře patří kterému modulu, je vypsat si je i s jejich jménem:
$ grep -H "" /sys/class/hwmon/hwmon*/device/name
/sys/class/hwmon/hwmon0/device/name:coretemp
/sys/class/hwmon/hwmon1/device/name:it8718
/sys/class/hwmon/hwmon0/device/name:coretemp
/sys/class/hwmon/hwmon1/device/name:it8718
Teplotu prvního jádra CPU si tedy přečtu takto:
$ cat /sys/class/hwmon/hwmon0/device/temp2_input
35000
35000
Některé senzory mají i popisky, takže si můžete zkontrolovat, co to opravdu je:
$ cat /sys/class/hwmon/hwmon0/device/temp2_label
Core 0
Core 0
Druhé jádro mám v temp3. Každopádně jste si jistě všimli, že výstup je v tisícinách °C, takže bude třeba výstup trochu upravit. Rozlišení je stejně jen 1°C, takže to stačí oříznout:
$ cat /sys/class/hwmon/hwmon0/device/temp2_input | sed 's/000$//'
35
35
Když potřebuju zjistit pouze otáčky ventilátoru na CPU, což je fan1 na mé desce, nebudu zbytečně parsovat výstup sensors, jak jsem to dělal do včerejška, ale sáhnu si pro konkrétní hodnotu přímo:
$ cat /sys/class/hwmon/hwmon1/device/fan1_input
625
625
Senzory napětí (obecně značené jako in) zase dávají výstup v milivoltech a pokud to chci ve voltech na dvě desetinná místa, jako to zobrazuje sensors, musím přidat trochu počítání, když to chci zaokrouhlit. Tak pro zajímavost:
#!/bin/bash
p=2 # požadovaný počet desetinných míst
v=$(echo $(cat /sys/class/hwmon/hwmon1/device/in1_input)/1000 | bc -l)
echo "scale=$p;(((10^$p)*($v))+0.5)/(10^$p)" | bc -l
p=2 # požadovaný počet desetinných míst
v=$(echo $(cat /sys/class/hwmon/hwmon1/device/in1_input)/1000 | bc -l)
echo "scale=$p;(((10^$p)*($v))+0.5)/(10^$p)" | bc -l
Conky
Výše popsané vám pomůže pochopit, co napsat do proměnné hwmon v conkyrc. Například chci-li zobrazit teplotu prvního jádra CPU, zapíšu to v conkyrc takto (schválně dám hned pod to cestu v sysfs, na které ta hodnota je):
${hwmon 0 temp 2}
/sys/class/hwmon/hwmon0/device/temp2_inputPro otáčky ventilátoru 1, v mém případě na CPU:
${hwmon 1 fan 1}
/sys/class/hwmon/hwmon1/device/fan1_inputA tak dále. Protože Conky čte hodnoty přímo ze systému, nepoužívá sensors, které mají v konfiguraci plno anomálií podchyceno, musíte si do příkazu zapsat i případné korekce, pokud vám čidlo šmajdá. Vypadá to zhruba takto:
${hwmon 0 temp 2 1.6 10.0}
Pak Conky výstup ze senzoru vynásobí 1.6 a připočte 10. Čísla musí být desetinná, proto 10.0 a ne jen 10.
Pěkný povídání! Zrovna jsem se chtěl do monitorování pustit, jen jsem byl zatraceně shnilej to zprovoznit, ale tohle je návod naservírovanej na stříbrným podnose. Ještě by mě zajímalo, jak zjišťuješ počet updatů systému a ke štěstí mi už nic nechybí ;)
OdpovědětVymazatPro ty aktualizace zatím takto:
Vymazataptitude search ~U | wc -l
apt je na prd v tomto směru
S conky jsem začal před týdnem používám tvoje .conkyrc , která upravuji
OdpovědětVymazatTeploty jsem včera řešil takto ${exec sensors | grep 'Core 1' | awk '{print $3}'}
Pěkný článek - večer vyzkouším. Děkuji - Mirek13 -Xubuntu 13.10.
Vyzkoušej. A když budeš příště dolovat a hodí se awk, tak se můžeš jedné roury se subshellem zbavit:
Vymazatsensors | awk '/Core 1/{print $3}'
I když ještě musím dodat, že při prohledávání velkého množství textu je grep rychlejší, takže pak může být výhodnější to, cos použil :)
Vymazat