giovedì 22 agosto 2013

Hot Corner in XFCE/LXDE

Abituato (per non dire assuefatto) agli "hot corner" di KDE quando mi trovo ad utilizzare desktop diversi, come LXDE o XFCE, spesso istintivamente sposto il puntatore del mouse negli angoli alti dello schermo a destra o sinistra, rispettivamente per tornare velocemente al desktop o per visualizzare l'elenco delle finestre aperte. Ma ovviamente non accade nulla di tutto questo :-)
"Hot corner", per chi non lo sapesse, è una funzione molto utile che permette di avviare determinati comandi e attività portando semplicemente il cursore del mouse verso gli angoli del nostro desktop.
Desideroso quindi di poter disporre di tale meccanismo anche al di fuori di KDE ho fatto alcune ricerche in rete e ho trovato un programma che fa esattamente al caso mio, brightside.

Una volta presente nei repo ufficiali di Fedora, il pacchetto è stato successivamente rimosso in seguito alla chiusura del progetto (anche lo stesso sito non è più raggiungibile da tempo). Anche se lo sviluppo è completamente fermo oramai da parecchi anni il programma, da quel che ho visto, continua comunque a funzionare bene.
Potete prelevare brightside dal mio repo su OBS, qui.
Gran parte del merito per la realizzazione di questo pacchetto va ad un altro utente di OBS Huaren Zhong, package maintainer molto attivo che vanta nel suo repo personale oltre 1.300 pacchetti! Io ho semplicemente importato il suo lavoro e applicato alcuni piccolo fix.

Dopo aver eseguito l'installazione, configuriamo il comportamento degli hot corner lanciando:
$ brightside-properties
Come potete vedere la procedura di configurazione è estremamente semplice e intuitiva: è sufficiente per ogni angolo dello schermo selezionare l'azione che desideriamo venga eseguita. Il programma offre già alcune attività predefinite (avvio dello screensaver, disattivazione dello schermo, mostra desktop, ecc.) oltre alla possibilità di immettere dei comandi personalizzati.

Ora ci manca solo di impostare l'avvio automatico del demone brightside; un metodo valido sia per XFCE che LXDE è il seguente:
$ mkdir -p $HOME/.config/autostart
$ cp /usr/share/applications/fedora-brightside.desktop $HOME/.config/autostart
$ sed -i 's/brightside-properties/brightside/' $HOME/.config/autostart/fedora-brightside.desktop
 

giovedì 8 agosto 2013

Accensione automatica del pc con RTC Alarm

RTC Alarm è un'interessante caratteristica, presente in tutte le motherboard oramai da parecchi anni, che permette di programmare in maniera automatica l'accensione dei nostri pc in date e orari da noi prestabiliti.
Mentre in passato era in genere possibile accedere direttamente alle impostazioni di RTC Alarm tramite la sezione Power Management del BIOS, i produttori di schede madri al giorno d'oggi sembra che preferiscono tenerle 'nascoste', nonostante continuino comunque a supportarle.

In Linux è possibile programmare facilmente il 'wakeup' automatico delle nostre macchine, bypassando l'accesso al BIOS, tramite l'utility rtcwake.
Gli utilizzatori di Fedora non avranno bisogno di installare questo programma, perché è sicuramente già presente facendo parte del pacchetto util-linux, assolutamente essenziale in un sistema GNU/Linux
I parametri da passare al programma sono fondamentalmente due: il tipo di standby e data e ora in cui il pc dovrà ripartire.
Le modalità di standby impostabili sono le seguenti: standby, memfreeze, disk, off, no, on, disable e  show. 
Quella che preferisco e che in genere utilizzo è no. Con questa opzione semplicemente impostiamo l'orario del wakeup senza che venga attivata nessuna modalità di sospensione, il che significa che una volta dato il comando possiamo continuare a lavorare. Quando decideremo di chiudere la nostra sessione di lavoro lo faremo selezionando Iberna dal menu di logout del nostro display manager (gdm, kdm, lxdm ecc.) e non Spegni. Questo servirà a rendere effettiva la nostra accensione programmata.
Se non stiamo lavorando in X ma in un tty, dovremo allora spegnere il nostro pc con pm-hibernate oppure systemctl hibernate (da eseguire come utente root).
Per dettagli sulle altre modalità di standby vi invito a consultare direttamente il manuale di rtcwake (man rtcwake)
Il secondo parametro, come dicevamo, è l'effettivo orario di wakeup: il programma richiede che tale parametro sia formattato secondo lo Unix Time (o Posix Time), un sistema di rappresentazione del tempo largamente utilizzando nei sistemi Unix e Unix-like (come Linux) che si basa sul numero di secondi trascorsi a partire dalle ore 00:00:00 del 01 gennaio 1970 (la cosiddetta Unix Epoch).
La conversione del tempo in Unix time è estremamente semplice grazie al comando date e la sua opzione %s. Ad esempio, per visualizzare l'ora attuale del sistema in Unix time basta dare:
 $ date +%s
1375909919
Possiamo verifichiamo a cosa effettivamente corrisponde  "1375909919" dando:
$ date -d @1375909919
mer  7 ago 2013, 23.11.59, CEST
Ipotizziamo di voler programmare l'accensione della nostra macchina alle ore 8.00 di domani mattina; per calcolare il corrispondente Unix Time daremo:
$ date +%s -d 'tomorrow 08:00'
1375941600
Attiviamo quindi RTC alarm con:
# rtcwake -a -m no -t 1375941600
rtcwake: wakeup using /dev/rtc0 at Thu Aug  8 06:00:01 2013
Il fatto che il comando ci restituisca come orario "06:00" anziché "08:00" non è un errore come potrebbe sembrare. È semplicemente la rappresentazione secondo il Tempo Coordinato Universale o UTC ovvero il fuso orario di riferimento da cui si calcolano tutti gli altri fusi orari del mondo (a sua volta derivato dal GMT ( Greenwich Mean Time o Greenwich Meridian Time) e che systemd utilizza di default per l'orologio hardware del pc.
Per verificare la correttezza dell'orario di wakeup in base alle impostazioni locali della nostra macchina diamo:
# rtcwake -m show -l
alarm: on  Thu Aug  8 08:00:01 2013
che ci conferma che tutto è stato settato correttamente. Ricordiamoci di spegnere il nostro pc ibernandolo, per rendere attivo RTC Alarm.
A questo punto, compreso il meccanismo, diventa semplice scrivere degli script personalizzati in base alle nostre necessità: eccone ad esempio uno (da eseguire come root ogni giorno prima dello spegnimento) che programma il wakeup ogni mattina alle ore 07:45 del giorno successivo (esclusivamente dal lunedì al venerdì), in modo che al nostro arrivo in ufficio il pc sia acceso e pronto all'uso:
#!/bin/sh
if [[ $(date +%u) -gt 4 ]]; then
        DATE=$(date +%s -d 'next Monday 07:45')
else
        DATE=$(date +%s -d 'tomorrow 07:45')
fi
/sbin/rtcwake -a -m no -t $DATE
Qui potete trovare un dettagliato articolo sulla sintassi del comando date, in particolare per come indicare con facilità date future.