/ Статьи / Графика и GUI / DWM+Dzen2+Conky. Настройка. /

DWM+Dzen2+Conky. Настройка.

Дата публикации: Jan. 3, 2011, 7:56 p.m.
Теги: dwm, dzen2, conky,
Автор: Brainsburn

dwm dzen2 conky

Сегодня я расскажу как подружить оконный менеджер DWM, панель Dzen2 и системный Conky. На примере будет показано как в dzen2 выводить информацию о погоде, новых письмах, сетевых интерфейсах, процессоре, памяти и т.п. Материал применим не только к DWM, но и другим оконным менеджерам.


Как встроить Dzen2 в DWM?

Если вы используете отличный от DWM оконный менеджер, можете пропустить эту часть, т.к. в ней рассказывается, как в DWM сделать отступ внизу экрана для панели Dzen2.

Чтобы освободить место под Dzen2, откройте файл dwm.c, найдите в нем строку
m->mh = m->wh = unique[i].height;
и замените ее на
m->mh = m->wh = unique[i].height - 16;

Пересоберите DWM и вы увидите, что внизу экрана освободилось место. Поместить туда панель dzen2 можно так:

$ dzen2 -ta r -p -y 1032

Примечание: -y 1032 - положение по вертикали. Это для разрешения экрана 1680х1050. Для других разрешений значение подбирайте сами.

Скрипт для погоды

Сразу скажу - вся информация в Dzen2 у нас будет выводиться через Conky. В статье про настройку Conky я уже помещал скрипт для отображения погоды с Gismeteo, но сегодня заметил, что он перестал работать, поэтому пришлось написать новый. Вот сам скрипт:

#!/bin/bash

# Код города:
CITY=27719_1
DATA=$(curl -s http://informer.gismeteo.ru/xml/$CITY.xml)
PRESSUREMAX=`echo $DATA | gawk '{print $26}' | tr -d \" | tr -d 'max='`
TEMPMAX=`echo $DATA | gawk '{print $29}' | tr -d 'max=',\"` 
TEMPMIN=`echo $DATA | gawk '{print $30}' | tr -d 'min=',\","/>"`

if [[ -n $DATA ]]; then
echo "$TEMPMAX..$TEMPMIN°C ${PRESSUREMAX}mm"
else
echo "Проверьте подключение..."
fi

Чтобы узнать код вашего города, идите на http://informer.gismeteo.ru/getcode/xml.php?id=27612 . Для Москвы это - "27612_1".
Сохраните этот файл в домашнем каталоге под именем weather.sh и дайте ему права на выполнение (chmod +x ~/weather.sh).

Скрипт для почты

Этот скриптик не будет читать почту, он будет лишь проверять, не появились ли в вашем почтовом ящике новые письма. Работает на Python, использует модуль imaplib (он должен входить в стандартную поставку). Вот сам скрипт:

import imaplib
server= imaplib.IMAP4_SSL('imap.yandex.ru')
server.login("ВАШ_ЛОГИН@yandex.ru", "ВАШ_ПАРОЛЬ")
server.select()
q,w = server.search(None, '(UNSEEN)')
n=0
for i in w[0].split():
        n=n+1
print n     
server.close()
server.logout()

Сохраните скрипт под именем checkmail.py. Запускать его можно так: python checkmail.py . Скрипт выводит кол-во не прочитанных писем в вашем почтовом ящике. В данном случае указан сервер imap.yandex.ru. Для Gmail укажите imap.googlemail.com, для других почтовых служб имена серверов узнавайте сами.

Conky и Dzen2

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

out_to_console yes
gap_y -540
out_to_x no
update_interval 2
total_run_times 0
use_spacer none

TEXT
echo -n '^fg(\#FFFFFF)^i($HOME/.dzen/dzen-xbm-pack/temp.xbm)^fg(\#99CCFF)${execi 3600 ~/weather.sh}^fg(\#FFFFFF) '
echo -n '^i($HOME/.dzen/dzen_bitmaps/mini.mail2.xpm) ^fg(\#99CCFF)${execi 60 python ~/checkmail.py} new
mail(s)^fg(\#FFFFFF) '
echo -n '^fg(\#FFFFFF)^i($HOME/.dzen/dzen_bitmaps/arr_down.xbm) ^fg(\#99CCFF)${downspeed eth0}^fg(\#FFFFFF) '
echo -n '^fg(\#FFFFFF)^i($HOME/.dzen/dzen_bitmaps/arr_up.xbm) ^fg(\#99CCFF)${upspeed eth0}^fg(\#FFFFFF) '
echo -n '^fg(\#FFFFFF)^i($HOME/.dzen/dzen-xbm-pack/cpu.xbm) ^fg(\#99CCFF)${cpu}%^fg(\#FFFFFF) '
echo -n '^i($HOME/.dzen/dzen-xbm-pack/mem.xbm)^fg(\#99CCFF) ${memperc}%^fg(\#FFFFFF) '
echo -n '^i($HOME/.dzen/dzen_bitmaps/mini.clock2.xpm) ^fg(\#99CCFF)${time %k}:${time %M}^fg(\#FFFFFF) '

echo

Напомню, что конфиг Conky должен называться ~/.conkyrc (Хотя, что я говорю, найдите мне хоть одного, использующего DWM и не знающего таких вещей =) ).


В этом конфиге используются xbm/xpm иконки, которые нужно скачать
$ wget http://dzen.geekmode.org/dwl/dzen_bitmaps.tar.bz2
$ wget http://dzen.geekmode.org/dwl/dzen-xbm-pack.tar.gz
Первый архив распакуйте в ~/.dzen/
Второй - в ~/.dzen/dzen-xbm-pack/

Теперь осталось только перенаправить вывод conky в dzen2. Добавьте в ваш ~/.xinitrc такую строку перед строкой, отвечающей за запуск dwm:

conky | sh | dzen2 -ta r -p -y 1032 &

Примерно так это должно выглядеть в итоге:

Dzen2 DWM Conky

Полный скриншот:

Dzen DWM Conky

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



Полезные ссылки:
Скачать Dzen2 можно отсюда: http://sites.google.com/site/gotmor/dzen
Список переменных Conky: http://conky.sourceforge.net/variables.html
Документация по Dzen2: http://dzen.geekmode.org/dwiki/doku.php?id=dzen:mainindex

PS:
Логотип статьи прошу не воспринимать всерьез. Над собой смеяться иногда полезно :)






