Usando timers systemd para alterar o wallpaper da área de trabalho aleatoriamente
Olá amigos, este é meu primeiro artigo para a comunidade VOL e estou muito feliz em poder fazê-lo. Neste texto vou demonstrar como executar um script changeWallpaper.sh utilizando timers e services na inicialização do sistema para alterar o papel de parede da área de trabalho aleatoriamente.
Introdução
Neste texto vou demonstrar como executar um script changeWallpaper.sh utilizando timers e services na inicialização do sistema para alterar o papel de parede da área de trabalho aleatoriamente.
De acordo com a Wiki do Archlinux, sistema que utilizei para elaboração deste material, em https://wiki.archlinux.org/index.php/Systemd_(Português)/Timers_(Português), timers são arquivos de unit do systemd, com extensão .timer, utilizados para controlar .services, ou seus eventos, e podem ser utilizados como substituto ao Cron, ou seja para cada arquivo .timer, existe um arquivo .service.
chmod +x changeWallpaper.sh
Neste material o diretório escolhido foi usr/bin/ por conveniência.
Contudo, timers, services e scripts são ferramentas poderosas presentes nos sistemas Linux e devem ser utilizadas com responsabilidade.
Tio Ben já dizia.
De acordo com a Wiki do Archlinux, sistema que utilizei para elaboração deste material, em https://wiki.archlinux.org/index.php/Systemd_(Português)/Timers_(Português), timers são arquivos de unit do systemd, com extensão .timer, utilizados para controlar .services, ou seus eventos, e podem ser utilizados como substituto ao Cron, ou seja para cada arquivo .timer, existe um arquivo .service.
Criando o script changeWallpaper.sh
Você pode definir onde salvar este arquivo, apenas certifique-se de dar permissão de execução com o comando:chmod +x changeWallpaper.sh
Neste material o diretório escolhido foi usr/bin/ por conveniência.
#!/bin/bash
#Você pode definir uma variável de ambiente WALLPAPER_PATH_DIR para seu diretório de imagens
wallpaper_dir=$WALLPAPER_PATH_DIR
#Verificando a existência de diretórios de Imagens
ver=true
if [[ -d $wallpaper_dir ]]; #verifica se a variável de ambiente foi criada e se o diretório é válido
then
echo "#configurando dir_path com PATH do diretório $wallpaper_PATH_DIR"
dir_path=$wallpaper_dir
elif [[ -d $HOME/.wallpapers ]]; #verifica se o diretório /home/User/.wallpapers existe e se o diretório é valido
then
echo "# configurando dir_path com PATH diretório home/user/.wallpapers"
dir_path=$HOME/.wallpapers
elif [[ -d $(xdg-user-dir PICTURES)/wallpapers ]]; #verifica se diretório padrão Imagens/wallpapers existe e se o diretório é valido
then
echo "# configurando dir_path com PATH diretório home/user/Imagem/wallpapers"
dir_path=$(xdg-user-dir PICTURES)/wallpapers
else
ver=false #Caso nenhum diretório acima seja encontrado
echo "Crie o diretório $(xdg-user-dir PICTURES)/wallpapers ou $HOME/.wallpapers ou configure a variável de ambiente com seguinte comando export WALLPAPER_PATH_DIR=path_para_seu_diretório"
fi
#Configurando o wallpaper aleatoriamente
if [[ $ver = true ]]; #verifica se o diretório de imagens foi encontrado
then
cd "$dir_path"
#Configurando wallpaper com PATH do wallpaper
wallpaper=$dir_path/$(find . -type f |shuf -n 1) #Seleciona um arquivo aleatoriamente no diretório $dir_path ou seus subdiretórios
if [[ -f $wallpaper ]]; #Verifica se o arquivo wallpaper "é um aquivo valido"
then
echo "Configurando wallpaper $wallpaper"
gsettings set org.gnome.desktop.background picture-uri "$wallpaper" #Utiliza o gsettings para configurar o $wallpaper como papel de parede da área de trabalho
else
echo "$dir_path/$wallpaper não é um arquivo válido"
fi
fi
Criando o arquivo changeWallpaper.service
Existem vários diretórios onde você pode salvar este arquivo de acordo com o escopo de usuários do sistema, para configurar apenas para o usuário local salve no diretório /home/user/.config/systemd/user/:
[Unit]
Description=Serviço de mudança de wallpaper aleatoriamente
[Service]
Type=oneshot
Environment=DISPLAY=:0
ExecStart=changewallpaper.sh
[Install]
WantedBy=gnome-session-initialized.target #configura o serviço para ser executado na inicialização do sistema, você pode ver outras opções com o comando systemctl --user list-units --type=target
Description=Serviço de mudança de wallpaper aleatoriamente
[Service]
Type=oneshot
Environment=DISPLAY=:0
ExecStart=changewallpaper.sh
[Install]
WantedBy=gnome-session-initialized.target #configura o serviço para ser executado na inicialização do sistema, você pode ver outras opções com o comando systemctl --user list-units --type=target
Criando o arquivo changeWallpaper.timer
Este arquivo deve estar localizado no mesmo diretório do arquivo changeWallpaper.service.
[Unit]
Description=Timer de mudança de wallpaper aleatoriamente
[Timer]
OnCalendar=*:0/5 #configura o tempo de execução
Persistent=true
Unit=change-wallpaper.service #define o serviço a ser executado
[Install]
WantedBy=change-wallpaper.service #espera a execução do serviço para inicializar novamente
Description=Timer de mudança de wallpaper aleatoriamente
[Timer]
OnCalendar=*:0/5 #configura o tempo de execução
Persistent=true
Unit=change-wallpaper.service #define o serviço a ser executado
[Install]
WantedBy=change-wallpaper.service #espera a execução do serviço para inicializar novamente
Conclusão
Alguns comentários marcados com # foram adicionados aos arquivos para facilitar a compreensão do mesmo, você pode removê-los se desejar ou em caso de problemas.Contudo, timers, services e scripts são ferramentas poderosas presentes nos sistemas Linux e devem ser utilizadas com responsabilidade.
Tio Ben já dizia.
Excelente.
___________________________________________________________