Una respuesta a esta pregunta es intercambiar User=nobody no con User=ziga pero con User=root en /etc/systemd/system/battery.service . De alguna manera, incluso si el usuario ziga tiene todos los privilegios de usar sudo comando que no puede ejecutar systemctl hibernate dentro del script bash. Realmente no sé por qué sucede esto. Así que los archivos de trabajo son los siguientes:
/etc/systemd/system/battery.servicio
[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
)
Lo probé y también funciona con User=ziga o User=nobody pero necesitamos cambiar /usr/bin/systemctl hibernate en sudo /usr/bin/systemctl hibernate en el último guión. Entonces parece User la variable de alguna manera ni siquiera importa... Ah, y también puede eliminar los nombres absolutos del último script y cambiar la primera línea de #!/bin/sh a #!/bin/bash . También cambié WantedBy=timers.target a WantedBy=battery.service en /etc/systemd/system/battery.timer .
Ahí tienes La mejor alternativa de cron para hibernar portátiles con poca batería. =)
Puede ser que deba intentar agregar el primer inicio después del arranque, así:
[Timer]
OnBootSec=15min
OnUnitActiveSec=2m