有没有 linux 下充电到指定电量就停止充电的软件?停止充电后,直接用充电器得电,不走电池,这种软件有吗?
1
ChaosAttractor 241 天前
这个需要 BIOS 来实现吧,很多机器可以用逆向工程得到的 ACPI CALL 来控制(比如说华硕有 asusd )
如果机器不支持就没戏? |
2
itakeman OP @ChaosAttractor 我看联想 win 下有这功能,看一下 linux 能不能实现
|
3
SHF 241 天前
EmbeddedController 有充电阈值可以设置,可能需要有驱动支持能写入这个值
|
4
zhuisui 241 天前 2
tlp
|
5
libook 241 天前
需要硬件支持的,没办法软件实现。
|
7
0superx0 241 天前 1
@zhuisui
4 楼说的对,tlp 完全可以操作配置 TLP sudo nano /etc/default/tlp 充电参数 START_CHARGE_THRESH_BAT0=20 #低于 20%开始充电 STOP_CHARGE_THRESH_BAT0=80 #高于 80%停止充电 具体你可以按自己要求更改就行 |
8
wowpaladin 241 天前
直接用 wsl 不行吗?
|
10
itakeman OP @wowpaladin 用了几年 linux 了,不想用回 win
|
11
iOCZS 241 天前
难点是如何断开,获取电量还是容易的
|
12
kuanat 241 天前 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 可用的内核驱动模块。这个方法比较复杂就不多说了,如果真遇到了可以再聊。 |
15
shijingshijing 241 天前
这个是 EC 配合 PMIC 实现的,现在的电子设备不管是笔记本还是手机,都是这样一个模式,EC 做决策判断,PMIC 的数模混合电路来实现开启关闭和冲电放电策略。
|
16
shijingshijing 241 天前 2
联想的 Thinkpad 在 Win 下面通过联想自己的管家软件设置以后,Linux 下面同样有效,因为底层都是把阈值交给 EC 来处理,纯硬件实现,理论上在 UEFI/BIOS 里面也可以直接操作,就看 Vendor 给不给你这个选项。
我的 Thinkpad X1E 在 Ubunutu 一直用的很好,现在稳定充电 94%之后停止充电,笔记本此时由电源适配器直接供电。 |
17
NessajCN 241 天前
我先要确认一下,楼主你知道笔记本边充电边用的时候,
只要一插上充电器,电脑就是直接通过电源供电并且电源也同时给电池充电, 而不是电池一边充电一边给笔记本供电的吧? 同时充满电的情况下也一样是电源供电不走电池这一点楼主清楚的吧? 如果楼主确实知道以上情况,那么请问下你需要电池不充满就不充的原因是什么呢? |
18
itakeman OP @NessajCN 笔记本边充电边用的时候,
只要一插上充电器,电脑就是直接通过电源供电并且电源也同时给电池充电。这个我不清楚,我以为电池一边被充电,一边被放电。 充满电的情况下也一样是电源供电不走电池这一点楼主清楚的吧?这个我清楚,但是据说会加速电池衰退,我是我要限制到 50-60 之间 |
19
itakeman OP @shijingshijing 感谢 我 win 设置一下,linux 下看看
|
21
nguoidiqua 241 天前
上次看一个人说现在的新电脑大多考虑过这方面的问题,一般接了电源的情况下不会走电池供电,充满后电池也不会继续充,不经常断电用的话损耗应该不大,如果是这样的电脑,按上面说的改到 80% 停止充电应该就可以了,当然也许有厂家喜欢靠换电池赚钱也不一定。
也可以考虑另外一种思路,就是把电池上限改为标称的 80%,不知道是否可以做到。 |
22
zhuisui 241 天前
刚查的
锂电池电量过大或过小,正负极材料更易损耗;电压越高,循环损耗越大。 不过一般不用在乎就是了 |
23
w568w 241 天前
看楼主应该是联想小新的。拯救者的话有社区维护了内核驱动:
https://github.com/johnfanv2/LenovoLegionLinux 小新就不清楚了,按楼上方法抓 ACPI 方法调用即可。 |
24
w568w 241 天前
|
25
0superx0 241 天前
@itakeman 充到 80 后就停止充电了,只要电源插着就用电源的电,拔了就用电池的电,如果你熟悉 tlp 配置,要更好的使用 tlp,就关掉 bios 里面的主板电源管理,全权交给 tlp 管理.
PS:具体还是得看厂商,thinkpad 这么多年来,我都是关掉 bios 主板电源管理 |
26
wuzhewuyou 241 天前 via Android
田牌是 bios 里直接设置
|
27
lalalaqwer 241 天前
@NessajCN 锂电池浅充浅放本来就可以带来更大的 SOC 循环次数的,还有就是长期保持满电的确会减少寿命,最佳保存状态就是五六十
|
28
yanqiyu 241 天前
我手里的拯救者和 thinkbook 都可以(理论上 ideapad_acpi 可用的机器应该都可以?)
echo 1 | sudo tee /sys/bus/platform/drivers/ideapad_acpi/VPC2004:00/conservation_mode 开限制充电点亮 |
31
heiher 240 天前 via Android
直接对接智能插座
|
32
kkocdko 240 天前
https://github.com/zeheater/lenopow/blob/master/lenopow
适用于部分联想电脑,我的 thinkbook14 acl g3 ,同学的一台 yoga 工程机都正常,具体数值不可调,有些电脑用了之后是 60-80 ,有些是 40-60 。 这种功能都是特定于硬件的。 |
33
kkocdko 240 天前
kuanat 的做法是正确答案,如果找不到抄的,你只能在 win 下用联想电脑管家的功能,然后抓 acpi call ,随便拿个 ark 工具抓。
tlp 要可用得依赖于你的设备有主线维护。不是看着 tlp 有选项就想当然能用的。 |
35
pckillers 240 天前
我的联想笔记本在 Windows 里设置完这个功能后装 linux , 然后一直就保持着这个设置了。 从此我这个笔记本最大只能冲到 70%电。
我估计双系统就能随时进 windows 改这个设置,但是 512G 硬盘吃紧,我就懒得双系统了。 |
36
Cu635 207 天前
windows 下设置了电池充电阈值之后,linux 下也会遵守。
linux 下设置软件有个叫 tlp 的,tlp 说是给 thinkpad 用但有一部分别的品牌型号也是兼容的。 |