Dynamiczne tapety kojarzą się przede wszystkim z macOS, gdzie wygląd pulpitu może zmieniać się zależnie od pory dnia. Podobny efekt można jednak bardzo łatwo uzyskać również w Linux Mint z pulpitem Cinnamon. Nie potrzeba do tego dodatkowego programu działającego cały czas w tle – wystarczy prosty skrypt Bash oraz timer systemd.

W moim przypadku założenie było proste: od godziny 7:00 do 19:59 ma być wyświetlana jasna tapeta dzienna, natomiast o 20:00 system automatycznie przełącza tło na wersję nocną. O 7:00 następnego dnia wraca tapeta dzienna.

Całość działa automatycznie również po ponownym uruchomieniu komputera i praktycznie nie generuje żadnego dodatkowego obciążenia systemu.

Jak działa automatyczna zmiana tapety w Linux Mint?

Cinnamon przechowuje informacje o aktualnej tapecie w ustawieniach GSettings. Tapetę można więc zmienić bez otwierania ustawień pulpitu za pomocą jednego polecenia:

gsettings set org.cinnamon.desktop.background picture-uri "file:///ścieżka/do/tapety.jpg"

Cinnamon sam korzysta ze schematu org.cinnamon.desktop.background i właściwości picture-uri do obsługi aktualnego obrazu tła.

Do automatyzacji potrzebujemy więc tylko skryptu, który sprawdzi aktualną godzinę i ustawi odpowiedni plik.

Następnie timer systemd uruchomi ten skrypt o określonych godzinach.

Sprawdzenie aktualnej tapety w Linux Mint

Na początku warto sprawdzić, jaka tapeta jest obecnie ustawiona.

W terminalu wpisujemy:

gsettings get org.cinnamon.desktop.background picture-uri

Przykładowy wynik:

'file:///usr/share/backgrounds/linuxmint-wallpapers/jbaer_wave.jpg'

W ten sposób możemy bardzo łatwo poznać pełną ścieżkę do wybranego w Cinnamon obrazu.

Gdzie Linux Mint przechowuje tapety systemowe?

Standardowe tapety można znaleźć przede wszystkim w katalogu:

/usr/share/backgrounds/

Aby wyświetlić wszystkie znajdujące się tam pliki graficzne, można wykorzystać:

find /usr/share/backgrounds -type f

Jeżeli interesują nas wyłącznie typowe formaty obrazów:

find /usr/share/backgrounds -type f \( -iname "*.jpg" -o -iname "*.jpeg" -o -iname "*.png" -o -iname "*.webp" \)

W mojej instalacji Linux Mint wykorzystałem dwie systemowe tapety:

/usr/share/backgrounds/linuxmint-wallpapers/jbaer_wave.jpg

jako tapetę dzienną oraz:

/usr/share/backgrounds/linuxmint-wallpapers/mfakurian_heart.jpg

jako tapetę nocną.

Oczywiście nic nie stoi na przeszkodzie, aby zamiast tapet systemowych wykorzystać własne zdjęcia lub grafiki.

Ręczna zmiana tapety z terminala

Zanim zaczniemy tworzyć automat, warto sprawdzić, czy zmiana tapety przez gsettings działa.

Tapeta dzienna:

gsettings set org.cinnamon.desktop.background picture-uri "file:///usr/share/backgrounds/linuxmint-wallpapers/jbaer_wave.jpg"

Tapeta nocna:

gsettings set org.cinnamon.desktop.background picture-uri "file:///usr/share/backgrounds/linuxmint-wallpapers/mfakurian_heart.jpg"

Zmiana powinna nastąpić natychmiast, bez restartowania Cinnamon i bez wylogowywania użytkownika.

Jeżeli oba polecenia działają prawidłowo, możemy przejść do automatyzacji.

Tworzenie skryptu dynamicznej tapety

Najpierw tworzymy katalog na własne skrypty, jeżeli jeszcze go nie posiadamy:

mkdir -p ~/.local/bin

Następnie tworzymy plik:

nano ~/.local/bin/dynamic-wallpaper.sh

Wklejamy:

#!/bin/bash

