Odpověď na tuto otázku je vyměnit User=nobody ne s User=ziga ale s User=root v /etc/systemd/system/battery.service . Nějak i když uživatel ziga má všechna oprávnění k používání sudo příkaz, který nemůže provést systemctl hibernate uvnitř bash skriptu. Opravdu nevím, proč se to děje. Pracovní soubory jsou tedy následující:
/etc/systemd/system/battery.service
[Unit]
Description=Preko skripte preveri stanje baterije in hibernira v kolikor je stanje prenizko
[Service]
Type=oneshot
ExecStart=/home/ziga/Dropbox/workspace/operacijski/archlinux/hibernate/hibernatescript
User=root
Group=systemd-journal
 /etc/systemd/system/battery.timer
[Unit]
Description=Periodical checking of battery status every two minutes
[Timer]
OnBootSec=2min
OnUnitActiveSec=2min 
[Install]
WantedBy=battery.service
 /home/ziga/Dropbox/workspace/operacijski/archlinux/hibernate/hibernatescript
#!/bin/sh
/usr/bin/acpi -b | /usr/bin/awk -F'[,:%]' '{print $2, $3}' | (
        read -r status capacity
        if [ "$status" = Discharging ] && [ "$capacity" -lt 7 ]; then
                /usr/bin/systemctl hibernate
        fi
)
 
 Zkoušel jsem to a funguje to také s User=ziga nebo User=nobody ale musíme změnit /usr/bin/systemctl hibernate do sudo /usr/bin/systemctl hibernate v posledním skriptu. Takže to vypadá jako User proměnná nějak ani nezáleží... Jo a taky můžeš z posledního skriptu odstranit absolutní názvy a změnit první řádek z #!/bin/sh na #!/bin/bash . Také jsem změnil WantedBy=timers.target na WantedBy=battery.service v /etc/systemd/system/battery.timer .
Tady máš. Nejlepší alternativa cronu k hibernaci notebooků s nízkou baterií. =)
Možná byste se měli pokusit přidat první spuštění po spuštění, například takto:
 [Timer]
OnBootSec=15min
OnUnitActiveSec=2m