Une réponse à cette question est d'échanger User=nobody pas avec User=ziga mais avec User=root dans /etc/systemd/system/battery.service . D'une manière ou d'une autre, même si l'utilisateur ziga a tous les privilèges d'utiliser sudo commande qu'il ne peut pas exécuter systemctl hibernate à l'intérieur du script bash. Je ne sais vraiment pas pourquoi cela arrive. Les fichiers de travail sont donc les suivants :
/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
)
Je l'ai essayé et ça marche aussi avec User=ziga ou User=nobody mais nous devons changer /usr/bin/systemctl hibernate en sudo /usr/bin/systemctl hibernate dans le dernier scénario. Il ressemble donc à User la variable n'a même pas d'importance... Oh et vous pouvez aussi supprimer les noms absolus du dernier script et changer la première ligne de #!/bin/sh à #!/bin/bash . J'ai aussi changé WantedBy=timers.target à WantedBy=battery.service dans /etc/systemd/system/battery.timer .
Voilà. La meilleure alternative cron pour hiberner les ordinateurs portables sur batterie faible. =)
Peut-être devriez-vous essayer d'ajouter le premier démarrage après le démarrage, comme ceci :
[Timer]
OnBootSec=15min
OnUnitActiveSec=2m