LM 16 Cinnamon: Conky. Часть 1. Подготовительные работы

/ Просмотров: 15778

Conky, или в народе "коньки", представляет собой мощный и разнообразно настраиваемый системный монитор, берущий начало от torsmo.

Я не имею своей целью излагать тут теорию и даже большинство практических нюансов настройки и отладки conky, а просто приведу свои настройки и свой результат, отсылая всех интересующихся более подробными сведениями к Гуглу и по ссылкам, которые буду приводить по ходу дела.

Я настраивал свои "коньки" в течение, наверное, 2 – 3 месяцев (не помню уже точно), а "подстраиваю" их периодически до сих пор. Однако не пугайтесь, это связано не столько со сложностью настроек (conky можно запустить сразу после установки, хотя вряд ли кого-то устроит его дефолтный вид), сколько с тюнингом "под себя" и под своё железо.

Меня в конечном счете устоил такой вариант, который и кочует теперь от Ubuntu к Arch'у и по всем LinuxMint, включая "Росинки" 9, 11 и 13 alpha, вот уже года три, а то и больше.

Conky_LM16

Установка необходимого

Сами "коньки" могут быть установлены из репозитория разными пакетами: conky-cli, conky-std и conky-all. Разумно сразу выбрать последний пакет, чтобы не морочиться в том случае, если со временем захочется расширить функциональность.

Однако кроме этого надо установить и настроить еще много чего...

Необходимые пакеты

Список пакетов, которые потребуются, ниже. Некоторые потребуют предварительной настройки, об этом — еще ниже.

lm-sensors
sensord
libsensors4
hddtemp
smartmontools
lsscsi
lynx (лучше lynx-cur)

Настройка lm-sensors

lm-sensors находит датчики (температуры, вращения кулеров, напряжения), соответствующий драйвер для их опроса и обеспечивает вывод показаний в stdout.

Note:   кто желает как следует погрузиться в изучение теории lm-sensors, может сделать это легко: одних манов, связанных с ним, насчитывается шесть штук: man sensors, man sensors-conf-convert, man 5 sensors.conf, man 8 isadump, man 8 isaset, man 8 sensors-detect (правда, информация в них частично дублируется). Это, понятно, не считая массы разных материалов, которые нетрудно найти в интернете.
Однако на практикке настройка не так уж и сложна.

Запускаем в терминале

sudo sensors-detect

и отвечаем на все вопросы положительно, т.е. печатая y или просто нажимая Enter там, где подсказка выглядит как YES/no.

Этот процесс займет какое-то время. В конце, если программа нашла датчики, должна появиться такая примерно запись:

#----cut here----
# Chip drivers
w83627ehf
#----cut here----

после чего последует еще один, последний вопрос (о сохранении найденной конфигурации), на который также отвечаем y.

Затем загружаем модуль (или модули), который нашла утилита:

sudo modprobe w83627ehf
Note:   после этого следует перезагрузиться.

Теперь команда

sensors

должна вывести данные датчиков, которые (после того как мы разберёмся где что) пригодны для парсинга простенькими скриптами и вывода в окне conky. Для примера под спойлером мой вывод команды sensors.

Вывод sensors

Настройка hddtemp

hddtemp предназначен для мониторинга температуры жестких дисков.

В LM 16 этот пакет идет "из коробки", поэтому сразу приступаем к его настройке. В других системах его надо установить из реп, при этом может быть задан вопрос, запускать ли его как демона; следует ответить утвердительно.

Главная проблема с hddtemp состоит в том, что его запуск разрешён только от root'a, и обычным путём его данные в Conky вывести не получается. Есть, условно говоря, два метода решения этой проблемы (метод симлинка и метод правки ручками конфига hddtemp), которые я объединил в один — по принципу "кашу маслом не испортишь" smile

Открываем файл /etc/default/hddtemp

Находим такое:

