NEWS

新闻

了解openKylin最新资讯,关注社区和产品动态。

NEWS

Learn about the latest news.

【干货分享】openKylin系统中如何使用Golang调用D-Bus

2024-12-26 10:03:46

引言


《openKylin系统如何搭建配置Golang环境》中,为大家介绍了openKylin系统如何安装、配置和运行Gloang程序。本篇则是将Golang和桌面开发不可或缺的D-Bus技术相融合,介绍和实现Golang和D-Bus间的交互。

概念介绍


1.1 Golang回顾

Golang(Go)是一种由Google公司开发的编程语言,于2009年首次发布,是一种高效、快速和容易使用的语言,具有强大的并发处理能力,适合用于构建分布式系统和大规模网络应用程序等,是从程序和结构方面来实现并发编程。因为Go 语言使用静态类型,所以它是类型安全的。

1.2 D-Bus简介

D-Bus是Desktop Bus的缩写,是针对桌面环境优化的IPC(InterProcess Communication)机制,用于进程间的通信或进程与内核的通信,D-Bus分为两种总线:SystemBus和SessionBus。SystemBus只有一条,SessionBus是一个用户会话时就会产生一条。两种的主要区别是SystemBus一般是用于权限较高的系统级(root)进程与其他进程(可以是普通进程)的通信,而SessionBus是用于普通的用户进程之间的交流。


D-Bus使用


在openKylin系统终端中执行命令d-feet,可以看到下图D-Bus 界面。若提示不存在,则可以在终端中使用命令sudo apt update后,再执行sudo apt install d-feet进行安装,图1 D-Bus展示界面及执行d-feet命令后显示的界面。

openKylin(开放麒麟)

图1  D-Bus界面

可以看到分为SystemBus和SessionBus。SystemBus是计算机内部传输数据和控制信息的路径。它连接了中央处理器、内存、输入/输出设备以及其他重要的硬件组件,通常由地址线、数据线和控制线组成,它们共同协调着计算机内部的数据传输和控制操作。SessionBus是用于桌面用户程序之间进行通信。下面将使用图2的python脚本为例,并在终端执行python3 regsister.py创建一个计算两数字之和的SessionBus。

openKylin(开放麒麟)

图2  register脚本

执行完上述脚本后点击SessionBus输入register进行搜索,可以看到图3中名为come.test.register的的SessionBus。

openKylin(开放麒麟)

图3  D-Bus搜索展示

Golang调用D-Bus


做好上述准备工作后,进行Golang逻辑编码。如图4所示在Golang环境下运行命令go run -o invokedbus invokedbus.go生成二进制文件invokedbus。比较代码和创建的D-Bus 信息,可以看到程序中的“com.test.register”即为创建的D-Bus名称,也是Golang代码运行时要调用的路径。在路径后加上count方法,即可实现D-Bus的调用。

openKylin(开放麒麟)

图4  Golang程序

下面将生成的二进制文件invokedbus执行命令bash ./invokedbus,可以看到图5所示界面,根据提示输入第一个和第二个数字后,将得出最终的计算结果。

openKylin(开放麒麟)

图5运行展示

总结


经过上述步骤,我们了解实现了Golang与D-Bus间是如何调用,并返回运行结果。两者的结合使用也在很多场景下都发挥了重要作用。比如在系统监控领域可用于监控和收集系统信息;对打印机、摄像头等设备可以方便地控制和管理;应用程序集成领域通过对D-Bus信号和方法调用进行通信和协作实现了功能的共享和扩展等。如有更多疑问,可留言反馈。