Mudar aleatoriamente o papel de parede no GNOME 3

Publicado por Anderson Weller (última atualização em 12/11/2014)

[ Hits: 4.585 ]

Download 6108.wallpaper.sh




Estava cansado de visualizar sempre a mesma imagem no desktop do meu Debian/GNOME, então resolvi montar um script que alterasse automaticamente meu papel de parede a cada 30 minutos.

Primeiro baixei vários arquivos JPG e os armazenei em um único diretório, e depois configurei o cron para executar este script de tempos em tempos.

No script abaixo, basta alterar o preenchimento da variável "DIR" e inserir o diretório onde estão as suas imagens JPG (caso suas imagens sejam de outro tipo, basta fazer a alteração).

Para configurar o cron, basta executar o comando abaixo como usuário comum:

$ crontab -e

E depois incluir a seguinte linha (com a localização do seu script e a localização de um arquivo de log) que irá agendar a execução do script a cada 30 minutos (obs.: faça as devidas alterações):

*/30 * * * * export DISPLAY=:0&&/home/anderson/wallpaper.sh >> /home/anderson/log/log_wallpaper.txt 2>&1

Algumas observações sobre o script:

- Ele cria um subdiretório "ok" para armazenar as imagens já utilizadas em seu desktop, evitando dessa forma a repetição de imagens (enquanto não forem utilizadas todas as outras);
- O nome dos arquivos são automaticamente alterados caso haja algum caractere de espaço para evitar erros no script (os espaços são substituídos pelo caractere de sublinhado "_");
- As imagens são configuradas com a opção "picture-options zoom" para que toda a área de trabalho seja preenchida, mas sem que hajam distorções na foto (pesquise outras opções e altere-a caso deseje).

Detalhes do ambiente que utilizo:

- GNOME 3.4.2
- Debian 7.7
- Kernel Linux 3.2.0-4-amd64

Abs.

  



Esconder código-fonte

#!/bin/bash

# Script para mudar randomicamente o papel de parede no Gnome a partir de arquivos em um diretório.
  # Referências:
  # http://www.webupd8.org/2009/11/3-lines-script-to-automatically-change.html
  # http://somethingididnotknow.wordpress.com/2012/02/04/make-your-own-picture-changing-wallpaper-in-gnome3/
  # http://ubuntuforums.org/archive/index.php/t-2179775.html

  # Revisão 01 (2014-11-10): Permitir utilizar arquivos cujos nomes possuam espaços em branco.

  # Cron executa este script a cada 30 min (Inserir a linha abaixo com o comando: $ crontab -e ):
  # */30 * * * * export DISPLAY=:0&&/home/anderson/wallpaper.sh >> /home/anderson/log/log_wallpaper.txt 2>&1

# Diretório contendo as imagens (BASTA MUDAR AQUI)
DIR="/home/anderson/Imagens/Wallpaper/Interfacelift/1366x768"

# Cria um diretório para armazenar as imagens já utilizadas (evitando repetições enquanto não acabarem as imagens)
cd $DIR
DIR_OK="ok"
if [ ! -d $DIR_OK ] ; then
    mkdir $DIR_OK
fi

# Caso tenham acabado todas as imagens (JPG), move-as novamente de volta para o diretório das imagens
NUM_ARQUIVOS=$(ls *.jpg | wc -w)
if [ $NUM_ARQUIVOS -eq 0 ] ; then
   mv -f ./$DIR_OK/*.jpg .
fi

# Seleciona um dos arquivos JPG aleatoriamente
PIC=$(ls *.jpg | shuf -n1)

# Se haviam espaços no nome do arquivo, então renomeie o arquivo para evitar problemas - Revisão 01
PIC2=$(echo $PIC | sed 's/ /_/g')
if [ "$PIC" != "$PIC2"  ] ; then
   mv -f "$PIC" $PIC2
fi

# Move o arquivo selecionado para outra pasta antes de utilizá-lo como "Papel de Parede"
mv -f $PIC2 ./$DIR_OK/

# Comando para mudar a imagem do papel de parede no Gnome
gsettings set org.gnome.desktop.background picture-options zoom
gsettings set org.gnome.desktop.background picture-uri file://$DIR/$DIR_OK/$PIC2

exit 0

Scripts recomendados

Logs do daemontools - tradução de timestamp

Pesquisar extensões

Shell scrip de monitoramento de rede

Copiar fotos da Canon S1X IS

Equacao de Segundo Grau em Dialog


  

Comentários
[1] Comentário enviado por moisespedro em 15/11/2014 - 19:06h

Uma pergunta: porque nao usar algo como o hsetroot ou o feh, que funcionam em TODOS os DEs/WMs?

[2] Comentário enviado por andersoncw em 15/11/2014 - 22:34h

Usei o 'gsettings' pois meu desktop é Gnome3, Essa sua ideia é muito boa. Não conhecia essas ferramentas, eu tenho que olhar mais com calma a funcionalidade delas. Abs.

[3] Comentário enviado por leonardo27 em 19/08/2017 - 23:52h

Muito bom, vou usar este script, só reparei uma coisinha ai.

# Caso tenham acabado todas as imagens (JPG), move-as novamente de volta para o diretório das imagens
NUM_ARQUIVOS=$(ls *.jpg | wc -w)
if [ $NUM_ARQUIVOS -eq 0 ] ; then
mv -f ./$DIR_OK/*.jpg .
fi

no if, como tem a pasta ok, ele nunca vai ser 0, só na primeira vez, então acredito que o correto seja.

if [ $NUM_ARQUIVOS -le 1 ] ; then
mv -f ./$DIR_OK/*.jpg .
fi
Neste caso se a quantidade de arquivo for <= 1 ele vai mover os arquivos novamente de volta para o diretório das imagens


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner
Linux banner
Linux banner

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts