如何让限制LG笔记本电池充电阈值的命令在开机时自动执行?
如何让限制LG笔记本电池充电阈值的命令在开机时自动执行?
首先得搞清楚你之前用crontab失败的核心原因——权限和命令执行上下文的问题。你试的那些写法里,比如@reboot sudo echo 80 > /sys/...,这里的重定向符号>是由crontab以你的普通用户身份执行的,而你没有写入/sys/devices/platform/lg-laptop/battery_care_limit这个sysfs节点的权限,哪怕前面加了sudo,sudo只作用于echo命令,重定向还是用普通用户权限,所以肯定失败。
下面给你两个靠谱的解决办法,选哪个都行:
方法一:修复crontab的命令写法
首先要让sudo能无密码执行这个命令(不然开机时crontab没法输入密码),步骤如下:
- 运行
sudo visudo打开sudoers配置文件(别直接用编辑器改,避免语法错误锁死权限) - 在文件末尾添加一行(把
yourusername换成你的实际用户名):
yourusername ALL=(ALL) NOPASSWD: /bin/bash -c "echo 80 > /sys/devices/platform/lg-laptop/battery_care_limit"
- 保存退出后,修改你的crontab(
crontab -e),把命令改成:
@reboot sudo bash -c "echo 80 > /sys/devices/platform/lg-laptop/battery_care_limit"
或者用你原本手动有效的tee写法,同样要确保sudo无密码:
@reboot echo 80 | sudo tee /sys/devices/platform/lg-laptop/battery_care_limit
这样crontab开机执行时,整个命令(包括重定向)都会以root权限运行,就能成功写入阈值了。
方法二:用systemd服务(更稳定可靠)
systemd可以更精准控制服务启动时机,确保sysfs节点已经加载完成,适合这类硬件相关的开机任务:
- 创建一个systemd服务文件:
sudo nano /etc/systemd/system/lg-battery-care.service
- 粘贴以下内容:
[Unit] Description=设置LG笔记本电池充电上限为80% After=multi-user.target [Service] Type=oneshot ExecStart=/bin/bash -c "echo 80 > /sys/devices/platform/lg-laptop/battery_care_limit" User=root [Install] WantedBy=multi-user.target
- 保存退出后,刷新systemd配置并启用服务:
sudo systemctl daemon-reload sudo systemctl enable lg-battery-care.service
这样下次开机时,systemd会自动以root身份执行这个命令,完全不用依赖crontab,稳定性更高。
你可以先试方法一,要是觉得crontab麻烦,直接用systemd的方法更省心~
备注:内容来源于stack exchange,提问作者elwood
相关产品推荐
相关产品推荐

