Automação de mudança de tema

Olá, eu gostaria de que quando chegasse la pelas 6 horas e 19 horas o tema fosse trocado. Alguém tem alguma dica de como posso fazer isso ?

lookandfeeltool -a orgorg.kde.breezedark.desktop

esse comando troca para o tema escuro, agora como dizer para o computador quando ele deve executar esse programa?

Se sua distro tiver o programa crontab:

  1. Terminal: crontab -e (pode perguntar um editor; se não souber, indico o nano)
  2. Adicione duas linhas
0 6 * * * comando_6damanha
0 19 * * * comando_7danoite
  1. Salve.

Esses arquivos da crontab são analisados a cada minuto e possuem linhas no formato:
minuto hora dia-mês mês dia-semana comando

* significa todos.

Se sua distro não tiver o crontab, a alternativa é o systemd-timer, que vem incluído em quase todas, mas é bem mais difícil de usar (apesar de permitir mais detalhes e etc.)

1 Curtida

Contrab é executado a cada minuto é isso?
Pq digamos que eu coloque que as 6 da manha o sistema fica claro, mas em um dia eu ligo o computador as 7, ele vai continuar no modo escuro com esse script né?
precisaria fazer um if se isso acontece

Crontab analisa o arquivo a cada minuto, e se o horário bater com o especificado nas cinco primeiras colunas (embaixo do post tem a ordem), ele executa o comando. Elas meio que já são o if.

1 Curtida

Esse problema não acontece então?

Na minha mente se o script executa a cada minuto eu deveria escrever algo do gênero:
if [ getHour -ge 6 E getHour -le 19 E getTheme != “Tema Claro” ]
then
set Theme = “Tema Claro”
elif [ getTheme != "Tema Escuro ]
then
setTheme = “Tema Escuro”

…é, vai acontecer com o cron, inicar às 7 e continuar com tema escuro.

Se bem que dá para combinar duas opções aqui, um cron que muda com horário definido, e rodar um script nesse estilo quando inicia a DE (para compensar o fato que o cron perde horários com o PC desligado).

Ou fundir os dois num systemd-timer, que tem a opção Persistent=true que automaticamente percebe que perdeu um horário e roda imediatamente (porém o formato de configuração não é dos mais simples).

if [ date +"%H" -ge 6 E date +"%H" -le 19 ]
then
lookandfeeltool -a org.kde.breeze.desktopelse
else
then
lookandfeeltool -a org.kde.breezedark.desktop

Se eu colocar isso na inicialização já resolve parte do problema, mas eu não encontro na internet como fazer o E.
ps : esse meu codigo está certo? primeira vez fazendo um if em shell

if [ "$(date +"%H")" -ge 6 ] && [ "$(date +"%H")" -le 19 ]
then
lookandfeeltool -a org.kde.breeze.desktopelse
else
lookandfeeltool -a org.kde.breezedark.desktop
fi

"$(comando)" executa o comando e então é substituído pelo resultado dele. [ date +"%H" -le 19 ], faz ele achar que você quer literalmente comparar o texto date +"%H" com um número.

1 Curtida

0 6 * * * lookandfeeltool -a org.kde.breeze.desktop
0 19 * * * lookandfeeltool -a org.kde.breezedark.desktop

Coloquei isso no

mas agora as 19 horas ele não trocou o tema, sabe o que fiz de errado?

Instalei o crontab ui para ver se com a interface grafica iria funcionar mas acontece a mesma coisa, ele não executa o programa e não consigo ver nenhuma mensagem de erro. O que eu faço?

Se o script ao iniciar a DE funciona, pode embutir o temporizador nele, eu acho:

# Loop eterno
while :; do
if [ "$(date +"%H")" -ge 6 ] && [ "$(date +"%H")" -le 19 ]
then
lookandfeeltool -a org.kde.breeze.desktopelse
else
lookandfeeltool -a org.kde.breezedark.desktop
fi
sleep 60 # Pausar por 60 segundos
done

sáb 27 mar 2021 21:32:01 -03
/bin/sh: 1: ./Scripts/InversoTema.sh: not found
sáb 27 mar 2021 21:33:01 -03
/bin/sh: 1: ./Scripts/InversoTema.sh: not found

ao que parece ele nao encontra o executavel, como posso arrumar isso?
o comando que estou dando é ./Scripts/InversoTema.sh , será que não pode fazer isso?

Não, é necessário dar o caminho completo (/home/mateus/Scripts/InversoTema.sh).

Nem colocando /home/mateus/Scripts/InversoTema.sh nem ./home/mateus/Scripts/InversoTema.sh funciona, nenhum erro é dado mas nada é feito quado clico em “run now”

Não consigo entender o que estou fazendo de errado, o script executa da maneira esperada quando clico, mas pelo crontab não

Se você estiver usando o plasma, conheço esses dois programas.

Eu gostaria de automatizar outras coisas no meu desktop, por isso gostaria de usar uma ferramenta como crontab