11/03/2010 - 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 6111 volte | Commenti (7) | 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..

Commento postato da danny il 08/05/2009
ciao, ho bisogno di aiuto prima di uscire completamente pazzo... ho seguito la guida passo passo... lo script risulta corretto ed eseguibile, ma sono ore (non so più quante) che perdo il cervello appresso al crontab... ho provato di tutto... i tentativi che mi sembravano più corretti erano "# 15 13 * * * usr/local/bin/sveglia #SVEGLIA" e "30 13 * * * usr/local/bin/sveglia #SVEGLIA" anche nelle varianti senza "#SVEGLIA". Le ho provate tutte, aiutatemi a capire cosa ho sbegliato prima che butti il computer nell'arno plis!

Commento postato da gts il 20/06/2009
se volessi usare vlc come modifico il file?

Commento postato da Roman10 il 04/12/2009
Che dire... sei un grande!

Commenta Post

(opzionale)
(opzionale)


Codice antispam: Codice antispam