gnome notify-send из любого bash скрипта

Собственно в gnome уже давно существуют notifications - удобный способ привлечь внимание пользователя. Но что бы не словоблудствовать попусту вот screenshots дают наглядное представление о том что же такое notifications.

Для отправки сообщения пользователю используется команда notify-send. У меня возникло непреодолимое желание использовать notify-send из своих скриптов запускаемых по vixie-cron. Однако тот кто пытался это же осуществить знает, что использование notify-send напрямую из скриптов cron затруднено тем, что в gnu linux разные пользователи запускают gnome-session и cron. И вот собственно для упрощения этой операции был написан скрипт обертка

#!/bin/sh
# notify.sh
# (c) init_6 <sudormrfhalt@gmail.com>

user=`ps -C gnome-session -o user=` #find UID user who start gnome-session
pids=`pgrep -u $user gnome-session` #find PID
title=$1
text=$2
timeout=$3

if [ -z "$title" ]; then
  echo You need to give me a title >&2
  exit 1
fi
if [ -z "$text" ]; then
  text=$title
fi
if [ -z "$timeout" ]; then
  timeout=60000
fi

for pid in $pids; do
  # find DBUS session bus for this session
  DBUS_SESSION_BUS_ADDRESS=`grep -z DBUS_SESSION_BUS_ADDRESS \
  /proc/$pid/environ | sed -e 's/DBUS_SESSION_BUS_ADDRESS=//'`
  # use it
  DBUS_SESSION_BUS_ADDRESS=$DBUS_SESSION_BUS_ADDRESS \
  su $user -c "notify-send -u low -t $timeout '$title' '$text' "
done

У меня notify.sh живет по адресу /usr/local/bin/notify.sh Использование хоть напрямую хоть из скрипта банально

notify.sh "Заголовок" "Текст сообщения трам пам пам…"

У notify.sh есть так же не обязательный параметр timeout которым можно задать время жизни сообщения на экране. В кратце смысл скрипта такой - он находит PID и UID пользователя запустившего в системе gnome-session а дальше этому пользователю передается сообщение. Лично мне пока большего и не нужно.

Как нибудь надо будет доработать и прикрутить еще и иконки.

Comments