Linux для всех

индекс
246,80

Собственные уведомления (notify) в Gnome

Речь пойдет об извещениях которые показываю практически все приложения от Rhythmbox до сетевых подключений. Хотелось иметь возможность показывать в таком виде собственные и поэтому я взял бубен и начал капать )



для начала понадобится установить пакет libnotify-bin, я под ubuntu запустил команду

sudo apt-get install libnotify-bin

после этого небольшой тест. Проверяем в консоле

notify-send test

если у вас появилась такое окошко значит можно двигаться дальше и разбираться с настройками



notify-send [OPTION...] [BODY] — create a notification

-u, --urgency=LEVEL
Вариантов здесь не так много, low, normal, critical. Разница лишь в полоске которая появляется с левой стороны.

-t, --expire-time=TIME Specifies the timeout in milliseconds at which to expire the notification.
Здесь все понятно, указываем время в миллисекундах которе извещение будет висеть на экране.

-i, --icon=ICON[,ICON...] Specifies an icon filename or stock icon to display.
С иконкой тоже все замечательно, Во первых можно прямо указать путь на любое изображение на диске. Другой вариант это открыть /usr/share/icons/hicolor/48x48/apps/ и выбрать там любую и указать ее название только без расширения notify-send -i pidgin test

-c, --category=TYPE[,TYPE...] Specifies the notification category.
по идеи задание категории должно было дать результат но я поверьте его так и не заметил, поэтому пойдем дальше

-h, --hint=TYPE:NAME:VALUE Specifies basic extra data to pass. Valid types are int, double, string and byte.
хинты дают возможность большу возможность по настройке, например местоположение на экране где должно появится извещение -h int:x:500 -h int:y:500

теперь по тексту, принимаются 2 текста, первый идет в шапку, второй это тело с небольшими возможностями гипертекста



notify-send «Шапка» "<b>жирный <i>италик <a href=«a.html»>ссылка</a>"

после того как разобрались с настройками сразу начинает зарождаться мысль, а куда это применить и первое это собственный органайзер. Все время говорят что надо отрываться от монитора каждые 45 минут, значит есть шанс это сделать. Шаг первый это написать небольшой скриптик

#!/bin/sh

export DISPLAY=:0.0
PATH=/usr/bin/:/bin/
notify-send --urgency normal --expire-time=10000 -i typing-monitor -h int:x:500 -h int:y:500 "Пора сделать перерыв" "Глазам нужен отдых"


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

chmod a+x sh1.sh
./sh1.sh




результат понравился? тогда дело за настройкой крона
45 * * * * /home/rus/sh1.sh
Ну вот
за дополнительной информацией обращайтесь на http://www.galago-project.org/specs/notification/0.9/x211.html

кроспостинг http://mymans.org/2008/12/26/500

Дополнение от spiritedflow

Насчет DISPLAY=:0.0. Жестковбитый DISPLAY — не хорошо. Он время от времени может меняться, даже, если всего один пользователь за компьютером. Кроме того, если ты закрыл сессию и ушел, крон будет все равно работать и ошибки будут сыпаться тебе в почту.

Лучше определять его автоматом, например, с помощью вот такой вот функции:

# get_display [USER] — Returns $DISPLAY of USER.
# If first param is omitted, then $LOGNAME will be used.
get_display () {
who \
| grep ${1:-$LOGNAME} \
| perl -ne 'if ( m!\(\:(\d+)\)$! ) {print ":$1.0\n"; $ok = 1; last} END {exit !$ok}'
}

И в скрипте поправить вот так (в одной строчке нельзя, так как export сбивает $?):

DISPLAY=$(get_display) || exit
export DISPLAY
+92
26 декабря 2008, 22:18
129

комментарии (26)