# List of devices you want to use with hddtemp. If none specified,
# hddtemp will probe standard devices.
# DISKS="/dev/hda"

Исправим и раскомментируем последнюю строку следующим образом:

# List of devices you want to use with hddtemp. If none specified,
# hddtemp will probe standard devices.

DISKS="/dev/sd[a-d]"
Note:   [a-d] – потому что у меня четыре диска. Если загружаться с воткнутой по забывчивости флешкой, то... не знаю. Udev – та еще зараза. Может быть, предусмотрительнее записать [a-e]

Теперь найдем строку

RUN_DAEMON="false"

и исправим на

RUN_DAEMON="true"

Далее избавляем hddtemp от излишнего самомнения двумя следующими командами (это предложено юзером valet2valet на гентушном форуме):

sudo ln -s /usr/sbin/hddtemp /usr/bin/hddtemp

и

sudo chmod a+s /usr/bin/hddtemp

После этого команда от простого юзера

hddtemp /dev/sda

должна безропотно выводить результат, к примеру так:

/dev/sda: SAMSUNG HD501LJ: 25°C

Скрипты. Подготовка данных к выводу в Conky.

Прежде чем приступать к оформлению главного файла conky — ~/.conkyrc, который и формирует всю картинку на мониторе, надо разобраться, как выводить туда данные с нашего железа и от ПО.

Совет:   создайте в своем /home директорию ~/.conky, где можно будет хранить необходимые для работы conky скрипты, бэкапы файла ~/.conkyrc и даже справочные файлы. Так легче, во-1-х, не забыть где что лежит, а во-2-х, бэкапировать всё это богатство одним махом.

Вывод температур процессора, материнки и видеокарты.

Главное в этом деле – разобраться, какая температура из вывода команды sensors чему соответствует. Тут нам помогут только три вещи (то есть я не знаю других): информация из BIOS, утилита inxi и, выражаясь наукообразно, логические структуры нашего мышления, а по-простонародному – репа.

То, что мне удалось установить в результате, под спойлером:

Вывод sensors с разбором

Остаётся подготовить эти результаты к выводу в Conky. Для этого сочиним маленькие простенькие скрипты, поместим их в директорию ~/.conky, присвоим им права на исполнение командой:

chmod +x имя_скрипта

и протестируем их прямо на месте, запуская их обычным образом:

./имя_скрипта

 

1. Скрипт для вывода температуры процессора (будем выводить температуру одного ядра), назовём его cputemp.sh

#!/bin/bash sensors | awk '/temp3/{ print $2 }'

 

2. Скрипт для вывода температуры видеокарты назовём video.sh

#!/bin/bash sensors | sed -n '3p' | awk '{ print $2 }'

 

3. Скрипт для вывода температуры матплаты назовём systemp.sh

#!/bin/bash sensors | grep -A 1 'fan5' | awk '/temp1/{ print $2 }'

 

Note:   скрипты можно написать и по-другому, например, video.sh так:

#!/bin/bash sensors | grep -A 2 'radeon-pci-0100' | awk '/temp1/{ print $2 }'

Всё зависит от ваших предпочтений и знаний shell.

Что касается вывода температуры жестких дисков, то никаких скриптов не нужно. Теперь, когда мы сладили с этой утилитой, ее данные можно выводить непосредственно в Conky, как это будет показано в описании ~/.conkyrc

Скрипт для вывода своего IP

Скрипт myip.sh для определения своего IP-адреса имеет смысл сделать в том случае, если вы находитесь, например, за маршрутизатором и простыми средствами типа команды ifconfig определить внешний адрес нельзя.