HOUR=$((10#$(date +%H)))

DAY="/usr/share/backgrounds/linuxmint-wallpapers/jbaer_wave.jpg"
NIGHT="/usr/share/backgrounds/linuxmint-wallpapers/mfakurian_heart.jpg"

if [ "$HOUR" -ge 7 ] && [ "$HOUR" -lt 20 ]; then
    WALLPAPER="$DAY"
else
    WALLPAPER="$NIGHT"
fi

gsettings set org.cinnamon.desktop.background picture-uri "file://$WALLPAPER"

Zapisujemy plik:

Ctrl+O
Enter
Ctrl+X

Następnie nadajemy mu możliwość wykonywania:

chmod +x ~/.local/bin/dynamic-wallpaper.sh

Skrypt można od razu uruchomić ręcznie:

~/.local/bin/dynamic-wallpaper.sh

Jeżeli aktualna godzina mieści się w zakresie 7:00–19:59, zostanie ustawiona tapeta dzienna.

Od 20:00 do 6:59 ustawiana będzie tapeta nocna.

Co dokładnie robi skrypt?

Aktualna godzina pobierana jest przez:

date +%H

Fragment:

HOUR=$((10#$(date +%H)))

zamienia ją na wartość liczbową.

Następnie warunek:

if [ "$HOUR" -ge 7 ] && [ "$HOUR" -lt 20 ]; then

oznacza:

godzina >= 7
oraz
godzina < 20

Czyli:

07:00–19:59 -> tapeta dzienna
20:00–06:59 -> tapeta nocna

Sam skrypt nie działa cały czas w tle. Jest uruchamiany tylko wtedy, kiedy jest potrzebny, ustawia odpowiednią tapetę i natychmiast kończy działanie.

Automatyczne uruchamianie skryptu przez systemd

Teraz potrzebujemy mechanizmu, który uruchomi skrypt o godzinie 7:00 i 20:00.

W tym celu wykorzystamy systemd działające na poziomie naszego użytkownika.

Tworzymy odpowiedni katalog:

mkdir -p ~/.config/systemd/user

Następnie tworzymy usługę:

nano ~/.config/systemd/user/dynamic-wallpaper.service

Wklejamy:

[Unit]
Description=Dynamiczna tapeta Cinnamon

[Service]
Type=oneshot
ExecStart=%h/.local/bin/dynamic-wallpaper.sh

Type=oneshot pasuje tutaj idealnie – usługa wykonuje pojedyncze zadanie i kończy swoją pracę.

Tworzenie timera systemd

Teraz tworzymy:

nano ~/.config/systemd/user/dynamic-wallpaper.timer

Zawartość:

[Unit]
Description=Automatyczna zmiana tapety dzień/noc

[Timer]
OnCalendar=*-*-* 07:00:00
OnCalendar=*-*-* 20:00:00
OnStartupSec=10s
Persistent=true

[Install]
WantedBy=timers.target

Najważniejsze są tutaj dwa wpisy:

OnCalendar=*-*-* 07:00:00
OnCalendar=*-*-* 20:00:00

Timer systemd może posiadać wiele wpisów OnCalendar, dzięki czemu ta sama usługa zostanie uruchomiona o obu wybranych godzinach.

Opcja:

Persistent=true

jest szczególnie przydatna w laptopach i komputerach, które nie pracują przez całą dobę. Systemd zapamiętuje wykonania timera i może uruchomić pominięte zadanie po ponownej aktywacji timera.

Dodatkowo:

OnStartupSec=10s

powoduje uruchomienie skryptu krótko po uruchomieniu menedżera usług użytkownika. Dzięki temu po rozpoczęciu sesji system może od razu sprawdzić aktualną godzinę i ustawić właściwą tapetę.

Włączenie automatycznej zmiany tapety

Po utworzeniu obu plików musimy poinformować systemd o nowej konfiguracji:

systemctl --user daemon-reload

Polecenie daemon-reload powoduje ponowne wczytanie konfiguracji jednostek systemd z dysku.

Teraz włączamy timer:

systemctl --user enable --now dynamic-wallpaper.timer

Opcja enable powoduje włączenie timera na kolejne sesje, natomiast --now uruchamia go również od razu.

Jak sprawdzić, czy timer działa?

Najwygodniejsza komenda to:

systemctl --user list-timers dynamic-wallpaper.timer

Przykładowy wynik:

NEXT                         LEFT LAST
Fri 2026-08-14 20:00:00 CEST   8h ...

Jeżeli aktualnie jest dzień, następnym zdarzeniem powinno być przełączenie na tapetę nocną o godzinie 20:00.

Stan samego timera możemy również sprawdzić:

systemctl --user status dynamic-wallpaper.timer

Powinniśmy zobaczyć:

Active: active (waiting)

Test usługi bez czekania do określonej godziny

Nie trzeba czekać do 20:00, aby upewnić się, że systemd prawidłowo uruchamia nasz skrypt.

Możemy zrobić to ręcznie:

systemctl --user start dynamic-wallpaper.service

Skrypt sprawdzi aktualną godzinę i ustawi właściwy obraz.

Stan usługi sprawdzamy:

systemctl --user status dynamic-wallpaper.service

W przypadku usługi typu oneshot po zakończeniu działania status:

inactive (dead)

nie oznacza błędu. Skrypt po prostu wykonał swoje zadanie i zakończył pracę.

Jak zmienić godziny przełączania tapet?

Jeżeli później uznamy, że tapeta dzienna powinna pojawiać się o innej godzinie, trzeba pamiętać o zmianie konfiguracji w dwóch miejscach.

Najpierw edytujemy skrypt:

nano ~/.local/bin/dynamic-wallpaper.sh

Przykładowo dla dnia działającego od 6:00 do 21:00:

if [ "$HOUR" -ge 6 ] && [ "$HOUR" -lt 21 ]; then

Następnie zmieniamy timer:

nano ~/.config/systemd/user/dynamic-wallpaper.timer

na:

OnCalendar=*-*-* 06:00:00
OnCalendar=*-*-* 21:00:00

Po każdej zmianie pliku .timer trzeba ponownie wczytać konfigurację:

systemctl --user daemon-reload
systemctl --user restart dynamic-wallpaper.timer

W przeciwnym razie systemd może nadal korzystać ze starej wersji timera mimo tego, że plik na dysku został już zmodyfikowany.

Można to łatwo rozpoznać po komunikacie:

dynamic-wallpaper.timer changed on disk

W takiej sytuacji wystarczy:

systemctl --user daemon-reload
systemctl --user restart dynamic-wallpaper.timer

Jak sprawdzić konfigurację timera?

Aktualną zawartość jednostki widzianą przez systemd pokazuje:

systemctl --user cat dynamic-wallpaper.timer

To przydatne szczególnie po zmianie godzin.

Po poprawnym ustawieniu 7:00 i 20:00 powinniśmy zobaczyć między innymi:

OnCalendar=*-*-* 07:00:00
OnCalendar=*-*-* 20:00:00

Diagnostyka problemów

Jeżeli ręcznie uruchomiony skrypt działa, ale systemd nie zmienia tapety, warto sprawdzić logi:

journalctl --user -u dynamic-wallpaper.service -n 30 --no-pager

Możemy również ponownie uruchomić usługę:

systemctl --user start dynamic-wallpaper.service

i od razu sprawdzić jej status:

systemctl --user status dynamic-wallpaper.service

Jeżeli chcemy upewnić się, że sama komenda zmiany tła nadal działa:

gsettings get org.cinnamon.desktop.background picture-uri

pokaże aktualnie ustawiony plik.

Jak wyłączyć automatyczne przełączanie tapet?

Timer można zatrzymać i wyłączyć poleceniem:

systemctl --user disable --now dynamic-wallpaper.timer

Jeżeli chcemy całkowicie usunąć konfigurację:

rm ~/.config/systemd/user/dynamic-wallpaper.timer
rm ~/.config/systemd/user/dynamic-wallpaper.service
rm ~/.local/bin/dynamic-wallpaper.sh

Na końcu:

systemctl --user daemon-reload

Dynamiczna tapeta Linux Mint bez dodatkowych programów

Całe rozwiązanie jest bardzo proste, ale daje ciekawy efekt. Linux Mint z Cinnamon może automatycznie zmieniać charakter pulpitu zależnie od pory dnia bez instalowania dodatkowego menedżera tapet.

W przedstawionej konfiguracji mechanizm wygląda następująco:

07:00
  |
  +--> jbaer_wave.jpg
       tapeta dzienna
  |
  |
20:00
  |
  +--> mfakurian_heart.jpg
       tapeta nocna
  |
  |
07:00
  |
  +--> ponownie tapeta dzienna

Do działania potrzebne są tylko trzy elementy:

dynamic-wallpaper.sh
dynamic-wallpaper.service
dynamic-wallpaper.timer

Skrypt podejmuje decyzję na podstawie aktualnej godziny, usługa systemd go uruchamia, a timer pilnuje odpowiednich godzin.

Rozwiązanie można też łatwo rozbudować. Zamiast dwóch obrazów można przygotować osobne tapety na poranek, dzień, wieczór i noc, dodając kolejne przedziały godzinowe oraz wpisy OnCalendar. Dzięki temu pulpit Linux Mint może zmieniać się razem z porą dnia, bez konieczności ręcznego ustawiania tapety.


mgr Bartłomiej_Speth

Absolwent wydziału Fizyki Uniwersytetu im. Adama Mickiewicza w Poznaniu na kierunku Fizyka z informatyką. Miłośnik komputerów, sprzętu komputerowego oraz otwartego oprogramowania. Specjalizuje się w budowie, naprawach, modyfikacjach laptopów jak i jednostek stacjonarnych. Zapalony PC'towiec od momentu, w którym otrzymał swój pierwszy komputer z procesorem 80286.

0 komentarzy

Dodaj komentarz

Symbol zastępczy awatara

Twój adres email nie zostanie opublikowany. Wymagane pola są oznaczone *