08/08/2008 - Linux Feed

LINUX « E-Pillole



Cron + Rhythmbox + Scriptino = Sveglia

Post inserito il 19/10/2007 da Fede in Easy Tricks

Alzarsi presto al mattino è sempre un "problema" a qualisiasi età. Svegliarsi poi con il rumore fastidioso e incessante della sveglia (il classico bip biip biiip ad intesità crescente) è davvero angosciante e non rende di certo il risveglio piacevole :)

Una comoda soluzione a questa avversione nei confronti dell'alzata mattutina è quella di utilizzare la propria "linux box" come sveglia, e aprire ogni giorno gli occhi sotto le note della propria canzone preferita del momento...

sveglia

Supponendo di avere una qualsiasi distribuzione Linux installata (ovviamente sempre up & running), Gnome come DE, e un "dispositivo" audio colleggato al PC, preferibilmente uno stereo con un timer per l'accensione e un livello di volume potenzialmente bello alto (sempre meglio non rischiare) :) vediamo come procedere...

Avendo scelto Rhythmbox come player multimediale, il nostro fine è quello di eseguire, nei giorni che ci interessano e ad un determinato orario (dicesi cronjob), questo comando:

rhythmbox-client --play-uri=/percorso/canzone/sveglia.ogg|mp3

Per qualsiasi info, nel caso vogliate eseguire un comando differente (magari per caricare una playlist o altro), fate riferimento alle sempre utili man pages:

man rhythmbox

man rhythmbox-client

Chiaro il comando, per eseguire periodicamente il nostro cronjob (sveglia) ci affidiamo all'intramontabile Cron, installato di default su qualsiasi distribuzione Linux e sempre running in background, pronto a ricevere istruzioni per "schudelizzare" qualsiasi tipo di operazione gli venga assegnata.

In sintesi, oltre ad un crontab di sistema, ogni utente possiede il proprio, consultabile digitando in un terminale:

crontab -l

Se ancora non avete impostato nessun cronjob per il vostro utente visualizzarete quanto segue:

# m h  dom mon dow   command
no crontab for user

che potremmo rendere più comprensibile in questo modo :)

# m h dom mon dow   command

  * * * * * /percorso/assoluto/comando # COMMENTO
  | | | | |
  | | | | |---> Giorno della settimana (0-7) (0 = domenica)
  | | | |-----> Mese (1-12)
  | | |-------> Giorno del mese (1-31)
  | |---------> Ora (0-23)
  |-----------> Minuto (0-59)

Abbastanza semplice no...?? Per approfondire l'argomento e per ulteriori info su Cron, qui, qui, e qui trovate diversi esempi utili e molti più dettagli ;)

Ma torniamo ora alla nostra sveglia...

Noto il comando, e chiarito il funzionamento di chi ne permetterà l'esecuzione, supponendo di volersi svegliare tutti i giorni, dal lunerdi al venerdi, alle 7:15 del mattino, l'istinto suggerirebbe di creare un cronjob per il nostro utente digitando:

crontab -e

ed inserendo alla prima riga vuota disponibile:

15 7 * * 1-5 /usr/bin/rhythmbox-client --play-uri=/percorso/canzone/sveglia.ogg|mp3

Purtroppo però, dato che cron gira in un suo piccolo ambiente isolato, non ha modo di reperire direttamente la variabile DBUS_SESSION_BUS_ADDRESS necessaria per "comunicare" con rhythmbox e visualizzabile digitando:

echo $DBUS_SESSION_BUS_ADDRESS

Come si può intuire, il contenuto di tale variabile cambierà ogni qual volta riavvierete, e sarebbe dunque inutile, nonchè noioso, inserirlo direttamente nel nostro comando :)

Per risolvere il "problema", come comando in cronjob utilizzeremo uno script in bash semplice semplice e sicuramente migliorabile, che posizioneremo all'interno della cartella /usr/local/bin/ e che chiameremo "ovviamente" sveglia :)

sudo gedit /usr/local/bin/sveglia

#!/bin/bash

user=`whoami`
pid=`pgrep -u $user gnome-panel`

