Seamos realistas…

Licensed as GPL: GNU Pettanko Loli

Jugando con notify-send en Arch Linux

En estos días se ha vuelto un tema popular utilizar las notificaciones para algo mas que avisar cuando un correo llega o un contacto esta en linea. De hecho he encontrado muy útil este tipo de uso para recordatorios y varias tareas. Mostrare algunos ejemplos de como podemos sacar mas provecho de estas:

Conseguir sistema de notificaciones
Creo que es la parte mas obvia de este plan, para Arch Linux tenemos diferentes alternativas, si tenemos algún entorno de escritorio como nuestra interfaz (KDE, GNOME o XFCE) podremos escoger entre las herramientas propias:

GNOME = pacman -S libnotify notificacion-daemon
XFCE = pacman -S libnotify xfce4-notifyd
KDE = (Plasma cuenta con sus propio sistema de notificaciones)

Podemos optar por otras opciones, tales como notify-osd, statnot y colibri, opciones viables como reemplazos de las anteriores.

Notify-osd = yaourt -S notify-osd-customizable notifyconf #Escogí esta version ya que puede personalizarse
Statnot = yaourt -S statnot #Para WMs como dwm, wmii y otros parecidos.
Colibri = Recomiendo clonar el repositorio GIT y compilarlo por propia cuenta #Alternativa de notificaciones para Plasma Desktop.

Cualquiera de ellas debería brindar la posibilidad de ver notificaciones, para probar usamos el siguiente comando:
notify-send "Hola mundo"
Si pueden ver la notificación, proseguiremos al siguiente paso.

Notificación de comandos.

Desde hace un tiempo uso Openbox, así que para esta guía escogí notify-osd. Este truco es uno de los mas recientes y populares, permite mostrar notificaciones cuando termina un comando en la terminal, como descargar un archivo a través de wget, la actualización del sistema, en mi caso me sirvió para avisarme cuando se terminan las descargas con plowshare.

Esto lo agregamos a .bashrc o al archivo donde tengamos los alias para la linea de comando.

alias alert='notify-send -i gnome-terminal \
 "[$?] $(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s/;\s*alert$//'\'')"'

Para probarlo, ejecutamos el sig. comando: sleep 6; alert Así nos avisara que ejecutamos sleep 6.

Resultados de un comando

Este es otra utilidad, mostrar los resultados de cualquier comando ejecutado en la terminal. Este lo podremos a través de un script:

#!/bin/bash
info=$(eval "$*" 2>/dev/null)
notify-send -t $((1000+300*`echo -n $info | wc -w`)) -u low -i gtk-dialog-info "$*" "$info" || exit 2

Lo guardamos con un nombre simple como send.sh o send. Después le damos permisos de ejecución y lo movemos en alguna dirección del $PATH (yo lo moví a /usr/local/bin). Para probar si funciona, ejecutemos un comando sencillo: send date si este nos da la notificación con la fecha, sabremos que funciona.

Notificaciones de MPD

De todos, fue el mas difícil de hacer de funcionar, no por que requiera mas trabajo, si no por la cantidad de scripts disponibles, y el cual solo quería que mostrara el nombre de la canción, artista y la caratula del álbum. De entre todos, solo uno pudo hacerlo, y se los muestro:

#! /usr/bin/env python
import mpd
import os
import time
import sys
import re
import pynotify

home = os.path.expanduser('~')
success = False
while success == False:
    try:
        client = mpd.MPDClient()
        client.connect("localhost", 6600)
        success = True
    except:
        time.sleep(5)
        success = False
try:
    last_song = client.currentsong()['file']
    last_status = client.status()['state']
    artist = client.currentsong()['artist']
    album = client.currentsong()['album']
    title = client.currentsong()['title']
    if os.path.exists('%s/.covers/%s-%s.jpg'%(home,artist,album)):
        os.popen('notify-send -i "%s/.covers/%s-%s.jpg" "%s" "%s"'%(home,artist,album,artist,title))
    else:
        os.popen('notify-send -i sonata "%s" "%s"'%(artist,title))
except:
    pass
    last_song = ""
    last_status = ""
while True:
    try:
       currentsong = client.currentsong()['file']
       status = client.status()['state']
    except:
       currentsong = ""
       status = last_status
    if last_status != status:
        try:
            if status == "play":
                comment = "media-playback-start" + " MPD Playing"
            elif status == "pause":
                comment = "media-playback-pause" + " MPD Paused"
            else:
                comment = "media-playback-stop" + " MPD Stopped"
            os.popen('notify-send -u critical -t 10 -i %s'%comment)
            if status == "play":
                for file_type in ('jpg','png','bmp','gif'):
                    if os.path.exists('%s/.covers/%s-%s.%s'%(home,artist,album,file_type)):
                        os.popen('notify-send -i "%s/.covers/%s-%s.%s" "%s" "%s"'%(home,artist,album,file_type,artist,title))
                        break

                else:
                    os.popen('notify-send -i sonata "%s" "%s"'%(artist,title))
            last_status = client.status()['state']
        except:
            pass
    if last_song != currentsong:
        try:
            artist = client.currentsong()['artist']
            album = client.currentsong()['album']
            title = client.currentsong()['title']
            if os.path.exists('%s/.covers/%s-%s.jpg'%(home,artist,album)):
                os.popen('notify-send -i "%s/.covers/%s-%s.jpg" "%s" "%s"'%(home,artist,album,artist,title))
            else:
                os.popen('notify-send -i sonata "%s" "%s"'%(artist,title))
            last_song = client.currentsong()['file']
        except:
            pass

    time.sleep(1)

Lo guardamos como mpdnotify.py y le damos permisos para ejecutarse. Para usarlo python mpdnotify.py &
Como dije hay otros, pero este fue el que funciono.

