可以先安装d-feet,可以查看系统里所有的DBus连接
sudo apt-get install d-feet
查看电池的状态:
cat /sys/class/power_supply/BAT0/status
查看剩余电量百分比:
cat /sys/class/power_supply/BAT0/capacity
如果有多块电池,查看第二块电池的状态的命令中,上面的目录要改成BAT1等等。
参考来自:
https://www.ubuntukylin.com/news/1497-cn.html
在优麒麟系统的桌面应用中,电源管理工具(ukui-power-manager)能够监听系统事件和用户偏好设置,用来设置电源选项和屏保选项,比如设置显示器空闲多久进入睡眠和屏保采用的界面,同时还提供了显示电源相关的属性,功率,充放电统计等功能。相比台式机,笔记本电脑增加了电池相关的属性收集和显示。
ukui-power-manager主要包括了三个部分:
1、数据来源
这些界面的内容并不复杂,值得一探究竟的是界面上显示元素的数据来源。当笔记本接上电源电池开始充电,ukui-power-manager
的界面能够显示充满电时间。我们就从这个time_to_full值获取的入口出发,来理解整个显示元素的数据来源。这个值是通过一个名称为gpm_stats_update_info_page_details
的函数内部调用g_object_get
函数获取的。g_object_get则是GObject提供的一个函数。
ukui-power-manager只是一个前端显示程序,在它后面存在一个程序,提供了诸如充放电时间这样的数据。这个后端程序就是upower,在upower中用来计算time_to_full的公式如下:
time_to_full = 3600 * ((energy_full - energy) / energy_rate);
不难理解,公式意思是满时的能量减去当前能量,得到的差值除以功率,再把结果转换成秒单位。那么这几个新引入的变量又从哪里获取的?满时能量按常理在运行时是不会改变的,功率可能有大有小,变化应该也不大。当前能量是通过sysfs_get_double这个函数的返回值获得,在这个函数内部打开了一个文件,然后从文件里获取到了数据。这个文件是由内核进行写操作的。至此,找到了界面上数据time_to_full的源头。
2、DBus和GObjec共同的作用
1)基本概念
DBus是一种进程间进行通信的机制,在桌面程序中大量地应用。它主要的概念就是总线,开发者注册进程到总线,然后就可以通过方法和信号进行通信。DBus底层是socket机制,提供了更高一层的接口,更方便了程序之间进行数据交换。GObject 是GTK+的一个程序库,提供使用 C 语言编写面向对象程序的方法。
2)作用
现在来看一看前端ukui-power-manager和upower的具体源代码,发现都使用了DBus这种通信框架。要想完全理解DBus又是一个不小的专题,这里只是管中窥豹,了解一些基本的用法。d-feet是一个非常有用的工具,可以查看系统里所有的DBus连接。终端敲入命令d-feet,可以看到有一个系统Bus叫做org.freedesktop.UPower,还可以看到一个会话Bus叫做org.ukui.PowerManager。于是这两个程序就可以通过Bus连接进行数据通信。
打开d-feet界面的org.ukui.PowerManager这个Bus连接,找到它提供的接口org.ukui.PowerManager.Backlight。找到方法SetBrightness并双击弹出输入参数界面,如下图所示,简单的输入79,点击运行发现屏幕背光亮度发生了调整。通过这种简单的方式,调用了DBus服务端提供的一个方法,把亮度调节到了79的百分比。
电源管理模块从程序上来说,主要分为下面三个部分:
ukui-power-backlight-helper —– 设置和获取亮度程序。
ukui-power-manager ————- 守护程序。(主要源文件:gpm-main.c)
ukui-power-statistics ——— 显示程序。(主要源文件:gpm-statistics.c)
下面这个图标和菜单选择就是 ukui-power-manager 这个程序提供的,注意到托盘图标,菜单项图标和文字是根据设备的当前状况进行动态更新。
优麒麟电源管理浅析 https://imcn.me/html/y2019/35674.html
1、优麒麟电源管理程序的组成和介绍
电源管理模块从程序上来说,主要分为下面三个部分:
ukui-power-backlight-helper —– 设置和获取亮度程序。
ukui-power-manager ————- 守护程序。(主要源文件:gpm-main.c)
ukui-power-statistics ——— 显示程序。(主要源文件:gpm-statistics.c)
下面这个图标和菜单选择就是 ukui-power-manager 这个程序提供的,注意到托盘图标,菜单项图标和文字是根据设备的当前状况进行动态更新。
点击“电源选项”可以方便调用控制面板的电源选项 ukui-control-center。控制中心实现了三组功能的设置。最上面一组是设置空闲多久显示器和计算机进入睡眠和笔记本盖子合上的动作,分为使用电源和使用电池两种情况。中间一组是按下电源物理键的动作,可以选择询问或者挂起等。最下面一组设置了托盘图标的显示策略,选择总是显示会在托盘一直存在一个程序图标,选择仅使用电池则只有电池存在才会显示托盘程序图标。
通过下面控制面板的滑动条就会调用 ukui-power-backlight-helper 程序,滑动条向右滑动可以增大屏幕亮度。背后其实是调用了 ukui-power-backlight-helper 程序。
2、优麒麟电源管理程序和其他程序的dbus交互
a、以笔记本盖子合上的过程作为例子来说明:
当笔记本盖子合上,org.freedesktop.UPower 这个后台程序发送回来lid_is_closed 属性改变的信号,ukui.power.manager 对这个信息做出反应。先判断是否允许盖子合上的功能。再获取gsettings的设置和是否使用电池,据此调用服务 org.freedesktop.login1 的功能函数,比如:suspend,hibernate,shutdown 等。
流程图如下:
b、还有其他的一些 dbus 进程交互。例如 upower 服务端,screensaver,login1 和 SessionManager。
以上就是对电源管理模块组成和交互的一些分析和理解,还有很多知识没有介绍到,有兴趣研究源码的可以到这个代码链接看看:
https://github.com/ukui/ukui-power-manager