View Single Post
Old 18-11-2005, 16:11   #1
cerbert
Senior Member
 
L'Avatar di cerbert
 
Iscritto dal: Feb 2001
Città: Torino
Messaggi: 11769
Script per cambiare sfondo automaticamente su gnome 2

Ciao a tutti,
dopo mesi di ricerca, insoddisfatto dai vari programmini datati, dalle gdesklets beta, dal dover sopprimere nautilus come gestore del desktopbkg nonostante le sue funzioni utili, mi sono finalmente chiesto: "ma non è che sto sbagliando tutto e la soluzione è più semplice di quanto credo?".
Ebbene, come per il 99% delle cose che riguardano Linux... lo era.
Quanto segue è il risultato della consultazione di due man e dell'help di gnome.

Codice:
#!/bin/bash

declare -i LAST_WP=`cat /home/cerbert/.last_wallpaper`
declare -i WP_SIZE
declare WP_STYLE
declare -a lista_files
WP_PATH=/home/cerbert/documents/immagini/wallpapers/
lista_files=(`ls $WP_PATH`)

if [ $LAST_WP -ge ${#lista_files[*]} ]
then
	LAST_WP=0
fi

IMAGE_FILE=${lista_files[$LAST_WP]}
THIS_WP=$[LAST_WP+1]

echo $THIS_WP > /home/cerbert/.last_wallpaper

WP_SIZE=`/usr/bin/identify -format %h $WP_PATH$IMAGE_FILE`

if [ $WP_SIZE -ge 750 ]
then
WP_STYLE="scaled"
else
WP_STYLE="centered"
fi

gconftool-2 -s "/desktop/gnome/background/picture_options" --type string $WP_STYLE -s "/desktop/gnome/background/picture_filename" --type string $WP_PATH$IMAGE_FILE

unset lista_files
Cosa fa?
Molto semplice:


Codice:
declare -i LAST_WP=`cat /home/cerbert/.last_wallpaper`
dichiara una variabile e la riempie con un numero scritto in un file apposito.

Codice:
declare -a lista_files
WP_PATH=[percorso assoluto della cartella dove tenete i wallpapers]
lista_files=(`ls $WP_PATH`)
dichiara un array e lo riempie con tutti i nomi files presenti in una cartella apposita . Due accorgimenti:
1) i nomi devono essere regolari, niente spazi ne caratteri strani.
2) non ci devono essere null'altro che immagini

Codice:
if [ $LAST_WP -ge ${#lista_files[*]} ]
then
	LAST_WP=0
fi
controlla che l'indice dell'immagine che vogliamo caricare non sia superiore al numero di immagini presenti nella cartella. Altrimenti riparte dalla prima (indice 0)

Codice:
IMAGE_FILE=${lista_files[$LAST_WP]}
THIS_WP=$[LAST_WP+1]
Ricava il nome dell'immagine all'indice, incrementa poi di uno l'indice (i nomi delle variabili non sono proprio corretti, ma abbiate pazienza, avevo cambiato il codice in corso d'opera).

Codice:
echo $THIS_WP > /home/cerbert/.last_wallpaper
Registra l'indice aggiornato nel file in modo che non si reinizi sempre da 0 ad ogni riavvio.

Codice:
WP_SIZE=`/usr/bin/identify -format %h $WP_PATH$IMAGE_FILE`

if [ $WP_SIZE -ge 750 ]
then
WP_STYLE="scaled"
else
WP_STYLE="centered"
fi
Grazie al comando "identify" facente parte del pacchetto ImageMagick (ATTENZIONE: NON TUTTE LE DISTRIBUZIONI PORTANO IMAGEMAGICK DI DEFAULT. SE NON LO AVETE, SCARICATELO CHE E' DI MOLTO FIGO!!) con argomento -format %h ottiene l'altezza in pixel dell'immagine. Dopo di che fa un confronto con un parametro fisso (altezza standard della risoluzione schermo... immagino si possa anche ricavare con un comando, ma non ho voglia di sbattermi, tanto io la tengo sempre al massimo sul portatile :P ) e se l'immagine "sfora" imposta la modalità "scalata", se invece resta nei limiti, imposta la modalità "centrata" nella variabile che abbiamo preimpostato.

Codice:
gconftool-2 -s "/desktop/gnome/background/picture_options" --type string $WP_STYLE -s "/desktop/gnome/background/picture_filename" --type string $WP_PATH$IMAGE_FILE

unset lista_files
E finalmente setta il background tramite gconftool-2 impostandone anche il modo (scalato o centrato).
Quindi, per pulizia, cancella l'array.

Infine, come ultimo passo, nella crontab dell'utente andate a settare l'intervallo di escuzione che ritenete più opportuno, questo il mio (5 minuti):

Codice:
SHELL=/bin/bash
*/5 * * * * /home/cerbert/usr_scripts/ch_wp > /dev/null 2>&1
In una sera ho risolto un problema che mi assillava da mesi... certo, direte voi, di tempo da perdere ne ho.
__________________
Eroi da non dimenticare: Nicola Calipari (04/03/2005) e Vittorio Arrigoni (14/04/2011) e Bradley Manning.
Sono certo che anche i francesi si indignarono per il fatto che i tedeschi, piuttosto che veder dissolvere la loro nazione, preferirono il nazismo. Chi non impara la storia...

Ultima modifica di cerbert : 26-01-2006 alle 11:28.
cerbert è offline   Rispondi citando il messaggio o parte di esso