有没有 Linux 下充电到指定电量就停止充电的软件? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
wojiugaiming
V2EX    Linux

有没有 Linux 下充电到指定电量就停止充电的软件?

  •  1
     
  •   wojiugaiming 2024-04-29 09:48:46 +08:00 via Android 3788 次点击
    这是一个创建于 608 天前的主题,其中的信息可能已经有所发展或是发生改变。

    有没有 linux 下充电到指定电量就停止充电的软件?停止充电后,直接用充电器得电,不走电池,这种软件有吗?

    36 条回复    2024-06-02 15:57:52 +08:00
    ChaosAttractor
        1
    ChaosAttractor  
       2024-04-29 10:08:48 +08:00
    这个需要 BIOS 来实现吧,很多机器可以用逆向工程得到的 ACPI CALL 来控制(比如说华硕有 asusd )
    如果机器不支持就没戏?
    wojiugaiming
        2
    wojiugaiming  
    OP
       2024-04-29 10:14:17 +08:00 via Android
    @ChaosAttractor 我看联想 win 下有这功能,看一下 linux 能不能实现
    SHF
        3
    SHF  
       2024-04-29 10:21:14 +08:00
    EmbeddedController 有充电阈值可以设置,可能需要有驱动支持能写入这个值
    zhuisui
        4
    zhuisui  
       2024-04-29 10:23:45 +08:00   2
    tlp
    libook
        5
    libook  
       2024-04-29 10:36:37 +08:00
    需要硬件支持的,没办法软件实现。
    wojiugaiming
        6
    wojiugaiming  
    OP
       2024-04-29 10:51:24 +08:00 via Android
    @libook 联想小新 win 下可以用旧版电源管理可以实现,不知道 linux 可不可以实现
    0superx0
        span class="no">7
    0superx0  
       2024-04-29 12:24:48 +08:00   2
    @zhuisui
    4 楼说的对,tlp 完全可以操作配置 TLP
    sudo nano /etc/default/tlp
    充电参数
    START_CHARGE_THRESH_BAT0=20 #低于 20%开始充电
    STOP_CHARGE_THRESH_BAT0=80 #高于 80%停止充电

    具体你可以按自己要求更改就行
    wowpaladin
        8
    wowpaladin  
       2024-04-29 12:28:23 +08:00
    直接用 wsl 不行吗?
    wojiugaiming
        9
    wojiugaiming  
    OP
       2024-04-29 12:29:03 +08:00 via Android
    @0superx0 问题是可不可以,到了 80 电量,直接用电源的电,不走电池循环?
    wojiugaiming
        10
    wojiugaiming  
    OP
       2024-04-29 12:31:31 +08:00 via Android
    @wowpaladin 用了几年 linux 了,不想用回 win
    iOCZS
        11
    iOCZS  
       2024-04-29 12:34:07 +08:00
    难点是如何断开,获取电量还是容易的
    kuanat
        12
    kuanat  
       2024-04-29 12:34:35 +08:00   1
    如果 Windows 有这个功能,大概率可以 Linux 实现。难易程度主要看硬件实现的方式,我简单描述下方法,你可以先尝试一下。



    一般来说,电池都会通过 ACPI 提供像电量、充电状态信息等等接口,然后通过 sysfs 抽象供用户空间的应用使用。

    所以第一步是看 /sys/class/power_supply 的设备,笔记本上 power_supply 类型一般有电源和电池。

    能找到对应的电池的话,可以顺着 /sys/class/power_supply/XXX 链接去找对应的电池设备,看看有没有类似 charge_control_end_threshold 这类名字的抽象,这个名字都是厂家自己定义的,但是看字面意义一般就能猜出来。

    如果存在的话,可以直接尝试写入。通常电池还会有另一个属性 status ,取值大概是 full/unknown/charging/discharging/not charging ,这个属性几乎都是一样的。not charging 就代表外接电源通电但电池未充电,可以据此判断充电限制是否生效。

    还有一种可能是并没有一个 threshold 之类的属性可供设置,但有个类似 limit/switch 命名的属性,代表是否开启充电。通过写 0/1 来测试是否生效。



    上面说的都是比较理想的情况。不太理想的情况是,这个充电控制是 EC 完成的,并没有暴露在 sysfs 里面。

    那就需要你去 Windows 里,使用 https://github.com/hirschmann/nbfc 这个项目里的 ec_probe 工具,用来检测 EC 寄存器的变化。通过切换软件的充电控制开关,观察 EC 寄存器的变化,用控制变量的方法最终确定相应的地址,然后尝试改写寄存器的值,判断充电控制是否生效。

    如果能找到对应的地址和值,用 ec_probe 的 Linux 版本做相应操作即可。(如果开启 SafeBoot 的话,Linux 会进入 Kernel Lockdown 模式,不允许修改 MSR 的值,这就需要 https://github.com/musikid/acpi_ec 的内核模块来修改)



    如果 EC 接口也没用,那大概率这个功能是 WMI 驱动完成的,这就需要把 Windows 版的控制程序拿来逆向,然后改写成 Linux 可用的内核驱动模块。这个方法比较复杂就不多说了,如果真遇到了可以再聊。
    wojiugaiming
        13
    wojiugaiming  
    OP
       2024-04-29 12:38:44 +08:00 via Android
    @iOCZS 断开还是容易的,以前就多了一个到达指定电量自动断开智能开关电源的,现在是想怎么实现不走电池循环,就走电源直流电
    wojiugaiming
        14
    wojiugaiming  
    OP
       2024-04-29 12:39:16 +08:00 via Android
    @kuanat 好像很复杂
    shijingshijing
        15
    shijingshijing  
       2024-04-29 13:10:21 +08:00
    这个是 EC 配合 PMIC 实现的,现在的电子设备不管是笔记本还是手机,都是这样一个模式,EC 做决策判断,PMIC 的数模混合电路来实现开启关闭和冲电放电策略。
    shijingshijing
        16
    shijingshijing  
       2024-04-29 13:13:21 +08:00   2
    联想的 Thinkpad 在 Win 下面通过联想自己的管家软件设置以后,Linux 下面同样有效,因为底层都是把阈值交给 EC 来处理,纯硬件实现,理论上在 UEFI/BIOS 里面也可以直接操作,就看 Vendor 给不给你这个选项。

    我的 Thinkpad X1E 在 Ubunutu 一直用的很好,现在稳定充电 94%之后停止充电,笔记本此时由电源适配器直接供电。
    NessajCN
        17
    NessajCN  
       2024-04-29 13:47:31 +08:00
    我先要确认一下,楼主你知道笔记本边充电边用的时候,
    只要一插上充电器,电脑就是直接通过电源供电并且电源也同时给电池充电,
    而不是电池一边充电一边给笔记本供电的吧?
    同时充满电的情况下也一样是电源供电不走电池这一点楼主清楚的吧?

    如果楼主确实知道以上情况,那么请问下你需要电池不充满就不充的原因是什么呢?
    wojiugaiming
        18
    wojiugaiming  
    OP
       2024-04-29 15:16:31 +08:00 via Android
    @NessajCN 笔记本边充电边用的时候,
    只要一插上充电器,电脑就是直接通过电源供电并且电源也同时给电池充电。这个我不清楚,我以为电池一边被充电,一边被放电。

    充满电的情况下也一样是电源供电不走电池这一点楼主清楚的吧?这个我清楚,但是据说会加速电池衰退,我是我要限制到 50-60 之间
    wojiugaiming
        19
    wojiugaiming  
    OP
       2024-04-29 15:17:14 +08:00 via Android
    @shijingshijing 感谢 我 win 设置一下,linux 下看看
    NessajCN
        20
    NessajCN  
       2024-04-29 15:23:16 +08:00
    @itakeman
    「但是据说会加速电池衰退」
    假的,电池寿命只和充放电循环次数有关,保持 50-60 并不会比保持满格更保电池
    nguoidiqua
        21
    nguoidiqua  
       2024-04-29 15:45:37 +08:00
    上次看一个人说现在的新电脑大多考虑过这方面的问题,一般接了电源的情况下不会走电池供电,充满后电池也不会继续充,不经常断电用的话损耗应该不大,如果是这样的电脑,按上面说的改到 80% 停止充电应该就可以了,当然也许有厂家喜欢靠换电池赚钱也不一定。

    也可以考虑另外一种思路,就是把电池上限改为标称的 80%,不知道是否可以做到。
    zhuisui
        22
    zhuisui  
       2024-04-29 17:40:33 +08:00
    刚查的
    锂电池电量过大或过小,正负极材料更易损耗;电压越高,循环损耗越大。
    不过一般不用在乎就是了
    w568w
        23
    w568w  
       2024-04-29 19:38:30 +08:00
    看楼主应该是联想小新的。拯救者的话有社区维护了内核驱动:

    https://github.com/johnfanv2/LenovoLegionLinux

    小新就不清楚了,按楼上方法抓 ACPI 方法调用即可。
    w568w
        24
    w568w  
       2024-04-29 19:39:57 +08:00
    0superx0
        25
    0superx0  
       2024-04-29 22:35:52 +08:00
    @itakeman 充到 80 后就停止充电了,只要电源插着就用电源的电,拔了就用电池的电,如果你熟悉 tlp 配置,要更好的使用 tlp,就关掉 bios 里面的主板电源管理,全权交给 tlp 管理.
    PS:具体还是得看厂商,thinkpad 这么多年来,我都是关掉 bios 主板电源管理
    wuzhewuyou
        26
    wuzhewuyou  
       2024-04-29 22:42:37 +08:00 via Android
    田牌是 bios 里直接设置
    lalalaqwer
        27
    lalalaqwer  
       2024-04-29 22:43:56 +08:00
    @NessajCN 锂电池浅充浅放本来就可以带来更大的 SOC 循环次数的,还有就是长期保持满电的确会减少寿命,最佳保存状态就是五六十
    yanqiyu
        28
    yanqiyu  
       2024-04-29 23:12:32 +08:00
    我手里的拯救者和 thinkbook 都可以(理论上 ideapad_acpi 可用的机器应该都可以?)
    echo 1 | sudo tee /sys/bus/platform/drivers/ideapad_acpi/VPC2004:00/conservation_mode
    开限制充电点亮
    wojiugaiming
        29
    wojiugaiming  
    OP
       2024-04-30 00:27:29 +08:00 via Android
    @w568w 是小新
    wojiugaiming
        30
    wojiugaiming  
    OP
       2024-04-30 00:27:54 +08:00 via Android
    @yanqiyu 没弄过,假期游客去试试
    heiher
        31
    heiher  
       2024-04-30 08:52:01 +08:00 via Android
    直接对接智能插座
    kkocdko
        32
    kkocdko  
       2024-04-30 13:02:34 +08:00
    https://github.com/zeheater/lenopow/blob/master/lenopow

    适用于部分联想电脑,我的 thinkbook14 acl g3 ,同学的一台 yoga 工程机都正常,具体数值不可调,有些电脑用了之后是 60-80 ,有些是 40-60 。

    这种功能都是特定于硬件的。
    kkocdko
        33
    kkocdko  
       2024-04-30 13:07:18 +08:00
    kuanat 的做法是正确答案,如果找不到抄的,你只能在 win 下用联想电脑管家的功能,然后抓 acpi call ,随便拿个 ark 工具抓。

    tlp 要可用得依赖于你的设备有主线维护。不是看着 tlp 有选项就想当然能用的。
    msg7086
        34
    msg7086  
       2024-04-30 13:17:47 +08:00
    @NessajCN 长时间空电满电都影响电池寿命,寿命不是只和循环次数有关的。(温度也影响寿命。)
    pckillers
        35
    pckillers  
       2024-04-30 18:13:13 +08:00
    我的联想笔记本在 Windows 里设置完这个功能后装 linux , 然后一直就保持着这个设置了。 从此我这个笔记本最大只能冲到 70%电。

    我估计双系统就能随时进 windows 改这个设置,但是 512G 硬盘吃紧,我就懒得双系统了。
    Cu635
        36
    Cu635  
       2024-06-02 15:57:52 +08:00
    windows 下设置了电池充电阈值之后,linux 下也会遵守。
    linux 下设置软件有个叫 tlp 的,tlp 说是给 thinkpad 用但有一部分别的品牌型号也是兼容的。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2588 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 24ms UTC 06:41 PVG 14:41 LAX 22:41 JFK 01:41
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86