linux华硕笔记本设置充电阈值

通过脚本的方式设置一个service,github有一个现成的脚本。
作者使用了下面的设备进行测试,
Asus vivobook 15 with AMD Ryzen 3500U running Linux mint 20 Kernal 5.8.0-25-generic;
Asus Vivobook 15 PRO OLED Ryzen5900 M3500 using 5.3.1 artix-linux;
Asus TUF Gaming F15 using Debian 12;

我的环境是 天选Air2022 3050 Debian12。

使用

systemd用户下载,会创建服务,重启后也会生效

wget https://raw.githubusercontent.com/sreejithag/battery-charging-limiter-linux/refs/heads/main/limitd.sh
chmod +x limitd.sh 
./limitd.sh 80
ying@192 ~/playground> ./limitd.sh 80
Max battery capacity is limiting to 80 % ✓ 
created battery-manager.service ✓ 
Created symlink /etc/systemd/system/multi-user.target.wants/battery-manager.service → /etc/systemd/system/battery-manager.service.
Created symlink /etc/systemd/system/suspend.target.wants/battery-manager.service → /etc/systemd/system/battery-manager.service.
Created symlink /etc/systemd/system/hibernate.target.wants/battery-manager.service → /etc/systemd/system/battery-manager.service.
Created symlink /etc/systemd/system/hybrid-sleep.target.wants/battery-manager.service → /etc/systemd/system/battery-manager.service.
Created symlink /etc/systemd/system/suspend-then-hibernate.target.wants/battery-manager.service → /etc/systemd/system/battery-manager.service.
Battery manager service enabled ✓ 

(可选)

sudo cp limitd.sh  /usr/local/bin
limitd.sh 100

删除

很奇怪为什么作者没有给出卸载服务的步骤,对于强迫症用户比较难受。

sudo systemctl stop battery-manager.service
sudo systemctl disable battery-manager.service
sudo rm /etc/systemd/system/battery-manager.service

查看有没有这个阈值管理文件

ls /sys/class/power_supply/BAT*/charge_control_end_threshold
echo 100 | sudo tee /sys/class/power_supply/BAT?/charge_control_end_threshold > /dev/null

其他

虽然充电阈值确实可以控制,且在登录之前,但还是有5秒左右会充电。

类型优点缺点
service可在登录前启用修改较为麻烦
gnome插件操作方便需在开机登录后启用
如果想要更快的执行(未经测验,修改存在风险)

从你给出的脚本和之前的讨论来看,你或许希望电池充电阈值的设置能更快生效,或者在系统启动流程里更早执行。下面为你提供几种能够加快脚本执行或者让其在更早阶段执行的方法。

1. 优化 Systemd 服务的启动时机

你当前的脚本是通过 Systemd 服务在多用户目标启动后执行的。若要让脚本更早执行,可以考虑修改服务单元文件里的依赖关系和启动时机。

AfterWantedBy 这些参数修改成系统启动流程里更早的目标,例如 basic.target。以下是修改后的服务文件示例:

[Unit]
Description=To set battery charge threshold
After=basic.target

[Service]
Type=oneshot
ExecStart=/bin/bash -c 'echo $max > /sys/class/power_supply/BAT?/charge_control_end_threshold'

[Install]
WantedBy=basic.target

2. 使用 initramfs 执行脚本

initramfs 是在真正的根文件系统挂载之前就会被加载并执行的一个临时根文件系统。你可以把脚本集成到 initramfs 中,这样就能在系统启动的早期阶段执行。

步骤
  1. 复制脚本:把脚本复制到 /usr/local/sbin 目录下,并且赋予执行权限。
sudo cp your_script.sh /usr/local/sbin/
sudo chmod +x /usr/local/sbin/your_script.sh
  1. 修改 initramfs 配置:编辑 /etc/initramfs-tools/hooks 目录下的一个脚本,或者创建一个新的脚本,在其中添加执行脚本的命令。
#!/bin/sh

PREREQ=""

prereqs() {
    echo "$PREREQ"
}

case "$1" in
    prereqs)
        prereqs
        exit 0
        ;;
esac

. /usr/share/initramfs-tools/hook-functions
copy_exec /usr/local/sbin/your_script.sh /sbin

# 执行脚本
if [ -x /sbin/your_script.sh ]; then
    /sbin/your_script.sh
fi
  1. 更新 initramfs
sudo update-initramfs -u

3. 编写 udev 规则

udev 是 Linux 系统里用于管理设备节点的工具,你可以编写 udev 规则,在电池设备被检测到的时候执行脚本。

步骤
  1. 创建 udev 规则文件
sudo nano /etc/udev/rules.d/99-battery-threshold.rules
  1. 添加规则内容
SUBSYSTEM=="power_supply", ATTR{type}=="Battery", ACTION=="add", RUN+="/usr/local/sbin/your_script.sh"
  1. 重新加载 udev 规则
sudo udevadm control --reload-rules
sudo udevadm trigger

代码示例

下面是一个修改后的 battery-manager.service 文件示例,让它在 basic.target 之后启动:

这些方法可以让脚本在系统启动过程中更早执行,从而更快地设置电池充电阈值。你可以根据实际需求选择合适的方法。

命令行快捷修改的脚本

select_limit.sh

#!/bin/bash

# 使用 whiptail 创建一个菜单对话框
choice=$(whiptail --title "选择电池充电上限" --menu "请选择一个选项:" 15 60 3 \
    "1" "60%" \
    "2" "80%" \
    "3" "100%" 3>&1 1>&2 2>&3)

# 检查用户是否取消了对话框
exitstatus=$?
if [ $exitstatus = 0 ]; then
    case $choice in
        1)
            limitd.sh 60
            ;;
        2)
            limitd.sh 80
            ;;
        3)
            limitd.sh 100
            ;;
    esac
else
    echo "操作已取消。"
fi
    
sudo cp select_limit.sh /usr/local/bin/

我多创了几个别名,防止时间长了忘记了,当然也可以直接看/usr/local/bin目录下有什么脚本

cd /usr/local/bin/
sudo ln -s select_limit.sh batteryctl
sudo ln -s select_limit.sh battery
sudo ln -s select_limit.sh btr
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值