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.
0 komentarzy