優麒麟電源管理淺析

發布時間:2019-08-19 16:56:28 點擊次數:241

最近有研發小哥哥的加持,軟文高頻產出,目的是能讓大家更深入的了解和使用我們的優麒麟操作系統,本期為大家介紹的是優麒麟電源管理工具。在優麒麟系統的桌面應用中,電源管理工具(ukui-power-manager)能夠監聽系統事件和用戶偏好設置,用來設置電源選項和屏保選項,比如設置顯示器空閑多久進入睡眠和屏保采用的界面,同時還提供了顯示電源相關的屬性,功率,充放電統計等功能。相比臺式機,筆記本電腦增加了

最近有研發小哥哥的加持,軟文高頻產出,目的是能讓大家更深入的了解和使用我們的優麒麟操作系統,本期為大家介紹的是優麒麟電源管理工具。

在優麒麟系統的桌面應用中,電源管理工具(ukui-power-manager)能夠監聽系統事件和用戶偏好設置,用來設置電源選項和屏保選項,比如設置顯示器空閑多久進入睡眠和屏保采用的界面,同時還提供了顯示電源相關的屬性,功率,充放電統計等功能。相比臺式機,筆記本電腦增加了電池相關的屬性收集和顯示,筆記本上的應用界面如圖1。

優麒麟(Ubuntu Kylin)優麒麟(Ubuntu Kylin)

圖1 ukui-power-manager顯示界面

ukui-power-manager主要包括了三個部分:

優麒麟(Ubuntu Kylin)

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共同的作用

優麒麟(Ubuntu Kylin)

圖2 DBus和GObject層次

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連接進行數據通信。


優麒麟(Ubuntu Kylin)

圖3 d-feet查看Bus通信

打開d-feet界面的org.ukui.PowerManager這個Bus連接,找到它提供的接口org.ukui.PowerManager.Backlight。找到方法SetBrightness并雙擊彈出輸入參數界面,如下圖所示,簡單的輸入79,點擊運行發現屏幕背光亮度發生了調整。通過這種簡單的方式,調用了DBus服務端提供的一個方法,把亮度調節到了79的百分比。

優麒麟(Ubuntu Kylin)

圖4 d-feet中運行方法

以上就是對優麒麟電源管理工具和使用的編程技術的一些簡單分析,希望可以給初次接觸優麒麟桌面的讀者帶來一點感性認識,歡迎大家進一步探究具體實現的詳細過程。


170彩票平台3b