获取电池状态以更频繁地更新或使用交流电源/唤醒

我遇到的一个令人讨厌的问题是上电需要几分钟或更长时间来更新我的电池状态(这个问题类似于这篇文章,但我提供了笔记本电脑的详细信息)。 这意味着如果我将笔记本电脑从hibernate状态唤醒,它会在几分钟内显示错误的电池百分比,当我插入充电器时,电池图标不会指示(尽管硬件充电指示灯亮)。 除了这些情况,我不介意更新时间。

奇怪的是,当我拔下充电器时,图标会立即更新。 我想出了一个临时解决方案来更新唤醒可能会或可能不会工作,但似乎应该有一个很好的解决方案。 在Acer Aspire E5-575G-53VG上运行Ubuntu 16.04。

acpi始终显示正确的电池百分比和状态。 sudo service upower restart强制更新电池状态。

插入充电器时输出上upower --monitor-detail

 Monitoring activity from the power daemon. Press Ctrl+C to cancel. [00:55:46.411] device changed: /org/freedesktop/UPower/devices/battery_BAT1 native-path: BAT1 vendor: PANASONIC model: AS16B5J serial: 2217 power supply: yes updated: Wed 01 Feb 2017 12:55:46 AM EST (0 seconds ago) has history: yes has statistics: yes battery present: yes rechargeable: yes state: discharging warning-level: none energy: 50.9157 Wh energy-empty: 0 Wh energy-full: 55.6554 Wh energy-full-design: 62.16 Wh energy-rate: 6.6933 W voltage: 12.562 V time to empty: 7.6 hours percentage: 91% capacity: 89.5357% technology: lithium-ion icon-name: 'battery-full-symbolic' History (rate): 1485928546 6.693 discharging 1485928537 10.856 discharging 1485928517 6.083 discharging 1485928504 10.423 discharging 1485928485 6.149 discharging 1485928466 21.190 discharging 1485928463 6.371 discharging 1485928449 7.071 discharging [00:55:46.414] device changed: /org/freedesktop/UPower/devices/battery_BAT1 native-path: BAT1 vendor: PANASONIC model: AS16B5J serial: 2217 power supply: yes updated: Wed 01 Feb 2017 12:55:46 AM EST (0 seconds ago) has history: yes has statistics: yes battery present: yes rechargeable: yes state: discharging warning-level: none energy: 50.9157 Wh energy-empty: 0 Wh energy-full: 55.6554 Wh energy-full-design: 62.16 Wh energy-rate: 6.6933 W voltage: 12.562 V time to empty: 7.6 hours percentage: 91% capacity: 89.5357% technology: lithium-ion icon-name: 'battery-full-symbolic' History (rate): 1485928546 6.693 discharging 1485928537 10.856 discharging 1485928517 6.083 discharging 1485928504 10.423 discharging 1485928485 6.149 discharging 1485928466 21.190 discharging 1485928463 6.371 discharging 1485928449 7.071 discharging [00:55:46.417] device changed: /org/freedesktop/UPower/devices/battery_BAT1 native-path: BAT1 vendor: PANASONIC model: AS16B5J serial: 2217 power supply: yes updated: Wed 01 Feb 2017 12:55:46 AM EST (0 seconds ago) has history: yes has statistics: yes battery present: yes rechargeable: yes state: discharging warning-level: none energy: 50.9157 Wh energy-empty: 0 Wh energy-full: 55.6554 Wh energy-full-design: 62.16 Wh energy-rate: 6.6933 W voltage: 12.562 V time to empty: 7.6 hours percentage: 91% capacity: 89.5357% technology: lithium-ion icon-name: 'battery-full-symbolic' History (rate): 1485928546 6.693 discharging 1485928537 10.856 discharging 1485928517 6.083 discharging 1485928504 10.423 discharging 1485928485 6.149 discharging 1485928466 21.190 discharging 1485928463 6.371 discharging 1485928449 7.071 discharging [00:55:46.419] device changed: /org/freedesktop/UPower/devices/battery_BAT1 native-path: BAT1 vendor: PANASONIC model: AS16B5J serial: 2217 power supply: yes updated: Wed 01 Feb 2017 12:55:46 AM EST (0 seconds ago) has history: yes has statistics: yes battery present: yes rechargeable: yes state: discharging warning-level: none energy: 50.9157 Wh energy-empty: 0 Wh energy-full: 55.6554 Wh energy-full-design: 62.16 Wh energy-rate: 6.6933 W voltage: 12.562 V time to empty: 7.6 hours percentage: 91% capacity: 89.5357% technology: lithium-ion icon-name: 'battery-full-symbolic' History (rate): 1485928546 6.693 discharging 1485928537 10.856 discharging 1485928517 6.083 discharging 1485928504 10.423 discharging 1485928485 6.149 discharging 1485928466 21.190 discharging 1485928463 6.371 discharging 1485928449 7.071 discharging [00:55:46.422] device changed: /org/freedesktop/UPower/devices/line_power_ACAD native-path: ACAD power supply: yes updated: Wed 01 Feb 2017 12:55:46 AM EST (0 seconds ago) has history: no has statistics: no line-power warning-level: none online: yes icon-name: 'ac-adapter-symbolic' [00:55:46.422] device changed: /org/freedesktop/UPower/devices/line_power_ACAD native-path: ACAD power supply: yes updated: Wed 01 Feb 2017 12:55:46 AM EST (0 seconds ago) has history: no has statistics: no line-power warning-level: none online: yes icon-name: 'ac-adapter-symbolic' [00:55:46.422] daemon changed: daemon-version: 0.99.4 on-battery: no lid-is-closed: no lid-is-present: yes critical-action: HybridSleep 

