GSettings(三)——GSettings底层原理

        GSettings 是基于 D-Bus 的高级配置系统,主要用于 GNOME 桌面环境和其他依赖 GSettings 的应用程序。它通过 GObject 库与 DConf 进行通信,以便读取和写入配置数据。

GSettings 工作原理

GSettings API:

  • 开发人员通过 GSettings API 来读取和写入配置键值。
  • GSettings API 提供了简便的方法,如 g_settings_get_value 和 g_settings_set_value,用于访问和修改配置数据。

D-Bus 通信:

  • GSettings 底层使用 D-Bus 与 DConf 后端进行通信。
  • D-Bus 是一个消息传递系统,允许应用程序相互通信。GSettings 通过 D-Bus 将配置更改请求发送到 DConf 后端。

DConf 后端:

  • DConf 是 GSettings 的后端存储系统,负责存储实际的配置数据。
  • DConf daemon (dconf-service) 监听来自 GSettings 的请求,并执行相应的读取或写入操作。
  • 配置数据存储在用户的 DConf 数据库中,通常位于 ~/.config/dconf/user 文件中。

GSettings 设置键值的过程

GSettings 客户端代码:

  • 客户端代码调用 GSettings API 以设置某个键值。
  • 例如:g_settings_set_value (settings, "some-key", g_variant_new_string ("new-value"));

GObject 库:

  • GSettings API 通过 GObject 库与 D-Bus 进行通信。
  • GObject 库封装了复杂的 D-Bus 通信逻辑,提供了高级接口供开发者使用。

D-Bus 消息:

  • GObject 库构建并发送 D-Bus 消息,包含需要设置的键值及其新值。
  • 消息通过会话总线(session bus)发送到 DConf 后端。

DConf 后端处理:

  • DConf daemon 接收 D-Bus 消息并解析请求。
  • 它根据请求修改用户的 DConf 数据库中的相应键值。

返回确认:

  • DConf 后端处理完成后,通过 D-Bus 返回确认消息给 GSettings 客户端。
  • GSettings 客户端接收到确认消息后,可以继续其他操作。

示例代码

        以下是一个使用 GSettings 设置键值的示例代码(使用 C 语言):

#include <gio/gio.h>
#include <stdio.h>int main(int argc, char *argv[])
{GSettings *settings;gboolean success;// 初始化 GSettingssettings = g_settings_new("com.test.datetime");// 设置键值success = g_settings_set_string(settings, "timeformat", "12 小时");if (success) {printf("设置成功\n");} else {printf("设置失败\n");}// 释放 GSettings 对象g_object_unref(settings);return 0;
}

总结

        GSettings 通过 GObject 库与 D-Bus 进行通信,将配置请求发送到 DConf 后端,由 DConf 后端实际存储和管理配置数据。这种设计使得 GSettings 成为一个高效且灵活的配置管理系统,广泛应用于 GNOME 桌面环境及其他依赖 GSettings 的应用程序。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/31888.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Spring Boot启动报错Lombok supports: sun/apple javac 1.6, ECJ

版本 idea 2023.3.4 <dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.32</version></dependency> 解决方式 File->Settings->Build, Execution, Deployment->Com…

利用机器学习重构视频中的人脸

引言 中国与英国的研究团队携手合作&#xff0c;开创了一种创新的视频面孔重塑技术。这项技术能够以极高的一致性对视频中的面部结构进行逼真的放大和缩小&#xff0c;且避免了常见伪影的产生。 从研究人员选取的YouTube视频样例中可见&#xff0c;经过处理后&#xff0c;女演…

机器学习——训练集、测试集、验证集与模型选择

在机器学习的过程中&#xff0c;数据的划分是至关重要的步骤。为了评估模型的泛化性能&#xff0c;我们通常会将数据集划分为训练集、测试集和验证集。这三个集合各有不同的作用&#xff0c;下面我们将逐一介绍。一、训练集 训练集是用于训练模型的数据集。通过使用训练…

UE4中性能优化和检测工具

UE4中性能优化和检测工具合集 简述CPUUnreal InsightUnreal ProfilerSimpleperfAndroid StudioPerfettoXCode TimeprofilerBest Practice GPUAdreno GPUMali GPUAndroid GPU Inspector (AGI) 内存堆内存分析Android StudioLoliProfilerUE5 Memory InsightsUnity Mono 内存Memre…

去水印助手,小熊录屏,OldRoll复古胶片相机

我们将带大家了解三款特色应用,软件是经过大佬处理过的&#xff0c;都非常的好用&#xff01;今天分享给大家&#xff01;如果你也喜欢这几款软件不要忘记给博主点击点赞和再看哦&#xff01; 软件获取链接在链接的底部&#xff1a; 一键去水印助手 无论您是在各大社交平台上…

【LinuxC语言】互斥量

文章目录 前言一、为什么要引入互斥量二、临界区的概念互斥量pthread_mutex_t类型pthread_mutex_init()pthread_mutex_destroy()pthread_mutex_lock()函数pthread_mutex_trylock()函数pthread_mutex_unlock()函数总结前言 在并发编程中,我们经常会遇到多个线程需要访问和修改…

android倒计时封装(活动进入后台,倒计时依然能正常计时)