#!/bin/bash # myip.sh # Скрипт для определения внешнего адреса # в условиях работы за маршрутизатором if [[ $(ping -q -c 1 checkip.dyndns.com) ]] then wget -q -O - checkip.dyndns.com/ | awk '{print $6}'| sed 's/<.*$//g' else echo "Недоступно" fi exit 0
Note:   внимательный читатель заметит, что в этом скрипте для выяснения, есть ли соединение с интернетом, пингуется не Гугл или Яндекс, а тот же checkip.dyndns.com, который показывает нам наш адрес. Логика здесь в том, что если checkip.dyndns.com вдруг упадёт, wget будет упрямо пытаться получить от него свою страницу, чем сильно затормозит запуск Conky, а если у вас Conky прописано в автозагрузку без паузы, то даже загрузку системы.

Погодные скрипты

Погоду в Conky каждый выводит по-своему, кто во что горазд. Ну, и я тоже, конечно smile

Под спойлером – коротенький обзор нескольких способов и объяснение, почему я от них в конце концов отказался.

Обзор показать

Итак, язык Lua я осваивать пока не собираюсь (мотивации маловато), парсить XML не вижу особого смысла (т.к. мне нужны только краткие погодные данные, которые можно получить более простым путём), идея с картинкой мне не нравится по эстетическим соображениям. Поэтому я использую обыкновенный shell, а данные беру консольным браузером lynx с морды одного из погодных сайтов.

Логика построения скрипта такова:

1. Берём дамп морды сайта с помощью lynx;

2. отбираем нужные строки grep'ом с контекстными опциями;

3. парсим отобранные строки потоковым редактором sed.

Выбор метеосайта показать

Выберем для примера сайт Meteoinfo.ru. Возьмем с него погоду для Москвы:

lynx -dump http://meteoinfo.ru/pogoda/

