运行 Ubuntu 20.04。
为了节省电池寿命,我有一个在启动时运行的服务,它将充电水平限制在 80%,请参阅下面的服务(/etc/systemd/system/battery-charge-threshold.service):
[Unit]
Description=Set the battery charge threshold
After=multi-user.target
StartLimitBurst=0
[Service]
Type=oneshot
Restart=on-failure
ExecStart=/bin/bash -c 'echo 80 > /sys/class/power_supply/BAT0/charge_control_end_threshold'
[Install]
WantedBy=multi-user.target
这很有效,甚至在关闭计算机后也能维持。在计算机 BIOS/UEFI 的初始启动过程中,设置似乎被重置为 100%(笔记本电脑上的充电 LED 指示灯从“已满”变为“正在充电”灯)。但是,一旦启动 Ubuntu,服务就会运行,限制再次设置为 80%。设置在 s2idle 中维持并从 s2idle 恢复,但从休眠状态恢复时,服务似乎没有运行,因此限制为 100%。恢复后,我可以使用
sudo systemctl start battery-charge-threshold.service
一切又恢复正常了。但是,我希望服务在从休眠状态恢复时自动运行。我已经看到了如何在从 s2idle 或挂起状态恢复时实现这一点,但我找不到任何关于如何在休眠状态下实现这一点的信息。
有人知道如何解决这个问题吗?
答案1
在这里回答我自己的解决方案:
该方法实际上与添加从暂停状态恢复的函数相同,我之前的尝试肯定犯了错误。
我是这样做的:
继第一个回答之后这个问题batt_script.sh
,我添加了一个名为的脚本/lib/systemd/system-sleep
:
#!/bin/sh
PATH=/sbin:/usr/sbin:/bin:/usr/bin
case "$1" in
pre)
#code execution BEFORE sleeping/hibernating/suspending
;;
post)
#code execution AFTER resuming
sudo systemctl start battery-charge-threshold.service
;;
esac
exit 0
然后选择允许从 nautilus 执行文件作为程序admin://
来获取 root 权限或
sudo chmod +x /lib/systemd/system-sleep/batt-script.sh
sudo systemctl start battery-charge-threshold.service
脚本后段中的命令是运行该服务的命令,它发生在登录屏幕出现之前(通过充电状态 LED 指示灯从收费到满的)
我很高兴我解决了这个问题,希望这可以帮助别人。