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