V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
itakeman
V2EX  ›  Linux

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

  •  1
     
  •   itakeman · 16 天前 via Android · 2020 次点击

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

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

    具体你可以按自己要求更改就行
    wowpaladin
        8
    wowpaladin  
       16 天前
    直接用 wsl 不行吗?
    itakeman
        9
    itakeman  
    OP
       16 天前 via Android
    @0superx0 问题是可不可以,到了 80 电量,直接用电源的电,不走电池循环?
    itakeman
        10
    itakeman  
    OP
       16 天前 via Android
    @wowpaladin 用了几年 linux 了,不想用回 win
    iOCZS
        11
    iOCZS  
       16 天前
    难点是如何断开,获取电量还是容易的
    kuanat
        12
    kuanat  
       16 天前   ❤️ 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 可用的内核驱动模块。这个方法比较复杂就不多说了,如果真遇到了可以再聊。
    itakeman
        13
    itakeman  
    OP
       16 天前 via Android
    @iOCZS 断开还是容易的,以前就多了一个到达指定电量自动断开智能开关电源的,现在是想怎么实现不走电池循环,就走电源直流电
    itakeman
        14
    itakeman  
    OP
       16 天前 via Android
    @kuanat 好像很复杂
    shijingshijing
        15
    shijingshijing  
       16 天前
    这个是 EC 配合 PMIC 实现的,现在的电子设备不管是笔记本还是手机,都是这样一个模式,EC 做决策判断,PMIC 的数模混合电路来实现开启关闭和冲电放电策略。
    shijingshijing
        16
    shijingshijing  
       16 天前   ❤️ 2
    联想的 Thinkpad 在 Win 下面通过联想自己的管家软件设置以后,Linux 下面同样有效,因为底层都是把阈值交给 EC 来处理,纯硬件实现,理论上在 UEFI/BIOS 里面也可以直接操作,就看 Vendor 给不给你这个选项。

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

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

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

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

    https://github.com/johnfanv2/LenovoLegionLinux

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

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

    这种功能都是特定于硬件的。
    kkocdko
        33
    kkocdko  
       15 天前
    kuanat 的做法是正确答案,如果找不到抄的,你只能在 win 下用联想电脑管家的功能,然后抓 acpi call ,随便拿个 ark 工具抓。

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

    我估计双系统就能随时进 windows 改这个设置,但是 512G 硬盘吃紧,我就懒得双系统了。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   4494 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 10:13 · PVG 18:13 · LAX 03:13 · JFK 06:13
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.