public class TimeUtils { /倒计时时长 单位&#xff1a;秒/ public static int COUNT 20*60; /当前做/ private static int CURR_COUNT 0; /预计结束的时间/ private static long TIME_END 0; /计时器/ private static Timer countdownTimer; /显示倒计时的textVi…

Keil MDK生成LIB库以及使用LIB库

一.keil下lib静态库的使用具有以下优点&#xff1a; 1.封装源代码&#xff0c;对外不开放&#xff0c;提高保密性。 2.将标准功能函数封装成库&#xff0c;提高代码的复用性。 3.使用库开发&#xff0c;简化开发流程&#xff0c;提高开发效率。 4.系统调用库函数&#xff0…

第三十五章 添加和使用自定义标题元素 - 向 SOAP 消息添加自定义标头元素

文章目录 第三十五章 添加和使用自定义标题元素 - 向 SOAP 消息添加自定义标头元素向 SOAP 消息添加自定义标头元素指定支持的标头元素 第三十五章 添加和使用自定义标题元素 - 向 SOAP 消息添加自定义标头元素 向 SOAP 消息添加自定义标头元素 要将自定义标头元素添加到 SOA…

51单片机STC89C52RC——5.1 LCD1602液晶显示屏

目录 目的 一&#xff0c;STC单片机模块 二&#xff0c;LCD1602 2.1 模块简介 2.2 针脚 2.3 DDRAM地址与显示器对应关系 2.4 标准字库表 2.5 常用指令 2.6 读写操作 三&#xff0c;创建Keil项目 四&#xff0c;代码 五&#xff0c;代码编译、下载到51单片机 六&a…

PyTorch -- Batch Normalization(BN) 快速实践

Batch Normalization 可以 改善梯度消失/爆炸问题&#xff1a;前面层的梯度经过多次传递后会变得非常小(大)&#xff0c;从而导致网络收敛速度慢(不收敛)&#xff0c;应用 BN 可缓解加速网络收敛&#xff1a;BN 使得每个神经元的输入分布更加稳定减少过拟合&#xff1a;BN 可减…

【ISAC】paper_NOMA Empowered Integrated Sensing and Communication

NOMA Empowered Integrated Sensing and Communication. 文章目录 ModelCommunication ModelSensing ModelProblem FormulationSolutionModel Dual-functional base station (BS) equipped with an N N N-antennas uniform linear array (ULA). Communication Model K = { …

【ajax基础01】ajax简介

目录 一&#xff1a;ajax简介 1 什么是ajax 二&#xff1a;ajax使用 1 如何使用ajax 2 axios使用&#xff08;重点&#xff09; 三&#xff1a;案例 四&#xff1a;如何赚钱 一&#xff1a;ajax简介 1 什么是ajax AJAX&#xff08;Asynchronous JavaScript And XML &am…

Java练习题4

1.SSM框架整合思路 &#xff08;1&#xff09;搭建项目基础结构。首先需要在数据库中搭建项目对应的数据库环境&#xff1b;然后创建一个Maven Web项目&#xff0c;并引入案例所需的依赖&#xff1b;最后创建项目的实体类&#xff0c;创建三层架构对应的模块、类和接口。 &am…

ubuntu22更改国内更新源的方法

专栏总目录 一、备份 备份文件sources.list文件 sudo cp /etc/apt/sources.list /etc/apt/sources.list.backup二、编辑源文件 &#xff08;一&#xff09;安装geany 如果使用vi也可以&#xff0c;个人感觉geany用的习惯而已 安装命令如下&#xff1a; sudo apt install g…

展厅装修时候需要注意哪些细节

1、视觉方面 展厅应该具有很强的视觉冲击力。只有这样不论是领导视察还是合作的客户进行参观的时候才会对展厅产生浓厚的兴趣&#xff0c;同时产生一种亲和力&#xff0c;并直接加深对企业的识别度和记忆度。而个性化设计要跟企业文化相符合。这里&#xff0c;企业标志为寻求个…

为何云原生是未来?企业IT架构的颠覆与重构

&#x1f407;明明跟你说过&#xff1a;个人主页 &#x1f3c5;个人专栏&#xff1a;《未来已来&#xff1a;云原生之旅》&#x1f3c5; &#x1f516;行路有良友&#xff0c;便是天堂&#x1f516; 目录 一、引言 1、什么是云原生 2、云原生的背景和起源 背景 起源 关…

[JS]数据类型

介绍 在计算中一切事物都是数据, 为了提高数据的存储和使用效率, 要对数据进行类型的分类 栈(操作系统): 由操作系统自动分配释放函数的参数值, 局部变量的值等, 其操作方式类似于数据结构中的栈; 基本数据类型存放在栈里面string, number, boolean, undefined, null 堆(操作…

matplotlib 创建多个子图

有些时候我们需要用for循环来创建多个子图&#xff0c;来对比特征。现在已画出8组随机数来作为示例。 from matplotlib import pyplot as plt import numpy as np #设置画布大小 figplt.figure(figsize(20,8)) #解决中文乱码问题 plt.rcParams[font.sans-serif] [SimHei] fo…

【2024最新精简版】Kafka面试篇

文章目录 Kafka和RabbitMQ什么区别讲一讲Kafka架构你们项目中哪里用到了Kafka?为什么会选择使用Kafka? 有什么好处 ?使用Kafka如何保证消息不丢失 ?消息的重复消费问题如何解决的 ?Kafka如何保证消费的顺序性 ?Kafka的高可用机制有了解过嘛 ?Kafka实现高性能的设计有了解…