Cambiare sfondo periodicamente con Ubuntu Unity

Stranamente Ubuntu Unity non prevede un meccanismo per cambiare lo sfondo periodicamente selezionando delle immagini da una cartella come invece è possibile fare su praticamente ogni altro desktop environment.

A questo è comunque possibile ovviare con facilità sfruttando il comando
gsettings
che permette di gestire da linea di comando molte delle impostazioni dell’interfaccia grafica.

Il comando per cambaire lo sfondo è molto semplice

gsettings set org.gnome.desktop.background picture-uri "file://<path to file>"

e potete testarlo con un’immagine a vostra scelta.

Il secondo obiettivo che ci eravamo posti è quello scegliere un’immagine casualmente un’immagine da una cartella. Si può fare in modo molto semplice con gli strumenti della shell unix. In primo luogo usiamo find per farci dare l’elenco dei file con i path assoluti, utilizziamo poi sort per mischiare casualmente l’eleco; sort, infatti, con l’opzione
-R restituisce un’ordinamento casuale. Usiamo infine
head
per selezionare il primo elemento della lista.

find <absolute path to image directory> |sort -R |head -1

Per combinare le due cose utiliziamo le variabili della shell

export SFONDO="$(find <absolute path to image directory>|sort -R |head -1)"; gsettings set org.gnome.desktop.background picture-uri \"file://${SFONDO}\"

L’ultimo cosa che ci rimane da fare è rendere periodica questa operazione. Per farlo useremo ovviamente
crontab
ma il comando così comè non funzionerebbe perché gsettings, per funzionare correttamente utilizza le variabili di ambiente e crontab crea un ambiente “anomalo” in cui molte di queste variabili o non sono definite o hanno valori specifici.

Per il nostro script ci serve il valore di
DBUS_SESSION_BUS_ADDRESS
. Possiamo vederne il valore con un semplice echo

echo $DBUS_SESSION_BUS_ADDRESS

Questa variabile permette a gsettings di sapere su quale ambiente grafico andare ad agire e deve essere letta “live” cambiando ad ogni sessione grafica. Per recuperarla bisogna fare un po’ di passi. In primo luogo
pgrep
ci permette di recuperare il PID del processo. Con questa operazione possiamo andare a recuperare il valore della variabile dalle informazioni in proc

export PID=$(pgrep gnome-session)
grep -z DBUS_SESSION_BUS_ADDRESS /proc/${PID}/environ

infine awk ci permette di separare il valore dal nome della variabile

grep -z DBUS_SESSION_BUS_ADDRESS /proc/${PID}/environ|awk -F= '{print $2"="$3}'

Non ci rimane che eseguire
crontab -e
ed inserire una riga con la schedulazione voluta ed i comandi

*/10 * * * *  export PID=$(pgrep gnome-session);export DBUS_SESSION_BUS_ADDRESS=$(grep -z DBUS_SESSION_BUS_ADDRESS /proc/${PID}/environ|awk -F= '{print $2"="$3}') ;export SFONDO="$(find <absolute path to image directory> |sort -R |head -1)"; gsettings set org.gnome.desktop.background picture-uri \"file://${SFONDO}\"

L’*/10 sta ad indicare che il comando deve essere eseguito ogni 10 minuti.

glusterfs – introduzione

GlusterFS è un filesystem distribuito.

Supera alcuni dei problemi storici di filesystem di rete come NFS e CIFS. In alcuni casi può essere utilizzato come alternativa ad un NAS; un NFS esportato da un NAS può infatti essere considerato affidabile ma se è un server ad esportare l’NFS, come a volte ci si trova a dover fare per ragioni economiche o perché ci si trova su cloud, difficilmente si potrà fare un grosso affidamento su questo sistema. Non è infatti possibile costruire un completamente ridondato con NFS. GlusterFS invece porta con se nativamente questa funzionalità.

GlusterFs comunque, ha tutta una serie di caratteristiche che lo rendono interessante

  1. E’ nativamente ridondabile ed possibile avere dei mount in HA: non più macchine congelate per un mount nfs che non risponde
  2. I suoi volumi possono essere fatti crescere o possono essere ristretti a caldo sfruttando la possibilità di distribuire i dati su più server o, meglio, su più brick
  3. I dati possono essere ridondati
  4. Si può aumentare la velocità di lettura replicando i dati su più server o quelle di lettura e scrittura sfruttando la funzionalità di striping
  5. Esporta anche con il protocollo NFSv3 per retrocompatibilità, ma è chiaramente meglio sfruttare il client nativo
  6. Ha una interessante funzionalità di replica geografica che permette di mantenere una copia asincrona sfruttabile per disaster recovery, backup o altro

Dopo aver definito dei pool di server affidabili, GlusterFS permette di aggiungere a dei volumi virtuali parti del filesystem dei server coinvolti denominate Brick. Non si lavora quindi con partizioni ma con directory all’interno di partizioni montate sul filesystem. Il tutto avviene in user space.

Il sito ufficiale è http://www.gluster.org/. Da qui si può scaricare l’ultima versione o in alternativa si possono utilizzare i pacchetti presenti in buona parte delle distribuzioni. Attualmente l’ultima versione stabile è la 3.5.2 e si sta lavorando al rilascio della versione 3.6.

Se si vuole una versione aggiornata sul sito ufficiale

http://download.gluster.org/pub/gluster/glusterfs/

è possibile scaricarla.
In alternativa alcune distribuzioni permettono di integrare la procedura nel proprio sistema di pacchetti. Ad esempio su ubuntu

sudo add-apt-repository ppa:semiosis/ubuntu-glusterfs-3.5
sudo aptitude update
sudo aptitude install glusterfs-server glusterfs-client

Il comando base per la gestione di glusterfs è gluster. Questo può essere eseguito direttamente con tutti i parametri come in

# gluster pool list

o, senza parametri, per accedere ad una consolle da cui gestire il cluster gluster:

# gluster
gluster> pool list

In entrambi i casi si otterrà un risultato analogo a

 
UUID					Hostname	State
dee79aaa-6042-4bc6-a17a-27e4944db3c9	localhost	Connected 

che ci informa che il solo localhost è nel pool di server che possono essere coinvolti nella formazione dei volumi.

Si consigli di l’esecuzione di

gluster help

per avere un’idea di quello che è possibile fare.

In un prossimo articolo vedremo alcuni esempi di configurazione.