Linux电源管理研究笔记—gnome

通过以上几幅图片,我们已经了解到gnome-power-manager的基本功能,但这些功能都是从用户角度来看的。下面我们再从程序内部来看看,在gnome-power-manager的代码中,有一个名为gpm-manager.xml的文件,从其内容我们知道这是一个dbus服务对象接口定义,它实现了一个org.gnome.PowerManager接口,这个接口提供了基本的电源管理功能。在acpid一文中,我们说过acpid是内核与应用程序之间的接口,但是acpid对普通应用程序来说还是过于底层,而gnome-power-manager才是普通应用程序应该调用的接口。

gpm-manager.xml中定义的主要接口有:

1. GetLowPowerMode 是否使用了低耗能模式。

2. GetOnAc 是否使用的交流电源。

3. AllowedSuspend 能否挂起。

4. AllowedHibernate 能否睡眠。

5. AllowedShutdown 能否关机。

6. AllowedReboot 能否重起。

7. Hibernate 睡眠

8. Suspend 挂起

9. Shutdown 关机

10. Reboot 重起

11. GetDpmsMode 得到显示器电源管理模式。

12. SetDpmsMode 设置显示器电源管理模式。

13. Inhibit 禁用电源管理功能。比如文件管理在拷贝文件时,为了防止系统在此时挂起或者睡眠,可以暂时禁用电源管理,直到拷贝完成。

14. UnInhibit 恢复电源管理功能。

下面我们再看以上这些函数的实现方式,这才是我真正关心的。

1. GetLowPowerMode

这个函数实现很简单,只是一项简单的配置信息,通过gconf_client_get_bool获取GPM_PREF_AC_LOWPOWER或者GPM_PREF_BATTERY_LOWPOWER,这取决于当前的电源类型。

2. GetOnAc

通过向hal服务进程发送FindDeviceByCapability请求,可以得到是否支持交流电源的属性。然后发送GetPropertyBoolean(ac_adapter.present) 请求,可以得到交流电源是否存在。

3. AllowedSuspend

4. AllowedHibernate

以上函数都是通过向hal服务进程发送GetPropertyBoolean请求,得到对应的属性值。

5. AllowedShutdown

6. AllowedReboot

以上函数都是通过向hal服务进程发送IsUserPrivileged请求,查看当前用户是否具有权限决定。

7. Hibernate 睡眠

8. Suspend 挂起

9. Shutdown 关机

10. Reboot 重起

以上函数都是通过向hal服务进程发送相应请求来实现。请求分别为Hibernate、Suspend、Shutdown和Reboot。

11. GetDpmsMode 得到显示器电源管理模式。

12. SetDpmsMode 设置显示器电源管理模式。

以上函数都是通过X11的DPMS扩展实现的。当然X11只是封装了DPMS功能,真正的实现是在内核的显示驱动程序里。DPMS比较重要,因为显示设备通常是耗电大户,如果可能的话,我们会用专门一章来讲解。

13. Inhibit

14. UnInhibit

这两个函数的实现很简单:Inhibit把应用程序的dbus-connection(标识发送请求的应用程序)加入到一个链表中。UnInhibit则从该链表中删除应用程序的dbus-connection。如果该链表不为空,则禁用电源管理功能。

综上所述,gnome-power-manager即是一个直接面对最终用户的应用程序,也是一个中间层。作为中间层,它把hal和x11提供的底层细节封装起来了,同时为其它应用程序提供了更高层的服务接口。

~~end~

有希望在的地方,痛苦也成欢乐

Linux电源管理研究笔记—gnome

相关文章:

你感兴趣的文章:

标签云: