openKylin论坛

 找回密码

【麒麟在线讲堂】控制中心设置生效原理 [复制链接]

概述:本文将以优麒麟操作系统内嵌的控制中心部分插件为例,讲解UKUI桌面环境下控制中心的设置生效原理。


1 什么是控制中心
控制中心(又称控制面板)是供用户快速、可视化地实现系统功能设置的可扩展应用,它提供了良好的可视化和可操作界面,供用户进行一系列的系统设置。UKUI控制中心为每一类设置都注册了单独的插件,具有很强的可扩展性,可以根据需求灵活地添加和删除插件,图1列出了目前控制中心所提供的所有插件:

图1  控制中心插件结构图


2  实现原理
从设置主体来看,控制中心的设置实现可分为调用第三方应用/API和控制中心自行进行文件操作两种方式,其中,调用第三方API的实现方式又包含gsettings接口调用和DBus服务调用两种具体的方法。控制面板将些操作封装后映射到具体的UI控件上,例如一个QPushButton(Qt按钮类)、SwitchButton(开关型按钮类)、QSlider(Qt滑动条类)、QLineEdit(Qt输入框类)或QComboBox(Qt下拉框类)等,供用户进行可视化的系统设置。接下来,我们将以具体插件和功能点为例,讲解上述实现原理:

2.1 调用第三方应用API
2.1.1 GSettings方式实现设置:
如果进行系统只需要传递一个简单参数的设置,控制中心大多采用gsettings接口进行设置,对常见的double(float、int)型参数、bool型参数和string型参数,一般映射到滑动条、开关型按钮和下拉框类UI控件。如图2所示,我们以控制中心“鼠标”插件为例来进行详细的说明:
图2 控制中心“鼠标”插件部分功能点

“鼠标”插件是一个典型的调用gsettings接口完成设置的插件,其提供的诸如鼠标滚轮速度、指针移动速度、光标闪烁速度等与鼠标设备相关的功能设置项均是通过gsettings接口实现的:1)鼠标指针速度调用了org.ukui.peripherals-mouse接口的motion-acceleration参数,为double型,取值1.0~10.0;2)鼠标可见性对应上述接口的locate-pointer参数,为bool型;指针大小对应cursor-size参数,为int型(由于此值可选择项的可枚举性,故映射到QComboBox)。控制中心设置成功后,由接口提供者实现诸如改变指针速度等的具体功能。此外,控制中心在启动时,也通过对应的接口获取某些配置当前值,并将其反映到对应UI控件上,供用户了解当前系统状态。


2.1.2 DBus服务方式实现设置:
对于比较复杂的交互逻辑,我们一般通过DBus服务的方式实现,这种交互背景下GSettings往往无法满足。此时控制中心可以通过第三方应用注册的DBus服务,调用对方的属性、信号以及具体的方法来实现。例如,“网络”插件中,控制中心通过绑定org.freedesktop.NetworkManager的DBus接口,可以监听到网络管理组件发出的"NewConnection"(有新的网络连接)、"ConnectionRemoved"(有网络连接被删除)等信号,并以此为依据刷新控制中心网络列表。此外,控制面板部分功能也可以通过调用第三方应用DBus服务提供的方法,例如系统语言的设置:


图3  控制中心“语言与地区”插件部分功能点


该功能取自控制中心“语言与地区”插件,该插件提供当前区域、当前语言与区域数据格式的设置,其中,当前区域与当前语言的设置都是通过调用系统DBus服务提供的方法实现的。如图3所示的修改系统语言功能,控制面板调用了org.freedesktop.Accounts接口的setLanguage方法,以此实现系统语言的更改。值得一提的是,控制面板为了实现某些文件操作,也注册了自己的系统DBus服务,我们将在后面更详细地解释。


2.2 文件操作
除去调用第三方应用API的实现方式,控制面板也有一部分功能是自行进行文件操作实现的,以“开机启动”插件为例:


图4  控制中心“开机启动”插件部分功能点

“开机启动”插件是供用户管理应用开机启动情况的插件,用户可以在此修改系统应用是否开机自启动,也可以手动添加用户自己安装的应用为开机自启动项。控制中心通过Gtk提供的keyfile类解析应用的.desktop文件,并通过解析的文件属性区分系统应用和其他应用,并通过修改.desktop的文件属性设置其是否开机自启动。此外,控制中心在修改用户头像、壁纸、锁屏背景等时,也需要对文件进行转存操作,但此类操作往往用来服务其他应用完成对应设置。


图5  控制中心“用户信息”插件部分功能点

除开机启动外的文件解析与转存外,控制中心还有一类设置需要通过改写系统配置文件来实现,例如“用户信息”插件的“免密登录”、“自动登录”等功能。此类功能由于涉及到/etc目录下的文件更改,无法用简单的QFile文件读写来实现,故而控制中心注册了自己的system DBus来实现此类操作,控制中心在此类DBus中注册的方法大多采用QSettings实现文件写入,这是一种方便快捷的配置文件读写方法。


楼主
发表于 2021-2-20 08:59:02
回复

使用道具 举报

openKylin

GMT+8, 2024-5-18 23:34 , Processed in 0.023108 second(s), 21 queries , Gzip On.

Copyright ©2022 openKylin. All Rights Reserved .

ICP No. 15002470-12 Tianjin

快速回复 返回顶部 返回列表