Ниже описан способ отображения в conky, dzen, xmobar и т.п. уведомления о наличии свежей почты в maildir. Преимущества данного способа:
1) он выдержан в стиле unix way,
2) не требует обращаться к жёсткому диску чаще, чем это необходимо.
Описание относится к Arch Linux, но процедура достаточно проста, чтобы легко перенести её на любую систему с достаточно свежим ядром Linux.
Идея в том, что появление свежей почты отслеживается посредством [[http://inotify.aiken.cz 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 -Ss incron
Разрешаем moses-у использовать incron.
> sudo vim /etc/incron.allow
moses
Создаём скрипт mailstat.sh.
> vim ~/scripts/mailstat.sh
#!/bin/bash
DZEN_ICONPATH=~/dzen_bitmaps
TARGET=/tmp/mailstat
LOCKDIR=/tmp
LOCKFILE=mailstatlock
IT=mailstat
# определяем интересующие maildir-ы
DIRS=`incrontab -l | grep $IT | awk '{print $1;}' | sort -u`
# подсчитываем новые сообщения и формируем текст уведомления
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
# останавливаем ранее запущенный экземпляр скрипта
find $LOCKDIR -maxdepth 1 -name $LOCKFILE* -print | xargs /bin/rm -f
# создаём именованный канал для передачи уведомления
if [ ! -e $TARGET ]; then
mkfifo $TARGET
fi
# беспрерывно передаём уведомление в канал, пока нас не остановит следующий экземпляр скрипта
touch $LOCKDIR/$LOCKFILE.$$
while [ -e $LOCKDIR/$LOCKFILE.$$ ] ; 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 "cat" ["/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)
Настраиваем запуск mailstat.sh при старте X-сервера, например, так:
> vim ~/.xinitrc
xrdb -merge ~/.Xresources
/home/moses/scripts/mailstat.sh &
exec xmonad
URL:
Обсуждается: http://www.opennet.dev/tips/info/2365.shtml