優麒麟電源管理淺析(二)

發布時間:2019-11-21 09:55:39 點擊次數:471

優麒麟電源管理程序的組成和介紹電源管理模塊從程序上來說,主要分為三個部分:ukui-power-backlight-helper 、ukui-power-manager 、ukui-power-statistics 。

1、優麒麟電源管理程序的組成和介紹

電源管理模塊從程序上來說,主要分為下面三個部分:

  • ukui-power-backlight-helper ----- 設置和獲取亮度程序。

  • ukui-power-manager ------------- 守護程序。(主要源文件:gpm-main.c)

  • ukui-power-statistics --------- 顯示程序。(主要源文件:gpm-statistics.c)

下面這個圖標和菜單選擇就是 ukui-power-manager 這個程序提供的,注意到托盤圖標,菜單項圖標和文字是根據設備的當前狀況進行動態更新。

優麒麟(Ubuntu Kylin)

圖1

點擊“可用電源”可以方便的調用顯示程序 ukui-power-statistics,顯示程序分為了左右兩側,左側列出了當前的設備,在本例中是交流電適配器和某型號的電池。右側是選中設備的信息。每種設備的信息種類和信息量多少是不一樣的。比如交流電適配器只有一個標簽頁來表示就夠了,但是電池就包含了三個標簽頁,分別是詳細,歷史,統計。詳細標簽頁列出了電池的類型,功率,型號,充放電狀態,充放電時間等;歷史標簽頁繪制了四種圖表,分別反映了電量,功率,充電時間,放電時間四種類型的數據,每種數據又可以根據不同的時間來選擇范圍。統計標簽包含了四種類型數據,分別是充電,充電精度,放電,放電精度。此外,每種圖表都可以選擇是否顯示數據點,是否繪制平滑曲線。

優麒麟(Ubuntu Kylin)

圖2

點擊“電源選項”可以方便調用控制面板的電源選項 ukui-control-center??刂浦行膶崿F了三組功能的設置。最上面一組是設置空閑多久顯示器和計算機進入睡眠和筆記本蓋子合上的動作,分為使用電源和使用電池兩種情況。中間一組是按下電源物理鍵的動作,可以選擇詢問或者掛起等。最下面一組設置了托盤圖標的顯示策略,選擇總是顯示會在托盤一直存在一個程序圖標,選擇僅使用電池則只有電池存在才會顯示托盤程序圖標。

優麒麟(Ubuntu Kylin)

圖3

通過下面控制面板的滑動條就會調用 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 等。

流程圖如下:

優麒麟(Ubuntu Kylin)

圖4

b、還有其他的一些 dbus 進程交互。例如 upower 服務端,screensaver,login1 和 SessionManager。

和其他dbus服務的交互

org.freedesktop.UPower

服務名稱

org.freedesktop.UPower 

對象

/org/freedesktop/UPower

接口名稱

org.freedesktop.UPower

連接的信號

device-added

參數string object_path

device-removed

參數string object_path

notify

device-monitor

參數:GParamSpec

連接dbus服務org.ukui.ScreenSaver

對象

/

接口

org.ukui.ScreenSaver

接口調用函數

Lock

in參數(none)

out參數(none)

Throttle

in參數(s,s)

out參數(uint)

UnThrottle

in參數(unit) 

接口調用函數

GetActive

in參數(none)

out參數(bool)

SimulateUserActivity 

UnThrottle

in參數(unit) 

關機休眠等功能函數調用的服務org.freedesktop.login1

對象

/org/freedesktop/login1

 

接口

org.freedesktop.login1.Manager

 

接口調用函數

Suspend

參數(b)

PowerOff

參數(b)

Hibernate

參數(b)

接口調用函數

Inhibit

參數"(ssss)"

dbus服務org.ukui.ScreenSaver 

對象

/

接口

org.ukui.ScreenSaver

接口調用函數

Lock

in參數(none)

out參數(none)

Throttle

in參數(s,s)

out參數(uint)

UnThrottle

in參數(unit) 

接口調用函數

GetActive

in參數(none)

out參數(bool)

SimulateUserActivity

UnThrottle

in參數(unit) 

org.gnome.SessionManager

dbus服務

對象名稱

/org/gnome/SessionManager

接口名稱

org.gnome.SessionManager

連接的信號

IsInhibited

shutdown 

inhibitorAdded

inhibitorRemoved

功能作用

獲取空閑和掛起的禁止策略

對象名稱

/org/gnome/SessionManager

接口名稱

org.freedesktop.DBus.Properties

方法調用

Get

功能作用

獲取空閑的狀態

對象名稱

/org/gnome/SessionManager/Presence 

接口名稱

org.gnome.SessionManager.Presence

連接的信號

StatusChanged 

以上就是對電源管理模塊組成和交互的一些分析和理解,還有很多知識沒有介紹到,有興趣研究源碼的可以到這個代碼鏈接看看:https://github.com/ukui/ukui-power-manager。

2011开彩票投注店