拔下充电器时的输出:

 Monitoring activity from the power daemon. Press Ctrl+C to cancel. [00:58:17.752] device changed: /org/freedesktop/UPower/devices/battery_BAT1 native-path: BAT1 vendor: PANASONIC model: AS16B5J serial: 2217 power supply: yes updated: Wed 01 Feb 2017 12:58:17 AM EST (0 seconds ago) has history: yes has statistics: yes battery present: yes rechargeable: yes state: discharging warning-level: none energy: 50.838 Wh energy-empty: 0 Wh energy-full: 55.6554 Wh energy-full-design: 62.16 Wh energy-rate: 10.8669 W voltage: 12.656 V time to empty: 4.7 hours percentage: 91% capacity: 89.5357% technology: lithium-ion icon-name: 'battery-full-symbolic' History (charge): 1485928697 91.000 discharging 1485928672 0.000 unknown History (rate): 1485928697 10.867 discharging 1485928672 0.000 unknown [00:58:17.765] device changed: /org/freedesktop/UPower/devices/battery_BAT1 native-path: BAT1 vendor: PANASONIC model: AS16B5J serial: 2217 power supply: yes updated: Wed 01 Feb 2017 12:58:17 AM EST (0 seconds ago) has history: yes has statistics: yes battery present: yes rechargeable: yes state: discharging warning-level: none energy: 50.838 Wh energy-empty: 0 Wh energy-full: 55.6554 Wh energy-full-design: 62.16 Wh energy-rate: 10.8669 W voltage: 12.656 V time to empty: 4.7 hours percentage: 91% capacity: 89.5357% technology: lithium-ion icon-name: 'battery-full-symbolic' History (charge): 1485928697 91.000 discharging 1485928672 0.000 unknown History (rate): 1485928697 10.867 discharging 1485928672 0.000 unknown [00:58:17.773] device changed: /org/freedesktop/UPower/devices/battery_BAT1 native-path: BAT1 vendor: PANASONIC model: AS16B5J serial: 2217 power supply: yes updated: Wed 01 Feb 2017 12:58:17 AM EST (0 seconds ago) has history: yes has statistics: yes battery present: yes rechargeable: yes state: discharging warning-level: none energy: 50.838 Wh energy-empty: 0 Wh energy-full: 55.6554 Wh energy-full-design: 62.16 Wh energy-rate: 10.8669 W voltage: 12.656 V time to empty: 4.7 hours percentage: 91% capacity: 89.5357% technology: lithium-ion icon-name: 'battery-full-symbolic' History (charge): 1485928697 91.000 discharging 1485928672 0.000 unknown History (rate): 1485928697 10.867 discharging 1485928672 0.000 unknown [00:58:17.781] device changed: /org/freedesktop/UPower/devices/battery_BAT1 native-path: BAT1 vendor: PANASONIC model: AS16B5J serial: 2217 power supply: yes updated: Wed 01 Feb 2017 12:58:17 AM EST (0 seconds ago) has history: yes has statistics: yes battery present: yes rechargeable: yes state: discharging warning-level: none energy: 50.838 Wh energy-empty: 0 Wh energy-full: 55.6554 Wh energy-full-design: 62.16 Wh energy-rate: 10.8669 W voltage: 12.656 V time to empty: 4.7 hours percentage: 91% capacity: 89.5357% technology: lithium-ion icon-name: 'battery-full-symbolic' History (charge): 1485928697 91.000 discharging 1485928672 0.000 unknown History (rate): 1485928697 10.867 discharging 1485928672 0.000 unknown [00:58:17.789] device changed: /org/freedesktop/UPower/devices/battery_BAT1 native-path: BAT1 vendor: PANASONIC model: AS16B5J serial: 2217 power supply: yes updated: Wed 01 Feb 2017 12:58:17 AM EST (0 seconds ago) has history: yes has statistics: yes battery present: yes rechargeable: yes state: discharging warning-level: none energy: 50.838 Wh energy-empty: 0 Wh energy-full: 55.6554 Wh energy-full-design: 62.16 Wh energy-rate: 10.8669 W voltage: 12.656 V time to empty: 4.7 hours percentage: 91% capacity: 89.5357% technology: lithium-ion icon-name: 'battery-full-symbolic' History (charge): 1485928697 91.000 discharging 1485928672 0.000 unknown History (rate): 1485928697 10.867 discharging 1485928672 0.000 unknown [00:58:17.797] device changed: /org/freedesktop/UPower/devices/battery_BAT1 native-path: BAT1 vendor: PANASONIC model: AS16B5J serial: 2217 power supply: yes updated: Wed 01 Feb 2017 12:58:17 AM EST (0 seconds ago) has history: yes has statistics: yes battery present: yes rechargeable: yes state: discharging warning-level: none energy: 50.838 Wh energy-empty: 0 Wh energy-full: 55.6554 Wh energy-full-design: 62.16 Wh energy-rate: 10.8669 W voltage: 12.656 V time to empty: 4.7 hours percentage: 91% capacity: 89.5357% technology: lithium-ion icon-name: 'battery-full-symbolic' History (charge): 1485928697 91.000 discharging 1485928672 0.000 unknown History (rate): 1485928697 10.867 discharging 1485928672 0.000 unknown [00:58:17.803] device changed: /org/freedesktop/UPower/devices/battery_BAT1 native-path: BAT1 vendor: PANASONIC model: AS16B5J serial: 2217 power supply: yes updated: Wed 01 Feb 2017 12:58:17 AM EST (0 seconds ago) has history: yes has statistics: yes battery present: yes rechargeable: yes state: discharging warning-level: none energy: 50.838 Wh energy-empty: 0 Wh energy-full: 55.6554 Wh energy-full-design: 62.16 Wh energy-rate: 10.8669 W voltage: 12.656 V time to empty: 4.7 hours percentage: 91% capacity: 89.5357% technology: lithium-ion icon-name: 'battery-full-symbolic' History (charge): 1485928697 91.000 discharging 1485928672 0.000 unknown History (rate): 1485928697 10.867 discharging 1485928672 0.000 unknown [00:58:17.809] device changed: /org/freedesktop/UPower/devices/battery_BAT1 native-path: BAT1 vendor: PANASONIC model: AS16B5J serial: 2217 power supply: yes updated: Wed 01 Feb 2017 12:58:17 AM EST (0 seconds ago) has history: yes has statistics: yes battery present: yes rechargeable: yes state: discharging warning-level: none energy: 50.838 Wh energy-empty: 0 Wh energy-full: 55.6554 Wh energy-full-design: 62.16 Wh energy-rate: 10.8669 W voltage: 12.656 V time to empty: 4.7 hours percentage: 91% capacity: 89.5357% technology: lithium-ion icon-name: 'battery-full-symbolic' History (charge): 1485928697 91.000 discharging 1485928672 0.000 unknown History (rate): 1485928697 10.867 discharging 1485928672 0.000 unknown [00:58:17.811] device changed: /org/freedesktop/UPower/devices/line_power_ACAD native-path: ACAD power supply: yes updated: Wed 01 Feb 2017 12:58:17 AM EST (0 seconds ago) has history: no has statistics: no line-power warning-level: none online: no icon-name: 'ac-adapter-symbolic' [00:58:17.811] device changed: /org/freedesktop/UPower/devices/line_power_ACAD native-path: ACAD power supply: yes updated: Wed 01 Feb 2017 12:58:17 AM EST (0 seconds ago) has history: no has statistics: no line-power warning-level: none online: no icon-name: 'ac-adapter-symbolic' [00:58:17.811] daemon changed: daemon-version: 0.99.4 on-battery: yes lid-is-closed: no lid-is-present: yes critical-action: HybridSleep 

