Власні повідомлення (notify) у Gnome

Йтиметься про повідомлення, які показую практично всі програми від Rhythmbox до мережевих підключень. Хотілося мати можливість показувати в такому вигляді власні і тому я взяв бубон і почав капати)

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

sudo apt-get install libnotify-bin

після цього невеликий тест. Перевіряємо у консолі

якщо у вас з'явилося таке віконце значить можна рухатися далі і розбиратися з налаштуваннями

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

-u, --urgency=LEVELВаріантів тут не так багато, low, normal, critical. Різниця лише в смужці, яка з'являється з лівого боку.

-t, --expire-time=TIME Specifies timeout in milliseconds which to expire the notification. Тут все зрозуміло, вказуємо час у мілісекундах которе повідомлення буде висіти на екрані.

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

-h, --hint=TYPE:NAME:VALUE Specifies basic extra data to pass. Великі типи є int, double, string і byte. хінти дають можливість велику можливість з налаштування, наприклад місцезнаходження на екрані де має з'явиться повідомлення -h int:x:500 -h int:y:500

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

після того, як розібралися з налаштуваннями відразу починає зароджуватися думка, а куди це застосувати і перше це власний органайзер. УсеЧас говорять, що треба відриватися від монітора кожні 45 хвилин, значить є шанс це зробити. Крок перший це написати невеликий скриптик

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/ukr/sh1.sh Ну ось за додатковою інформацією звертайтеся на http://www.galago-project.org/specs/notification/ 0.9/x211.html

Щодо DISPLAY=:0.0. Жестковбитий DISPLAY - не добре. Він іноді може змінюватися, навіть, якщо всього один користувач за комп'ютером. Крім того, якщо ти закрив сесію і пішов, крон все одно працюватиме і помилки сипатимуться тобі в пошту.

Краще визначати його автоматом, наприклад, за допомогою ось такої функції:

# get_display [USER] — Returns $DISPLAY of USER. # Якщо перший парадокс омитується, то $LOGNAME буде використовуватися. get_display () who \ grep $ \ perl -ne 'if ( m!\(\:(\d+)\)$! ) END ' >

І в скрипті поправити ось так (в одному рядку не можна, тому що export збиває $?):

DISPLAY=$(get_display) exit export DISPLAY

Хардкорна конфа за С++. Ми запрошуємо лише профі.