for dbusenv in $pid; do
	DBUS_SESSION_BUS_ADDRESS=`grep -z DBUS_SESSION_BUS_ADDRESS \
	/proc/$pid/environ | sed -e 's/DBUS_SESSION_BUS_ADDRESS=//'`
	
	DBUS_SESSION_BUS_ADDRESS=$DBUS_SESSION_BUS_ADDRESS \
	rhythmbox-client --play-uri=/percorso/canzone/sveglia.ogg|mp3
done

exit 0

N.B Naturalmente, sostituite /percorso/canzone/sveglia.ogg|mp3 con il percorso assoluto della canzone che volete riprodurre, e ricordatevi di anteporre un \ (backslash) ad ogni eventuale spazio (ex. /media/STORAGE/MUSIC/CD/Coldplay/A\ Rush\ of\ Blood\ To\ The\ Head/Coldplay\ -\ Green\ Eyes.ogg).

Appoggiandoci quindi al processo gnome-panel (sempre attivo in ambiente Dekstop Gnome e abbastanza affidabile per essere parte integrante della nostra sveglia), permetteremo a cron di recuperare la variabile DBUS_SESSION_BUS_ADDRESS e di usarla per eseguire il nostro comando.

A questo punto, non ci rimane altro da fare che rendere eseguibile lo scriptino appena creato:

sudo chmod +x /usr/local/bin/sveglia

editare il nostro crontab:

crontab -e

ed inserire quanto segue:

15 7 * * 1-5 /usr/local/bin/sveglia # SVEGLIA

Una volta salvato il crontab per il proprio utente, se non ci sono errori, verrà mandato in output il seguente messaggio:

crontab: installing new crontab

e la nostra sveglia sarà finalmente pronta per darci il buongiorno ogni mattina e all'orario prestabilito :)

P.S. declino ogni repsonsabilità per eventuali ritardi ad appuntamenti importanti o sul posto di lavoro...quindi testate più volte lo script ed il suo fuzionamento in accoppiata con cron prima di fidarvi completamente di un computer ;)

Per concludere, vorrei segnalare gnome-schedule, un ottimo tool grafico per una gestione ancor più semplcie dei propri cronjobs in ambiente gnome. Se utilizzate Debian o Ubuntu, gnome-schedule è disponibile per tutte le release, rispettivamente nelle repository main e universe, ed installabile digitando motlo semplicemente:

sudo apt-get install gnome-schedule

E' tutto, scegliete la vostra canzone del momento, selezionate l'orario e buon risveglio...!!!


Post letto 2029 volte | Commenti (4) | Bookmark   del.icio.us    segnalo


Commento postato da dedalonet il 19/10/2007
scusa la mia ignoranza ma questa procedura si attiva a computer spento o è necessario che il pc sia acceso, poichè exaile ha un plugin che fa una cosa analoga ma a pc acceso.
grazie

Commento postato da Fede il 19/10/2007
@dedalonet

>>Supponendo di avere una qualsiasi distribuzione Linux installata (ovviamente sempre up & running)...

è necessario che il pc sia acceso...
fortunatamente posso non spegnerlo mai (solo riavvi) :)

l'avevo provato tempo fa exaile ma non mi aveva colpito particolarmente, quindi ero rimasto con Rhythmbox :)

mi hai fatto venire il dubbio che possa esistere un plugin anche per Rhythmbox eheheh -.-

beh, poco male, ho imparato un paio di cosette nuove...

p.s. se qualcuno conosce un plugin anche per Rhythmbox son tutto orecchie ^__^

ciaociao

Commento postato da Maurizio il 23/10/2007
Tempo fa avevo fatto una cosa simile usando semplicemente mpg123. Per risolvere il problema del PC sempre acceso è sufficiente far avviare il PC dal bios qualche minuto prima dell'avvio della sveglia.

Commento postato da davide il 20/11/2007
grande, bellissima guida complimenti!
io usando exaile ho usato il comando "exaile -n" che suona la prossima canzone in scaletta, cosi settando l'opzione "casuale", faccio suonare ogni mattina una canzone diversa presa da una playlist di canzoni ad-hoc per il risveglio..

Commenta Post

(opzionale)
(opzionale)


Codice antispam: Codice antispam