0
Acubed #
Отлично!
Давно хотел прикрутить визуальное оповещение к своим скриптам, но незнал как.
Спасибо! =)
Плюсанул бы, еслиб мог…
+3
invite #
Класс! Никогда не думал, что можно все так просто сделать… Ух..., ну просто спасибо!
0
outbreak #
Прикольная фича! Мерси…
0
tigerman #
Конечный вариант понравился. Взял на «вооружение». Спасибо за информативную статью.
+1
eugenios #
открывается огромное поле для экспериментов, и притом так просто. вот за это и люблю линукс
0
h0rr0rr_drag0n #
О, спасибо! Теперь я могу прикрутить оповещения к программам, которые такого не поддерживают, но позволяют запускать какую-нибудь другую программу по событию. Ура!..
+1
Nebulosa #
А еще для всплывающих окон есть zenity, а для перерывов можно использовать встроенные средства Gnome:
0
Mar4ello #
Классная статья!
Использовал в своих проектах нотификации, но не так обширно, как рассказывает автор.
Спасибо!
+1
XLOR #
спасиб полезно… прикручу к своим скриптам
+10
spiritedflow #
Насчет DISPLAY=:0.0. Жестковбитый DISPLAY — не хорошо. Он время от времени может меняться, даже, если всего один пользователь за компьютером. Кроме того, если ты закрыл сессию и ушел, крон будет все равно работать и ошибки будут сыпаться тебе в почту.

Лучше определять его автоматом, например, с помощью вот такой вот функции:
# get_display [USER] -- Returns $DISPLAY of USER.
# If first param is omitted, then $LOGNAME will be used.
get_display () {
    who \
        | grep ${1:-$LOGNAME} \
        | perl -ne 'if ( m!\(\:(\d+)\)$! ) {print ":$1.0\n"; $ok = 1; last} END {exit !$ok}'
}


И в скрипте поправить вот так (в одной строчке нельзя, так как export сбивает $?):
DISPLAY=$(get_display) || exit
export DISPLAY

0
foo #
А как дела обстоят с описанными здесь хинтами sound-file и suppress-sound?
Пробую использовать -h string:sound-file:/path/to/sound — никакого эффекта. А TYPE boolean, соответствующий supperss-sound вообще «Invalid hint type»
0
foo #
впрочем, тем же скриптом можно запускать какой-нибудь play, но всё равно непонятно.
0
brain2xml #
у меня тоже не получилось это, так же как и запустить прилажение при клике на извещение, но подозреваы что проблема та же что и с монитором, надо экспортировать звуковую карту
0
passshok #
Спасибо, заценил. Очень удобно. Буду использовать.
0
Vadi2 #
Если на Убунте, кликаете сюда чтобы поставить (использую как прокси — хабр ломает апт: линки… но программа с вашего репозитария скачивается), а иначе вот сайт: www.workrave.org/welcome/

Есть ещё апплет, прибавте к панели посли инсталляции.
0
Vadi2 #
Блин… начало забыл. «А можно поставить настоящую программу для перерывов :)»
0
Princess #
Какая полезная фича… спасибо.
0
Heliki #
А можно его как-то прикрутить к tail'у? Чтобы следить за изменениями файла
+2
spiritedflow #
tail -n 0 -f /var/log/syslog | while read line ; do 
    notify-send --urgency normal --expire-time=2000  "New line in syslog:" "$line" ;
done

0
selitskas #
А я сделал надстройку над другим скриптом и теперь информация о балансе на счету (Интернет) у меня каждый день есть, и не надо никуда идти. Большое спасибо автору! :]
0
fhh #
А как-то можно изменить стиль отображения надписи, допустим фон или цвет текста? А то у меня такая вот проблема, что в теме Gtk цвет текста белый и на фоне бакграунда подсказки оно сливается [url=http://pic.co.ua/ru/view/730b8739cc805b8e78c2af9964303226/][img]http://pic.co.ua/thumbs/1231949779730b8739cc805b8e78c2af9964303226.png[/img][/url]
0
brain2xml #
попробуйте облачить текст в тег font и далее как в html выставить там цвета
0
fhh #
нет, не прокатило, пробывал так
notify-send "Hello for Me" и notify-send "Hello for Me" и notify-send "Hello for Me". Думаю тут надо .gtkrc-2.0 копать
0
legwar #
Супер!
0
nmike #
true linux way
0
sergicus #
спасибо

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