Uma resposta a essa pergunta é trocar User=nobody
não por User=ziga
, mas com User=root
em /etc/systemd/system/battery.service . De alguma forma, mesmo se o usuário ziga
tiver todos os privilégios de usar o comando sudo
, ele não poderá executar systemctl hibernate
dentro do script bash. Eu realmente não sei porque isso acontece. Portanto, os arquivos de trabalho são os seguintes:
/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 / espaço de trabalho / 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
)
Eu tentei e também funciona com User=ziga
ou User=nobody
, mas precisamos alterar /usr/bin/systemctl hibernate
em sudo /usr/bin/systemctl hibernate
no último script. Então, parece que a variável User
de alguma forma nem importa ... Ah, e você também pode remover nomes absolutos do último script e alterar a primeira linha de #!/bin/sh
para #!/bin/bash
. Eu também alterei WantedBy=timers.target
para WantedBy=battery.service
em /etc/systemd/system/battery.timer .
Lá vai você. A melhor alternativa cron para hibernar laptops com bateria fraca. =)