Conky - системный монитор

Север

2008-04-02

Очень удобно следить за изменением параметров своей системы, не отрываясь от других решаемых в данный момент задач. Было бы здорово мельком взглянуть на удобную и информативную панельку - и сразу получить всю необходимую информацию о системе. Вот как раз для этих целей и были созданы системные мониторы. Об одном из них мы и поговорим здесь. Индикатор состояния системы: conky... Встречайте.

Установка, параметры по умолчанию, стили и необходимость настройки

По умолчанию, свеже установленный conky производит жуткое впечатление. Так что, берем в руки напильник и начинаем, подгонять программу под себя и свои представления о прекрасном и удобстве. Дело это кропотливое, но сделать достаточно один раз и сохранить конфигурационный файл.

Настройка conky производится через свой конфиг, который нужно скопировать из /usr/share/doc/conky/examples/ в свой домашний каталог и переименовать в .conkyrc Теперь открываем конфиг в любом текстовом редакторе и начинаем его изучать. Делится конфиг на две части: первая часть отвечает за внешний вид системного монитора, а вторая - что он, собственно, будет отображать. Деление не строгое, и открыв конфиг, легко понять, почему.

Настраиваем conky под себя

В первой части файл конфига содержит довольно понятные комментарии. Наиболее важные параметры приведу ниже. Но прежде, чем мы начнем запускать и пробовать, нужно кое-что учесть. Во-первых, процесс это занимательный и может отвлечь на долго (у меня это заняло вечер). Во-вторых, процесс это исключительно интерактивный: меняете настройку - завершаете текущий процесс conky - запускаете новый - смотрите - меняете настройку... и так далее. И лучше руководствоваться Первой Заповедью Радиотехники - "Не крути две ручки сразу". А то потом трудно искать ошибки в конфиге и соображать, что привело к отрицательным результатам.

Итак, первая часть параметров отвечает за внешний вид системного монитора. Здесь можно выбрать, в частности, шрифт и его параметры:

# Xft font when Xft is enabled
xftfont Bitstream Vera Sans Mono:size=9 

Время обновления, лучше ставить 1-2 секунды, хотя можно и меньше (но тогда возрастает потребление ресурсов):

# Update interval in seconds
update_interval 2.0 

Положение по углам экрана, что тоже хорошо прокомментировано:

# Text alignment, other possible values are commented
#alignment top_left
#alignment top_right
#alignment bottom_left
alignment bottom_right 
Ещё подробностей можно прочитать в официальном FAQ conky
 (http://conky.sourceforge.net/faq.html) 

В первой части все довольно просто - проблемы начинаются при настройке переменных, которые будут отображаться. Лучше всего за основу взять какой-нибудь образцовый конфиг, (http://conky.sourceforge.net/screenshots.html) и брать понравившиеся элементы. В этой замечательной статье (на русском!) (http://www.linuxcenter.ru/lib/articles/soft/conky_as_example.phtml) есть много интересных идей.

Короче говоря, вторая часть конфига должна выглядить примерно так:

${переменная параметры}
$элемент оформления
${color цветтекста}
${переменная параметры}
... Назначение переменных понятно из их названий:
  • exec выводит на экран текст, возвращаемый вызываемой программой;
  • execbar и execgraph визуализируют вывод исполняемой команды в виде диаграммы или графика (выводимое значение должно находиться в пределах 0..100);
  • execi и texeci запускают команду циклом с интервалом (texeci — с интервалом, заведомо большим времени исполнения). execibar и execigraph полностью аналогичны execbar и execgraph, но для циклического выполнения команд;
  • if_running, if_existing и if_mounted — выводят всё вплоть до endif, если выполняется процесс, существует файл и подключена точка монтирования, соответственно;
  • else — выводит событие, если ложны все вышестоящие выражения.

Надо сказать, что применение execi особенно для скриптов - дело довольно ресурсоемкое, и скрипты лучше отрабатывать с большим интервалом (раз в несколько секунд).

Ниже - несколько наиболее интересных решений для отображения данных в conky.

Показывать текущее время в формате часы:минуты:секунды

${time %k:%M:%S}

Отображение занимаемой приложениями памяти

$mem/$memmax
Вот тут зарыты грабли: значения отображаемой памяти были неприлично малы - это происходит от того, что не учитывается память, занятая кэшем.

Вывести три самых прожорливых до процессора приложения:

${color #ddaa00} ${top name 1} ${top pid 1} ${top cpu 1} ${top mem 1}
${color lightgrey} ${top name 2} ${top pid 2} ${top cpu 2} ${top mem 2}
${color lightgrey} ${top name 3} ${top pid 3} ${top cpu 3} ${top mem 3} 
Задачей посложнее является отображение ACPI-данных о процессоре или питании системы. В этом нам помогут следующие утилиты cat и cut. Вот как, например, вывести информацию о температуре на процессоре и включения троттлинга:
 ${color lightgrey}   Core:  $color ${execi  2  cat   proc/acpi/thermal_zone/THRM/temperature   cut  -c26-}  critical 115 C  - ${color lightgrey}   Throttling state:  $color ${execi   2  cat   proc/acpi/processor/CPU1/throttling  |  grep  active |  cut  -c26-}

Для удобства я подсветил цветом: красным - команды conky, серым - текст, который будет выведен, синим - системные команды, которые выдают необходимые значения, зелёным - пути до массива данных ACPI (у вас они будут, скорее всего, другими).