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}

К сожалению, такой метод неприменим для раскрашивания индикатора батареи или индикатора свободного места.


Комментарии

  1. (#)   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

    Спасибо за помощь!

  2. (#)   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.

Оставить комментарий

Ответ на Conky. Цветовая индикация температуры.