我注意到,当充电器插入时,电池状态仍在discharging 。 但是, /org/freedesktop/UPower/devices/line_power_ACAD正确online报告。 任何有关此问题的帮助表示赞赏。 我不记得在KDE上遇到过这个问题。

在我之前的一个项目中工作时,我发现Unity上的电源指示器确实显然有事件驱动的更新延迟,它源于UPower守护程序,这是该指标似乎用于获取电源信息的内容。 这会妨碍自定义脚本尝试通过UPower守护程序以一定的精度监视电池使用情况。 但是,UPower服务确实需要更新/刷新该信息。 下面的脚本利用了该dbus调用。 该脚本将被复制并保存为文件,最好保存在~/bin文件夹中。

用法非常简单: ./update_battery.py ,其中是您刷新信息的频率。 显然,你必须记住,非常频繁的刷新将导致更高的资源使用,所以我会建议或多或少明智的东西,例如3-10秒。

 #!/usr/bin/env python # -*- coding: utf-8 -*- import dbus import time import sys def run_dbus_method(bus_type, obj, path, interface, method, arg): if bus_type == "session": bus = dbus.SessionBus() elif bus_type == "system": bus = dbus.SystemBus() else: return None proxy = bus.get_object(obj, path) dbus_method = proxy.get_dbus_method(method, interface) return dbus_method(arg) if arg else dbus_method() def find_battery_path(): call = [ 'system', 'org.freedesktop.UPower', '/org/freedesktop/UPower', 'org.freedesktop.UPower', 'EnumerateDevices', None ] devices = run_dbus_method(*call) for i in devices: if 'BAT' in i: return str(i) def main(): bat_path = find_battery_path() call = [ 'system', 'org.freedesktop.UPower', bat_path, 'org.freedesktop.UPower.Device', 'Refresh', None ] timeout = int(sys.argv[1]) while True: run_dbus_method(*call) time.sleep(timeout) if __name__ == '__main__': main() 

