Una risposta a questa domanda è scambiare User=nobody non con User=ziga ma con User=root in /etc/systemd/system/battery.service . In qualche modo anche se l'utente ziga ha tutti i privilegi di usare sudo comando non può eseguire systemctl hibernate all'interno dello script bash. Non so davvero perché questo accada. Quindi i file di lavoro sono i seguenti:
/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
)
L'ho provato e funziona anche con User=ziga o User=nobody ma dobbiamo cambiare /usr/bin/systemctl hibernate in sudo /usr/bin/systemctl hibernate nell'ultima sceneggiatura. Quindi sembra User la variabile in qualche modo non ha nemmeno importanza ... Oh e puoi anche rimuovere i nomi assoluti dall'ultimo script e cambiare la prima riga da #!/bin/sh a #!/bin/bash . Ho anche cambiato WantedBy=timers.target a WantedBy=battery.service in /etc/systemd/system/battery.timer .
Ecco qua. La migliore alternativa a cron per ibernare i laptop con batteria scarica. =)
Forse dovresti provare ad aggiungere il primo avvio dopo l'avvio, in questo modo:
[Timer]
OnBootSec=15min
OnUnitActiveSec=2m