Возможно, эти материалы Вас заинтересуют:


Рекомендовать эту страницу:

Комментарии:(12)

# oleg_xp Jan. 4, 2011, 10:42 a.m.
Как всегда большое спасибо!

# Гость Jan. 6, 2011, 9:54 p.m.
Зачем выводить в dzen, если коньки сами могут выступать в качестве панели?

# Brainsburn Jan. 8, 2011, 7:42 p.m.
Гость, я описал лишь пример, как это можно сделать. Dzen может делать то, чего не умеет Conky, к примеру, popup-сообщения и всплывающие меню для запуска программ и т.п.

# eway May 2, 2011, 4:34 a.m.
Что нужно добавить в скрипт погоды для:атмосферные явления; облачность по градациям; тип осадков; интенсивность осадков(если они есть); вероятность грозы(если прогнозируется); минимальное и максимальное значения средней скорости ветра; направление ветра; относительная влажность воздуха?

# Алексей June 22, 2011, 8:34 p.m.
Присоединяюсь к предыдущему посту

# avr Aug. 1, 2011, 9:05 a.m.
При запуске проверки почты ругается на строку №9 - print n
В остальном все работает отлично.
Что делать?

# Brainsburn Aug. 1, 2011, 1:30 p.m.
avr, в новом пайтоне изменена функция print. Вместо print n теперь надо писать print(n)

# d-ONe Oct. 29, 2012, 12:49 p.m.
А как сделать чтобы dzen можно было скривать? Как панель в dwm по MODKEY_b. а то иногда мешает в полноэкранном режиме

# Brainsburn Oct. 29, 2012, 8:55 p.m.
d-ONe, на сколько мне известно, - никак. Сейчас использую Awesome WM и в нем в полноэкранном режиме dzen не видно. Насчет DWM не знаю.

# d-ONe Feb. 8, 2013, 6:51 a.m.
то что нужно dualstatus [dwm.suckless.org] =)) Dzen2 прощай…)

# Alex Dec. 20, 2013, 3:58 p.m.
Пытаюсь сделать отступ снизу
m->mh = m->wh = unique.height - 16;
но не получается. DWM-6.0

# Alex Dec. 21, 2013, 11:08 a.m.
Нашел решение нужно в секции /* init screen */ найти строчку
sh = DisplayHeight(dpy, screen);
и заменить на
sh = DisplayHeight(dpy, screen) - 16;
где 16 это число пикселей отступа.


Комментировать:

Гость, Вы можете оставить свой комментарий.

Стиль кода:
Имя
Сайт * не обязательное поле
Поставьте галку, если вы - бот
Поставьте галку, если вы - человек

Друзья! Убедительная просьба воздержаться от нецензурной лексики!



Справка:
Если вы хотите использовать в тексте комментария специальные символы, например, [ и ], используйте их внутри тега [code] [/code]
Вы можете использовать теги BBcode. Для оформления кода и подсветки синтаксиса используйте тег [code] или [code=название_языка], например, [code=python]
Ссылки вставляйте так: [url]zenux.ru[/url] или так: http://zenux.ru, но не так: zenux.ru
Текст сообщения должен быть в пределах 3000 символов.




Последние комментарии:

Eugene: Галка, внешний вид изменить совершенно не сложно.... >>>
Галка: А сильно сложно Убунту переделывать?... >>>
Brainsburn_: “Написание в 1-й” подразумевает “в первой”, а не в... >>>
ZZZ: “Написание в 1-й” подразумевает &ldquo... >>>
SBOdin: Спасибо за полезное руководство... >>>