Este artigo é para aqueles que, como eu, usam gerenciadores de janela alternativos.
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