Recordatorios

Quizá la tarea mas simple y primordial que pueden hacer estas notificaciones. Uno de los métodos puede ser este:

sleep 6s && notify-send -t 10000 -u critical "remember to think" &

Cambiando lo que esta entre comillas, con lo que queremos recordar. Otra manera, con sonido incluido es esta:

#!/bin/bash
msg=$(zenity --entry --title=$rem --text="Task to remind")
tim=$(zenity --entry --title=$rem --text="Time to wait")
rem="Reminder"
remind_icon="~/remind.png"
say_on_every="Ding Ding Ding, time is up."
espeak -a 200 -p 90 -s 155 -k10 -w ~/remind.wav "$say_on_every $msg"
notify-send -i $remind_icon $rem "Reminder set for $msg in $tim"
(sleep $tim && notify-send -i $remind_icon $rem "$msg" && aplay ~/remind.wav) &

Cambiando lo parametros de remind_icon y say_on_every al gusto de cada quien.

Este post ha sido mas de lo que esperaba, y solo son algunas cosas que se pueden hacer con estas notificaciones. ¿Ustedes tienen los propios? Opinen y compartan.

Adéu

Anuncios

18 Respuestas a “Jugando con notify-send en Arch Linux

  1. kismet julio 31, 2010 en 3:59 am

    añado otra alternativa minimalista: dzen

  2. vIrGiLiO-kun julio 31, 2010 en 6:55 pm

    las notificaciones pintan mejor que las que trae ubuntu 😀

  3. Iyán Méndez Veiga agosto 1, 2010 en 7:32 am

    Muy bueno el post! Me ha encantado. La verdad es que no estaba muy al día en esto de las notificaciones. De momento me quedo con Colibri. 🙂

    Un saludo!

  4. Wagner agosto 1, 2010 en 8:45 am

    me gusto el post, quiero darla mas caña a esto, para ver si hago pequeños notificadores, como por ejemplo, conectar un memory stick al sistema.

  5. Cristina agosto 1, 2010 en 9:35 pm

    ¡Ay chiquito! esto me gusto. Algo así andaba buscando. Me vino de perlas. Gracias.
    Bien, así es como lo hice desde Ubuntu:
    a) Instale:

    sudo apt-get install openbox libnotify-bin

    Desinstale después openbox, reinicie y seguía funcionando notify-send. Creo que no era necesaria, ya me dirás.
    b) Use el enviar mensajes con la linea de comando alert y los script send y el que tiene sonido.
    c) Guarde los scripts en: ~/.gnome2/nautilus-scripts
    d) Agregue esa linea de comando y los script al ~/.bashrc como alias, solo así los podía llamar como tu dijiste.
    Las lineas que agregue:

    alias alert='notify-send -i gnome-terminal \
     "[$?] $(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s/;\s*alert$//'\'')"'
    alias send='sh /home/`whoami`/.gnome2/nautilus-scripts/send.sh'

    alias heycarinio='sh /home/`whoami`/.gnome2/nautilus-scripts/notificacion-sonido.sh'

    • x_fausto agosto 1, 2010 en 10:39 pm

      Solo comente lo de openbox, por que es el entorno que estoy usando, en teoría se puede en cualquier realizar en cualquier gestor de ventanas con notificaciones.

      Buenas anotaciones al poner tu configuración 😀

      • Cristina agosto 1, 2010 en 11:08 pm

        🙂

        Ahora que estoy toqueteando scripts, me sirve para hacer algo bonito.

        Pues que bueno que no necesite de openbox, tengo el disco tan lleno que no tienes idea.

        Saludos

  6. Kureno agosto 1, 2010 en 11:52 pm

    Joo… Yo hace poco (cosa de 1 mes) intenté con notify-osd -aunque no recuerdo que versión bajé del AUR-, y como no pude moverla de lugar (de arriba-derecha a abajo-derecha), la mandé far way y regresé al notification-daemon y no lo he intentado nuevamente. ¿La versión de n-osd que mencionas si se puede mover a la posición que se desee?

    Tengo que probar esto, de todas formas. Gracias por el tip.

  7. Rodaimos agosto 2, 2010 en 3:14 pm

    Interesante. Yo hace tiempo estuve también probando el tema de las notificaciones. Pero al final acabé desarrollando mi propio “loli-notificador”, que queda mucho más friqui y siempre deja a los amigos “impresionados” XD Aquí están los enlaces donde explico como se hace:
    http://rodaimos.blogspot.com/2010/06/el-notificador-del-bot-1.html
    http://rodaimos.blogspot.com/2010/06/el-notificador-del-bot-2.html

  8. Belhor agosto 7, 2010 en 9:32 pm

    Alguna vez había hecho lo propio con el libnotify en Ubuntu y la verdad resulta ser muy útil.

    Excelente Post.

  9. Pingback:[Tutorial] notify-osd en Archlinux « El blog de Iyan

  10. Pingback:[Tutorial] notify-osd en Archlinux

  11. Pingback:Thalskarth's Maëlstrom

  12. Alexander Anderson octubre 20, 2010 en 5:29 pm

    Que onda oye gran post!! 😀 magnifico solo de pura casualidad me podrías ayudar a hacer un script para hacer lo que hiciste con el MPD pero con el VLC?? estaría magnífico. Buen post!!

  13. Pingback:Script para enviar notificaciones mediante notify-send « Travesuras

  14. Yoburtu marzo 21, 2011 en 11:23 am

    Interesante post. Por cierto, estoy viendo que las notificaciones del pidgin no están conectadas con el notification daemon, como en Ubuntu con el notify-osd. ¿Sabes que hay que hacer para que activar las notificaciones en Pidgin?. Saludos.

A %d blogueros les gusta esto: