Dbus, naughty and logs/ru

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

Особенности туториала

 * Свободный Window manager (зависит от DBus для получения уведомлений, поэтому любой демон-уведомление, например naughty может работать с ним).
 * Не испльзуется мониторинг, уведомления приходят в реальном времени благодаря особенности inotify ядра линукс

Прочие реализации

 * Существуе еще одна реализация, которая не зависит от внешних утилит (только связка luainotify): Naughty log watcher
 * Использование этого скрипта, может привести к неточным результатм, если лог файл обновляется слишком часто. Следующий скрипт script был написан для этой же цели. Данная модификация испльзует 'tail -F -n0' вместо 'inotifywait'.

Требования
Вам необходимо установить libnotify, libnotify-bin, inotify-tools, incron и source-highlight.

Проверьте, что naughty поддерживает dbus
notify-send hello world

Если уведомления отсутсвует, проверьте, что у вас прописано 'require("naughty")' в rc.lua.

Убедитесь, что вы можете отображать ваши логи
tail -n 10 /var/log/kernel.log или tail -n 10 /var/log/kern.log

Если система ответит вам, что у вас недостаточно прав, вам нужно добавить себя в log группы (gpasswd -a log), затем logout/login для применения изменения. Если группы log не существует, можно попробовать добавить себя в группу adm (gpasswd -a adm)

Использование подсветки кода в awesome
Source-highlight это инструмент, который осуществляет подстветку синтаксис. Вывод может осуществляться в html, терминальных цветовых кодах, и что очень распространено, разработать собственный формат вывода. Отличительной особенностью naughty является то, что но может отображать цветной текст испльзуя word Вот пример файла для подсветки кода, который использует формат naughty. Сохраните его где нибудь как 'awesome.outlang'. extension "awesome"

color "$text "

colormap "green" "#33CC00" "red" "#FF0000" "darkred" "#990000" "blue" "#0000FF" "brown" "#9A1900" "pink" "#CC33CC" "yellow" "#FFCC00" "cyan" "#66FFFF" "purple" "#993399" "orange" "#FF6600" "brightorange" "#FF9900" "brightgreen" "#33FF33" "darkgreen" "#009900" "black" "#000000" "teal" "#008080" "gray" "#808080" "darkblue" "#000080" default "#66FFFF" end

Примечание: Этот файл является настраиваемым: если вам не нравятся цвета по умолчанию, вы можете лего изменить их. Если вам нужны дополнительные способы модификации, вы можете найти их на ресурсе the source-highlight website).

Пишем скрипт для вывода уведомений
Следующий скрипт читает первую строку файла, подсвечивает ее, и посылает через D-BUs как уведомление. Сохрание его в папку с вашими скриптами (скажем /home/user/scripts/popLog.sh)


 * 1) !/bin/bash


 * 1) Использование: ./popLog.sh /var/log/yourlog
 * 2) выводит подсвеченную последнюю строку журнала log

export DISPLAY=":0.0" export SYNTAXHIGHLIGHTFILE="/home/joe/.config/awesome/awesome.outlang" # CHANGE ME

infoUrgency='low' warningUrgency='normal' errorUrgency='critical' securityUrgency='critical' infoPopupTime=5000 warningPopupTime=8000 errorPopupTime=11000 securityPopupTime=11000 infoIcon='/usr/share/icons/gnome/32x32/status/dialog-information.png' warningIcon='/usr/share/icons/gnome/32x32/status/dialog-warning.png' errorIcon='/usr/share/icons/gnome/32x32/status/dialog-error.png' securityIcon='/usr/share/icons/gnome/32x32/status/security-medium.png'
 * 1) Urgency
 * 1) Popup time
 * 1) Icons

coloredLog=$(tail -n 1 $1 |                  \  source-highlight --failsafe                 \                   --src-lang=log             \                   --style-file=default.style \                   --outlang-def=${SYNTAXHIGHLIGHTFILE})

if [ -n "$coloredLog" ] ; then #echo $coloredLog if $(echo $1|grep info) ; then messageType='info'; fi   if $(echo $1|grep warn) ; then messageType='warning'; fi    if $(echo $1|grep err) ; then messageType='error'; fi    if $(echo $1|grep auth) ; then messageType='security'; fi    if $(echo $1|grep access) ; then messageType='security';fi if $(echo $notification|grep 'UFW BLOCK INPUT') ; then messageType='security'; fi   if [ -z "$messageType" ] ; then messageType='info'; fi    case $messageType in    info)        urgency=$infoUrgency        icon=$infoIcon        popupTime=$infoPopupTime    ;;    warning) urgency=$warningUrgency icon=$warningIcon popupTime=$warningPopupTime ;;   error)        urgency=$errorUrgency        icon=$errorIcon                    popupTime=$errorPopupTime    ;;    security) urgency=$securityUrgency icon=$securityIcon popupTime=$securityPopupTime ;;   *)        urgency=$errorUrgency        icon=$errorIcon                    popupTime=$errorPopupTime    ;;    esac

notify-send -u $urgency -t $popupTime -i "$icon" "$1" "$coloredLog" 2> /tmp/notify-send-error #Возможно вы получите что то похожее на „(notify-send:15339): GLib-GObject-CRITICAL **: g_object_unref: assertion `G_IS_OBJECT (object)' failed“ при старте через incrond :/Что делать в этом случае? fi

Если вы получаете ошибку похожую на описаннуе выше при запуске через incrond, измените команду notify-send на следующую (замените USERID своим именем пользователя): DBUS_SESSION_BUS_ADDRESS="" pids=`pgrep -u USERID` for pid in $pids; do                   grep -z DBUS_SESSION_BUS_ADDRESS \ /proc/$pid/environ | sed -e 's/DBUS_SESSION_BUS_ADDRESS=//' echo done|sort -u|while read DBUS_SESSION_BUS_ADDRESS do         export DBUS_SESSION_BUS_ADDRESS=$DBUS_SESSION_BUS_ADDRESS notify-send -u $urgency -t $popupTime -i "$icon" "$1" "$coloredLog" 2> /tmp/notify-send-error done

Мониторинг ваших логов через incron
Отредактируйте ваш incrontab с помощью команды 'incrontab -e', и следующейстрокой в crontab: /var/log/kernel.log IN_MODIFY sh /home/me/scripts/popLog.sh /var/log/kernel.log Добавьте логи, которые вам нужны. Будьте внимательны при выборе того, что вы хотите мониторить. Например, использование /var/log/everything.log может привести к бесконечному циклу (поскольку он посылает логи выполянться в popLog.sh, который выводит новые уведомления, что вызовет новое уведомление, которое будет записано в это же файл /var/log/everything.log...).

Наслаждайтесь
Теперь вы будете получать раскрашенные уведомления! Например, вы можете опробовать кнопку с wifi.

Этот скрипт является модификацией. Огромное спасибо Zanko!

Примечание: Можно задавать ширину для уведомления naughty вручную. Для этого добавьте следующие строки в rc.lua (проверено на 3.4.2):

naughty_width = 600 -- in pixels naughty.config.presets.low.width = naughty_width naughty.config.presets.normal.width = naughty_width naughty.config.presets.critical.width = naughty_width