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