Alterar o papel de parede a cada X minutos no Sway

Buenas, eu instalei em uma partição separada o Arch com o Sway e pra setar o papel de parede uso o swaybg. Achei em algum lugar da internet o que escrever pra ele setar os wallpapers que tenho em uma pasta, mas eles só mudam depois de reiniciar ou fazer logout. Achei alguns scripts que fazem eles mudarem de tempos em tempos, mas não sei como fazer com que eles executem no config do Sway. Queria saber o que escrever pro script ser iniciado junto com o sistema. (me perdoem a falta de detalhes pois nesse momento estou longe do PC)
Desde já, agradeço

Mande os scripts aqui. Dependendo de como eles forem, pode ser simplesmente uma linha exec /caminho/pro/script.sh em ~/.config/sway/config.

Pode até embutir um loop em shell no config:
exec while sleep $((x*60)) ; do comando_selecionar_wallpaper ; done

(coloque o comando que escolhe um wallpaper da pasta no lugar de comando_selecionar_wallpaper e o número de minutos no lugar de x).

2 curtidas

Da para usar a waybar no sway para fazer isso.

Eu uso um script simples para radomizar wallpapers.
Mas só vai funcionar se usar o swaybg e colocar o wallpaper lá no arquivo de configuração do sway:
Por exemplo:

output "*" bg /caminho/pasta/wallpapers/img.png fill

O shell script:

#!/usr/bin/env bash
# --------------------------------------------------------------
# Projeto	: swaybg
# Arquivo	: swaybg.sh
# Descrição : Script simples para mudar wallpaper do sway aleatoriamente
# Versão	: 1.0
# Data		: 06/06/2024 - 17:19

WALL_PATH=$HOME/Imagens/Everforest

# Seleciona um novo wallpaper aleatório
NEW_WP=$(ls $WALL_PATH | shuf -n 1)

# Define o caminho completo para o novo wallpaper
NEW_WALL="$WALL_PATH/$NEW_WP"
echo $NEW_WALL
# Usa a variável $NEW_WALL. Apaga a linha de configuração do wallpaper
# e a reescreve com o a variável $NEW_WALL
sed -i "s|^output \"\*\" bg .*$|output \"*\" bg $NEW_WALL fill|" $HOME/.config/sway/config

# Reinicia o swaybg
killall swaybg && \
swaybg -o "*" -i $NEW_WALL -m fill &

depois voce pode criar um módulo na waybar:

Em “interval”: coloque o número de segundos para executar o script

    "custom/wallpaper": {
    	"format": "{}",
        "interval": 120,
        "exec": "/caminho/para/script.sh"
    },

Então sempre que passar os minutos definidos a waybar vai executar o script e vai mudar o wallpaper.

Eu acho que também da para usar o cron ao invés da waybar definindo as variáveis DISPLAY e DBUS_SESSION_BUS_ADDRESS, mas nunca fiz assim. Eu uso esse script com um botão para mudar o wallpaper e não a cada X segundos mesmo funcionado para isso também.

1 curtida

Cara, esse do “exec ~/blablabla/./script.sh” funcionou. Mas quando dou um refresh pra caso eu altere algo na config, o papel de parede some. Daí só dando logout pra aparecer outro. Acha que tem a ver com o script? Posso mandar ele aqui mas não sei deixar “bonitinho” como vocês fazem aqui. Hahaha

Pelo visto, nesse caso tem que ser exec_always (que executa novamente depois de recarregar) e não exec (que só executa durante a incialização).

(Honestamente, seria melhor vermos o script; poderíamos assim dizer com mais confiança se dá para rodar uma cópia depois da outra assim).

Particularmente eu só daria um killall swaybg && swaybg -i "$NEW_WALL" &, em vez de recarregar toda a configuração do Sway.

Não só essas variáveis, tem muito mais no contexto de uma sessão gráfica. Muito mais prático fazer isso usando um loop do snooze (AUR), que é feito especialmente para esse tipo de “script agendado”.

(ou até mesmo meter logo um systemd.timer, já que as distribuições costumam configuram os DEs/WMs para enviar tudo para o systemd --user).

1 curtida

Verdade, eu tava vendo isso aqui. Corrigi lá no post.