The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Уведомления о свежей почте в conky, dzen и xmobar
Ниже описан способ отображения в conky, dzen, xmobar и т.п. уведомления о
наличии свежей почты в maildir.

Преимущества данного способа: 
1) он выдержан в стиле unix way, 
2) не требует обращаться к жёсткому диску чаще, чем это необходимо.

Описание относится к Arch Linux, но процедура достаточно проста, чтобы легко
перенести её на любую систему с достаточно свежим ядром Linux.

Идея в том, что появление свежей почты отслеживается посредством incron; при
появлении нового сообщения вызывается скрипт mailstat.sh (см. ниже), который
считает новые сообщения в maildir, наблюдаемых incron-ом, формирует
текст-уведомление для пользователя и выдаёт это сообщение в именованный канал.
Со своей стороны, к примеру, conky читает из того же именованного канала и
отображает сообщение. Скрипт пишет в канал многократно, в бесконечном цикле,
чтобы сообщение не пропадало из conky; при запуске очередного экземпляра
скрипта он прибивает все предыдущие.

Итак, предположим, у нас Arch Linux с пользователем moses и его maildir-ами
/home/moses/Mail/work, /home/moses/Mail/club, куда периодически скачивается
почта с POP3-сервера. moses хочет узнавать о наличии свежей почты как можно
скорее, но не хочет поминутно лазить в почтовый клиент - он предпочёл бы видеть
уведомления на панели xmobar.
Вообще говоря, maildir-ов может быть больше, но moses хочет видеть уведомления только об этих. 

Устанавливаем incron.

   > sudo pacman -S incron

Разрешаем moses-у использовать incron.

   > sudo vim /etc/incron.allow
   moses

Создаём скрипт mailstat.sh.

vim ~/scripts/mailstat.sh

#!/bin/bash
TARGET=/tmp/mailstat
IT=mailstat
# определяем отслеживаемые  maildir-ы
DIRS=`incrontab -l | grep $IT | awk '{print $1;}' | sort -u`
# подсчитываем свежие  сообщения в  maildir-ах
T=""
for d in $DIRS
do
   c=`find $d -type f | wc -l`
   if [[ $c -gt 0 ]]; then
      T=$T`echo $d | sed -e 's/\/new$//' | sed -e 's/^.*\///'`": "$c" "
   fi
done
# прибиваем ранее  запущенные экземпляры  скрипта
PIDS=`ps -eo pid,comm | grep $IT | grep -v $$ | awk '{print $1;}'`
for p in $PIDS
do
   if [[ $p != $$ ]]; then
      kill -9 $p 2>/dev/null
   fi
done
# создаём именованный  канал
if [ ! -e $TARGET ]; then
   mkfifo $TARGET
fi
# пишем сообщение  в канал
while true ; do
   echo $T > $TARGET
done


Запускаем incron.

   > sudo /etc/rc.d/incrond start

Настраиваем incron.

   > incrontab -e
   /home/moses/Mail/work/new IN_CREATE,IN_DELETE,IN_MOVED_FROM /home/moses/scripts/mailstat.sh
   /home/moses/Mail/club/new IN_CREATE,IN_DELETE,IN_MOVED_FROM /home/moses/scripts/mailstat.sh

Убеждаемся, что изменения возымели действие.

   > incrontab -l

Передёргиваем incron.

   > incrontab -d

Настраиваем xmobar для отображения уведомлений.

   > vim ~/.xmobarrc
   Config { font = "-xos4-terminus-medium-r-normal--12-120-72-72-c-60-*-*"
          , bgColor = "black"
          , fgColor = "grey"
          , position = Top
          , lowerOnStart = True
          , commands = [ Run Com "timeout" ["1  tail -n  1 /tmp/mailstat"] "mail" 5
                       , Run StdinReader
                       ]
          , sepChar = "%"
          , alignSep = "}{"
          , template = "%StdinReader%}{ <fc=#ee9a00>%mail%</fc>"
          }

Настраиваем автозапуск incron.

   > sudo vim /etc/rc.conf
   DAEMONS=(@metalog network @crond @incrond)
 
04.05.2010 , Автор: Andrey Bortnik
Ключи: mail / Лицензия: CC-BY
Раздел:    Корень / Администратору / Сетевые сервисы / Mail, почта / Отправка и пересылка сообщений на уровне пользователя

Обсуждение [ RSS ]
  • 1, Аноним (-), 04:20, 06/05/2010 [ответить]  
  • +/
    Респект за Arch Linux
     

     Добавить комментарий
    Имя:
    E-Mail:
    Заголовок:
    Текст:




    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру