Eine Antwort auf diese Frage ist, User=nobody
auszutauschen nicht mit User=ziga
aber mit User=root
in /etc/systemd/system/battery.service . Irgendwie auch wenn Benutzer ziga
hat alle Privilegien zur Verwendung von sudo
Befehl kann systemctl hibernate
nicht ausgeführt werden innerhalb des Bash-Skripts. Ich weiß wirklich nicht, warum das passiert. Die Arbeitsdateien sind also wie folgt:
/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
)
Ich habe es ausprobiert und es funktioniert auch mit User=ziga
oder User=nobody
aber wir müssen /usr/bin/systemctl hibernate
ändern in sudo /usr/bin/systemctl hibernate
im letzten Skript. Es sieht also aus wie User
Variable spielt irgendwie keine Rolle... Oh, und Sie können auch absolute Namen aus dem letzten Skript entfernen und die erste Zeile von #!/bin/sh
ändern bis #!/bin/bash
. Ich habe auch WantedBy=timers.target
geändert bis WantedBy=battery.service
in /etc/systemd/system/battery.timer .
Los geht's. Die beste Cron-Alternative, um Laptops bei schwachem Akku in den Ruhezustand zu versetzen. =)
Vielleicht sollten Sie versuchen, den ersten Start nach dem Booten hinzuzufügen, wie folgt:
[Timer]
OnBootSec=15min
OnUnitActiveSec=2m