
Gledam ovaj trodijelni zidni kalendar i mislim kako bi bilo dobro da se marker sam pomiče na današnji datum. Zaboraviš pomaknuti i evo mogućih problema. Pitam se kako bih mogao napraviti baš takav kalendar na desktopu koji se sam pomiče? Nešto kao Cairo clock za koji sam već radio teme prilagođene mojim idejama. Temu promijeniti je jednostavno, svaki dio sata je poseban SVG fajl koji napraviš po želji, aplikacija to složi i imaš custom sat. Problem je što ja ne znam napraviti takvu aplikaciju, pa kako bih onda mogao oživiti kalendar?
Prvo moram razmisliti. Ograničen sam najgorim neprijateljem – neznanjem i zato se moram snaći. KDE (ovdje Debian) ima desktop widgete, a jedan od njih je Media Frame. Ako napravim sliku kalendara i stavim je u widget, pokazivat će mi ga na desktopu. Ali, koji je dan? Nema markera. Stavit ću marker na današnji dan i tako exportirati kao sliku i staviti u widget. Na taj način bi mi pokazivao točan dan. Vrlo jednostavno rješenje, samo sutra više neće pokazivati dobro… Znači, svaki dan moram imati novu sliku kalendara s markerom na točnom mjestu. Idem probati.
Prvo ću napraviti pozadinu, sliku tekućeg mjeseca. Prilagodio sam pripremu ovog zidnog kalendara da odgovara pixelima, ukupno 2400x1700px, a veličina svih polja s datumima je 2100x1200px. Svako polje datuma je veličine 300x240px. Marker sam ostavio da izgleda kao pravi, plastični i on je nešto veći – 370x280px. Zašto trebam te podatke? Moram znati za koliko se pixela pomiče marker svakog dana. I za kraj mi treba koordinata početnog mjesta markera. To je ono prvo polje datuma, ishodište, nulta pozicija markera – 175px prema desno i 395px prema dolje, mjesto gdje marker okružuje prvo polje. Kasnije ću iz fore, kad već mogu, dodati i križić preko dana koji su prošli. Dobro, što sad kad imam sve to? Treba mi nešto što će mi pomoću naredbe staviti prozirni marker.png na točno mjesto preko ove sadašnje 2026-7.jpg pozadine i prekrižiti prošle datume. Ono što mi treba, to je onaj grozno neugledni ImageMagick.
ImageMagick sam oduvijek prezirao. Pokažite ga bilo kome tko radi na Photoshopu i dobit ćete podsmijeh. Stvarno GUI ImageMagicka izgleda jadno, staro, kao neki program prije 25 godina. Ali, njegova prava moć se ne vidi, njegova moć se poziva iz terminala. Samo sam ga jednom ozbiljno koristio, i to nedavno, kad sam htio stranice Alan Forda nekako masovno obraditi. Trebalo je maknuti margine, malo rezati dolje tako da polovica stranice točno dijeli gornji i donji dio, prerezati to na pola, snimiti svaku sličicu stripa posebno i onda drugim programom sve pretvoriti u PDF tako da je svaka sličica svoja stranica u svom PDF-u. Imam i tu skriptu, možda je i objavim. Samo da se vidi koliko je ImageMagick moćan.
Dakle, što sada imam? Pozadine kalendara. Napravio sam ih za nekoliko mjeseci unaprijed. Imam marker za oznaku danas, križić za prekrižiti prošle dane i dvije skripte, sve u skrivenom folderu .desktop_kalendar koji se nalazi u mojem home folderu.