Рассмотрим полученный дамп (он сравнительно небольшой, 140 строк) на предмет, где находится нужное нам содержание. Оказывается, оно начинается с 65 – 66 строки. Можно отсчитывать нужные строки отсюда, но мне показалось удобнее сделать иначе: найти строку приблизительно посередине нужного куска вывода (таковой оказалась строка

73 Атмосферное давление на уровне станции, мм рт.ст. 740

Нужные данные располагаются в 7 строк выше и 7 строк ниже этого. Пишем в терминале:

lynx -dump http://meteoinfo.ru/pogoda/ | grep -C 7 "Атмосферное давление на уровне станции"

и получаем такой вывод:

10:00:00 (время московское) [pr5000_left2.gif] [pr5000_middle2.gif] [1px.gif] [36][cb1.png] [1px.gif] Неблагоприятные погодные явления Атмосферное давление на уровне станции, мм рт.ст. 740 Температура воздуха, °C 1.3 Минимальная температура, °C 0.8 Относительная влажность, % 91 Погода [10.gif] Комментарий к погоде Дымка (видимость больше 1 км) Направление ветра З Скорость ветра, м/с 1

Чудесно, дальше можно спокойно парсить этот кусок дампа. Для начала вырезаем ненужную строку с рисунком ("Погода [10.gif]") и, если надо, строку "Комментарий к погоде Дымка (видимость больше 1 км)". Этим мы несколько сократим объем работ с sed'ом.
Начало скрипта приобретает вид

lynx -dump http://meteoinfo.ru/pogoda/ | grep -C 7 "Атмосферное давление на уровне станции"| grep -v "Погода" | grep -v "Комментарий"

а затем его вывод передаем по пайпу редактору sed.
Окончательный вид скрипта:

#!/bin/bash # meteoinfo.sh lynx -dump http://meteoinfo.ru/pogoda/ | grep -C 7 "Атмосферное давление на уровне станции" | grep -v "Погода" | grep -v "Комментарий" | \ sed -e ' /\(время московское\)/d # Убираем ненужные строки /Неблагоприятные/d /погодные/d /Минимальная/d /Максимальная/d /\[.*\]/d # Убираем все строки в квадратных скобках s/Атмосферное давление на уровне станции/Давление/ # Укорачиваем s/Относительная влажность, %\s*\([0-9].*\)/Влажность \1%/ s/Направление ветра/Ветер/ s/Балл общей облачности/Облачность/ s/Скорость ветра, м\/с\s*\([0-9,]*\)/Скорость \1 м\/с/ s/Температура воздуха, °C\s*\([-+0-9.,]*\)/Температура \1 °C/ # Получаем нужный формат ' exit 0
Внимание!   Вышеприведенный код не скопируется правильно. Если вы хотите скопировать исходный код и поэкспериментировать с ним, прежде чем разрабатывать свой, копируйте код под спойлером:

Raw-код показать

Запустив этот скрипт в терминале, получаем примерно такой вывод:

~/.conky$ ./meteoinfo.sh 10:00:00 Давление, мм рт.ст. 740 Температура 1.3 °C Влажность 91% Ветер Ю-В Скорость 1 м/с Облачность 10 Осадки за 12 часов, мм 0

Как видим, ничего особенно сложного нет, и, применяя подобный алгоритм, мы можем брать погодные данные почти с любого метеосайта, а главное – парсить и форматировать вывод как нашей душеньке угодно. Требуются лишь некоторые знания shell и sed. После того, как мы получим нужный формат вывода путём отладки в терминале, нам останется только прописать периодический запуск этого скрипта в .conkyrc, к примеру, так:

${color cornsilk}${execi 900. $HOME/.conky/meteoinfo.sh

Но не будем забегать вперед, файлу .conkyrc будет посвящена следующая 2-я часть поста.

Мой .conkyrc

Автор должен покаяться: он совсем уже забросил мысли о написании второй части, поскольку считал это дело неинтересным и никому не нужным. Однако читатели автора пристыдили и вразумили. Пока суд да дело, выкладываю "сырьём" свой ~/.conkyrc. Может быть, даже прокомментирую его несколько позже, и посмотрим, хватит ли этого на вторую часть поста.

Note: Выкладываю код без подсветки, со всеми пробелами и отступами, которые, особенно в секции TEXT, важны для правильного отображения (форматирования) информации в окне Conky.

.conkyrc показать

Приведу внешний вид conky, соответствующий этому .conkyrc:

Как видите, отличия с тем, что на первом скрине, невелики (ушел один диск, добавился другой, нашлось место для оборотов cpu fan и прочие мелочи).

Комментариев: 17 RSS

Увы, заброшена :(

Сейчас даже заготовки для нее обнаружил с трудом, да и тех кот наплакал. Мне как-то показалось, что в первой части -- самое интересное, а всё остальное, на 99% сводящееся к написанию (точнее, правке) файла .conkyrc, уже замусолено в интернете до оскомины и никого не затрудняет. Сами понимаете, лепить посты на такие темы уже не просто лень, а непреодолимая лень...

Тем не менее было бы интересно взглянуть на ваш .conkyrc

Раз есть такое желание, выкладываю его в отдельной "хвостовой" главке.

Захарчик5
2015-01-09 в 10:55:19

Спасибо! Самая полезная статья, из всех мною нагугленых за месяц.

Захарчик6
2015-01-09 в 10:59:17

Почему-то терминал пишет, что отказано в доступе, в ответ на выполнение скрипта myip.sh (текст скопирован, построчно переносы сделал)

Рад, что пригодилось.

Попробуйте выполнить в терминале (в папке, где лежит скрипт):

chmod 755 myip.sh

Захарчик8
2015-01-09 в 18:55:33

АХ, ЭТО ЖЕ ТАК ПРОСТО, права.... )))) спасибо, я про них забыл

Замучился я9
2015-01-12 в 11:43:18

Скажите, есть ли возможность сделать окно коньков полупрозрачным, без использования луа-скриптов?

xftalpha 0.5 - это прозрачность чего именно? меняю, а ничего не меняется

За прозрачность-непрозрачность отвечает строка
own_window_transparent yes

Понятное дело, если no, то окно непрозрачно, и тогда вступает в игру строка
own_window_colour

(у меня, к примеру, darkolivegreen).