Sergiy的回答有效,但它给我带来了一些微妙的口吃表现问题。 我修改它以提高效率。

首先,我修改了update-battery.py以删除睡眠循环:

 #!/usr/bin/env python # -*- coding: utf-8 -*- import dbus def run_dbus_method(bus_type, obj, path, interface, method, arg): if bus_type == "session": bus = dbus.SessionBus() elif bus_type == "system": bus = dbus.SystemBus() else: return None proxy = bus.get_object(obj, path) dbus_method = proxy.get_dbus_method(method, interface) return dbus_method(arg) if arg else dbus_method() def find_battery_path(): call = ['system', 'org.freedesktop.UPower', '/org/freedesktop/UPower', 'org.freedesktop.UPower', 'EnumerateDevices', None] devices = run_dbus_method(*call) for i in devices: if 'BAT' in i: return str(i) return None def main(): bat_path = find_battery_path() call = ['system', 'org.freedesktop.UPower', bat_path, 'org.freedesktop.UPower.Device', 'Refresh', None] run_dbus_method(*call) if __name__ == '__main__': main() 

然后我创建了一个单独的bash脚本,每隔5秒调用update-battery.py,但只在必要时调用它。 我称之为keep-battery-updated,并将其添加为启动脚本。

 #!/bin/bash # # @version 1.0 # @script keep-battery-updated # @description keeps the battery status updated # ## while sleep 5; do badbattery=$(upower -i /org/freedesktop/UPower/devices/battery_BAT0 | grep state: | cut -d ':' -f 2 | xargs) case $badbattery in discharging) badbattery="Discharging" ;; charging) badbattery="Charging" ;; fully-charged) badbattery="Full" ;; esac goodbattery=$(acpi -V | grep Battery | sed -n 1p | cut -d ':' -f 2 | cut -d ',' -f 1 | xargs) if [ $badbattery != $goodbattery ]; then python3 /usr/local/bin/update-battery.py fi done 

现在电池每5秒更新一次,到目前为止没有明显的性能问题