Što radi glavna skripta? Nešto je već napomenuto u skripti, ali ukratko, određuje lokaciju i nazive svih potrebnih slika, koordinate prvog polja datuma i veličinu polja za koju se marker pomiče. Dalje, “Date” saznaje koji je prvi dan u tekućem mjesecu i tamo stavlja marker na prvi. Znači ne prvo polje, nego 1. u mjesecu. Koordinate markera za prvo polje je pod parametrom START, skužio si to već… Na kalendar sam iz fore dodao križiće preko proteklih dana, kao prekriženi datumi, a poslije njih marker na danas. Na kraju skripte je poziv da Magick generira kalendar_danas.jpg koji će pokazivati KDE widget na desktopu.
kalendar_update.sh
#!/bin/bash
sleep 10
MAPA="/home/slim/.desktop_kalendar"
POZADINA="$MAPA/2026-$(date +%-m).jpg"
MARKER="$MAPA/marker.png"
CROSS="$MAPA/cross.png"
IZLAZ="$MAPA/kalendar_danas.jpg"
START_X=175
START_Y=395
RAZMAK_X=300
RAZMAK_Y=240
PRVI_DAN_U_TJEDNU=$(date -d "$(date +%Y-%m-01)" +%u)
POMAK=$((PRVI_DAN_U_TJEDNU - 1))
DAN=$(date +%-d)
INDEKS=$(( (DAN - 1) + POMAK ))
# Pripremamo listu argumenata (koristimo niz umjesto stringa)
CMD_ARGS=("$POZADINA")
# Dodajemo križiće za sve dane prije današnjeg
for i in $(seq $POMAK $((INDEKS - 1))); do
STUPAC=$(( i % 7 ))
REDAK=$(( i / 7 ))
X=$(( START_X + (STUPAC * RAZMAK_X) ))
Y=$(( START_Y + (REDAK * RAZMAK_Y) ))
CMD_ARGS+=("$CROSS" -geometry +$X+$Y -composite)
done
# Dodajemo marker za danas
STUPAC=$(( INDEKS % 7 ))
REDAK=$(( INDEKS / 7 ))
POS_X=$(( START_X + (STUPAC * RAZMAK_X) ))
POS_Y=$(( START_Y + (REDAK * RAZMAK_Y) ))
# Sve skupa izvršavamo direktno s convert (magick)
magick "${CMD_ARGS[@]}" "$MARKER" -geometry +$POS_X+$POS_Y -composite "$IZLAZ"
# Postavljanje pozadine
DISPLAY=:0 DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/$(id -u)/bus gsettings set org.gnome.desktop.background picture-uri "file://$IZLAZ"
Skripta napravi kalendar_danas.jpg koji widget odmah pokazuje na desktopu. Ali tu se pojavljuje novi problem. Što sutra? ImageMagick je generirao sliku i to je to. Skriptu za generiranje slike današnjeg kalendara treba staviti u Autostart sistema da se pokreće s loginom. Znači Settings – Autostart – Add New Login Script i dodajem tamo moju kalendar_update.sh i prilikom logiranja slika kalendara će se promijeniti na današnji datum.
Ali ni to nije dobro do kraja. Ja ustvari skoro nikad ne gasim komp, samo ga stavim na sleep. To znači da se slika neće mijenjati jer se pokreće samo nakon logiranja. Treba mi dodatno rješenje. Treba mi druga skripta koja radi u pozadini, izračunava koliko sekundi treba do ponoći i nakon toga pokreće prvu skriptu za generiranje slike kalendara. Ako komp spava, kao što skoro uvijek spava kad me nema kod kuće, skripta čeka buđenje kompa, provjerava je li prošlo vrijeme koje je bilo potrebno do ponoći, pokreće generiranje kalendara, računa koliko do sljedeće ponoći i spava. Ova skripta je također dodana u Autostart.
kalendar_daemon.sh
#!/bin/bash
while true; do
# Odmah osvježi kalendar (ili provjeri)
/home/slim/.desktop_kalendar/kalendar_update.sh
# Izračunaj koliko sekundi je ostalo do sljedeće ponoći
TRENUTNO=$(date +%s)
IDUCA_PONOC=$(date -d "tomorrow 00:00:00" +%s)
SEKUNDI_DO_PONOCI=$((IDUCA_PONOC - TRENUTNO))
# Spavaj sve do ponoći (+ još 5 sekundi da sigurno prođe)
sleep $((SEKUNDI_DO_PONOCI + 5))
done
I evo, uspio sam. Malo jadno kad uspoređujem s Cairo Clockom, ali radi. Je li potrebno kad imam jedan klik na sat u trayu koji pokaže kalendar? Nije, ali nije to poanta. Poanta je da je Linux zabavan i da može puno više nego što možeš zamisliti.
Ovo je sve prikazanao na Debian 13, KDE, tako da se postupak može razlikovati na drugim distrama.