A maior parte das pessoas que entram no maravilhoso mundo livre do GNU/Linux ou fica nadando no rasinho da piscina – digo, KDE e Gnome – ou mergulha na escuridão negra da linha de comando…
Poucos são os que exploram saídas alteranativas, como ambientes desktop mais leves ou combinações de aplicações gráficas e gerenciadores de janela.
Nesses casos, há algumas aplicações que gerenciam papel de parede, como
xv
, xsetroot
e wmsetbg
.Pessoalmente prefiro usar
wmsetbg
, que faz parte do pacote do Window Maker, mas pode ser usado com qualquer gerenciador de janela. Algumas vantagens são a flexibilidade para lidar com imagens e permitir recursos de transparência dos gerenciadores de menu.Sabendo disso, uma coisa legal que podemos fazer com Shell é escolher um papel de parede aleatório a cada login.
Vamos aqui criar um script que faça isso.
O script deve começar indicando qual o interpretador a ser usado:
#!/bin/bash
Vamos agora listar as imagens que queremos em uma variável. Vamos chamá-la
IMGLIST
.A ideia aqui é listar os diretórios onde estarão as imagens:
IMGLIST=$(
ls \
/home/Imagens/OndeEhOParaiso/*.jpg \
/home/Imagens/OndeEhOParaiso/*.png \
/home/Imagens/Virtual/*.jpg \
/home/Imagens/Virtual/*.png \
/home/Imagens/Wallpapers/*.jpg \
/home/Imagens/Wallpapers/*.png \
/home/Imagens/digitalblasphemy/*.jpg \
/home/Imagens/digitalblasphemy/*.png \
/home/Imagens/heise.de/*.jpg \
/home/Imagens/heise.de/*.png \
2>/dev/null
)
A estrutura
$(…)
levanta um sub-shell e retorna sua saída padrão.Agora precisamos determinar o tamanho da lista para podermos escolher um índice:
LENGTH=$(wc -l <<< "$IMGLIST")
Temos novamente o sub-shell. O comando
wc
conta caracteres, palavras e linhas, com a opção -l
, apenas linhas. Como cada linha em IMGLIST
representa uma imagem, contanto as linhas, contamos as imagens.Em
bash
, <<<
retorna o conteúdo de uma string como um arquivo virtual, de forma semelhante a <<EOF
.Podemos agora escolher aleatoriamente um índice, maior ou igual a um e menor ou igual à quantidade de imagens.
Para isso usaremos dois recursos: o ambiente aritmético do
bash
, ((…))
, e a variável especial RANDOM
, que retorna um valor aleatório entre zero e 32767:((IMGINDEX = (RANDOM * LENGTH / 32768) + 1))
Por final, podemos usar uma combinação dos comandos
tail
e head
.O comando
tail
seleciona todo o «arquivo» a partir de uma determinada linha, e o comando head
seleciona n linhas do começo do «arquivo»:IMGFILE=$(tail +$IMGINDEX <<< "$IMGLIST" | head -n1)
Tendo selecionado a imagem e armazenado seu path na variável
IMGFILE
, basta carregá-la como papel de parede:wmsetbg -s "$IMGFILE"
E está pronto nosso script!
Para usá-lo podemos colocá-lo como parte do conteúdo de
~/.xinitrc
, ou carregá-lo a partir de ~/.xinitrc
com o comando source
, ou ainda ajustar o arquivo como executável e chamá-lo a partir do startup do geranciador de janelas escolhido.[]'s
Cacilhas, La Batalema