Полупрозрачность никогда не делал, но советуют так:

own_window yes
own_window_type normal
own_window_class conky-semi
own_window_hints undecorated,below,sticky,skip_taskbar,skip_pager
own_window_transparent yes
own_window_argb_visual yes
own_window_argb_value 128


При этом если нужно получить полупрозрачность черного фона, следует установить own_window_transparent no

а степень непрозрачности подбирать манипулируя параметром own_window_argb_value, подбирая его в пределах 0 -- 255.

Но, повторяю, я сам этого не пробовал, т.к. мне ближе прозрачность.

Захарчик11
2015-01-14 в 10:13:17

А вот вопрос: У меня RSS подписка огроменная, мне нужно, чтоб новости показывались по пять штук с каждого канала, а каналов всего 15. Можно ли для RSS сделать второе, отдельное окно conky, чтоб системный монитор не трогать?

Теоретически, насколько я понимаю, можно сделать не одно и даже не два окна conky, для этого придется запускать соответствующее количество экземпляров коньков, каждый со своим .conkyrc (conky -c $HOME/.conkyrc-1, conky -c $HOME/.conkyrc-2 и т.д.) Сам я, однако, на практике никогда даже не пытался это делать. Как справедливо сказано в man conky, чем больше запихивается в коньки, тем больше они жрут ресурсов. Можно, конечно, вторые коньки запускать "вручную", по мере необходимости, но тогда уж, имхо, удобнее пользоваться rss-ридером.

Впихнуть такую страсть, как 15 х 5 строк -- это я не знаю, какой монитор нужен. У меня на скромном 19-ти дюймовом (1366х768) помещается по вертикали ~ 48 строк, из которых ~ 10 уходит на оформление (hr).

Ваши наброски для .conkyrc нужно проверять практически. Только на практике отлавливаются всякие мелкие малозаметные ошибки и окончательно подгоняется по геометрии вывод.

И очень прошу Вас в следующий раз большие куски кода выкладывать на какой-нибудь pastebin, а в комменты -- ссылку.

Захарчик13
2015-01-14 в 13:02:22

спасибо ) Так и думал. Лучше, действительно, РСС-ридер заюзаю. Просто так было бы удобно сразу на рабочем столе все видеть...

Захарчик14
2015-01-14 в 14:18:48

вот еще: я практически скопировал погодный скрипт, немного под себя изменил, но почему-то вывод дампа странно форматируется, каждый раз по разному. Я сперва в скрипте добавлял пробелы, чтоб выравнять, но потом понял, что каждый день все меняется. Это из-за того сайта метеоинфо, или в коде есть недочет?

Как всегда при отладке, нужно откатиться к начальному варианту. Если чужой неизмененный скрипт работает устойчиво, значит, причина в неудачных изменениях. Если и чужой барахлит, следует перепроверить точность копирования, желательно в редакторе с подсветкой кода.

Скрипты -- штука капризная. Погодный скрипт (тот, который под спойлером) выдавал у меня необъяснимую ошибку, пока я не выяснил, что обратный слэш, набранный на странице блога как &#92; при копировании не распознаётся правильно, и надо кодировать его как &bsol;. На выяснение ушёл чуть не час времени, временами я даже начинал сомневаться в своём психическом здоровье...

Захарчик16
2015-01-14 в 16:42:52

да у меня и оригинальный скрипт один день показывал ровно все, а потом начали строки гулять...

Оригинальный скрипт -- именно для Москвы? Для Екатеринбурга, например, придется его править.

Что касается московского, у меня он выводится нормально. Следовательно, где-то у Вас что-то не то. Для контроля скопируйте его отсюда (с гарантией от вмешательства CMS-движка): http://mintmem.com/demo/conky_weather-demo

Не забудьте добавить ему расширение, а главное -- дать ему права на исполнение.

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

Комментарий будет опубликован после проверки

(обязательно)