Conky. Цветовая индикация температуры.
Conky удобен для мониторинга различных параметров системы. В том числе и для мониторинга температуры, например, процессора.
Сделать это несложно – нужно только добавить в переменную TEXT
вывод температуры при помощи, например такой переменной: ${acpi_temp}
Или используя такую конструкцию:
${execi 10 ~/bin/conky/temp.sh}
Где ~/bin/conky/temp.sh скрипт, который вызывается каждые 10 секунд (можно и чаще, только зачем?) и содержащий что-то типа этого:
#!/bin/sh
sed "s/^.\{25\}//;s/ C//" /proc/acpi/thermal_zone/TZ1/temperature
Однако такой мониторинг не очень нагляден. Куда информативнее будет индикатор, меняющий цвет в зависимости от значения температуры! Скажем, если до 60 градусов – индикатор зеленого цвета, если до 70 – желтого, свыше 70 – красного.
У conky однопроходный парсер конфига, поэтому вариант написать такой скрипт, который будет выдавать цвет и значение температуры не пройдет.
Для этого придется в переменной TEXT
зарезервировать место под три цветовых состояния и написать скрипт, который бы выдавал температуру под конкретное состояние.
Т.е. в TEXT
добавляем следующее:
${color1}${execi 10 ~/bin/conky/temp.sh 1}${color2}${execi 10 ~/bin/conky/temp.sh 2}${color3}${execi 10 ~/bin/conky/temp.sh 3}${color}
Скрипт temp.sh теперь вызывается с параметром, который указывает для какого состояния выводить температуру. Состояний у нас три: 1 – до 60, 2 – до 70, 3 – свыше 70. Если текущая температура попадает в диапазон указанного состояния возвращается значение температуры, если не попадает возвращает пустую строку.
Сам скрипт выглядит примерно так:
#!/bin/sh
limit=$1
t1=`sed "s/^.\{25\}//;s/ C//" /proc/acpi/thermal_zone/TZ1/temperature`
if (( $t1 <= 59 )); then
if (( $limit == 1 )); then
echo $t1"В°C"
fi
elif (( $t1 <= 69 )); then
if (( $limit == 2 )); then
echo $t1"В°C"
fi
else
if (( $limit == 3 )); then
echo $t1"В°C"
fi
fi
В результате скрипт temp.sh будет вызываться каждые 10 секунд для каждого из трех цветов, а значение температуры будет возвращено только один раз.
Например для значения температуры 57 градусов в TEXT
будет такое:
${color1}57°C${color2}${color3}${color}
для значения температуры 64 градуса:
${color1}${color2}64°C${color3}${color}
для значения температуры 71 градуса:
${color1}${color2}${color3}71°C${color}
К сожалению, такой метод неприменим для раскрашивания индикатора батареи или индикатора свободного места.
(#) toll:
Большое спасибо за наглядный пример.Хотел выполнить цветную индикацию температуры GPU, однако стал получать ошибку temp.sh: 6: Syntax error: "(" unexpected (expecting "fi")
Вероятно я что-то не то намудрил со скиптом.
#!/bin/sh
limit=$1
t1=`nvidia-settings -q gpucoretemp |grep '):' | awk '{print $4}' | cut -b1-2`
if (( $t1 <= 59 )); then if (( $limit == 1 )); then echo $t1"В°C" fi elif (( $t1 <= 69 )); then if (( $limit == 2 )); then echo $t1"В°C" fi else if (( $limit == 3 )); then echo $t1"В°C" fi fi
Спасибо за помощь!
(#) dimka:
Разбейте последнюю строку на несколько строк блоками, вот так:if (( $t1 <= 59 )); then
if (( $limit == 1 )); then
echo $t1"В°C"
fi
elif (( $t1 <= 69 )); then
if (( $limit == 2 )); then
echo $t1"В°C"
fi
else
if (( $limit == 3 )); then
echo $t1"В°C"
fi
fi
И проверьте что присваивается переменной t1.