Remove ads
Linux 桌面上的跨行程通訊協定 来自维基百科,自由的百科全书
D-Bus是一个进程间通信及远程过程调用机制,可以让多个不同的计算机程序(即进程)在同一台电脑上同时进行通信[4]。D-Bus作为freedesktop.org项目的一部分,其设计目的是使Linux桌面环境(如GNOME与KDE等)提供的服务标准化。
freedesktop.org项目同时也开发了一个称为libdbus的自由及开放源代码软件函数库,作为规范的参考实现。这个函数库常与D-Bus本身混淆。也存在着其他的D-Bus实现,像是GDBus (GNOME)[5],QtDBus (Qt/KDE)[6],dbus-java[7]以及sd-bus(systemd的一部分)[8]。
D-Bus可用于同一个桌面会话中不同桌面应用软件间的通信,能集成桌面会话,也解决了进程的生命周期的问题。它也允许桌面会话与操作系统间的通信,这通常包括了内核与任何的系统守护进程或一般进程间的通信。
当大量的程序进行通信时,由于程序跟程序之间必须建立起一对一的通信,则整体的通信网络将会非常复杂,而通信效率也会因此低下不可靠。D-Bus提供了一个软件汇流抽象层,能够汇整所有的消息到一个虚拟的通信频道[4]。连接到D-Bus的程序无法也无需知道D-Bus是如何实做,但是只要遵从D-Bus的标准,就能保证所有连接到D-Bus的程序能进行彼此间的交流。换句话说,D-Bus是一个消息总线系统,即进程间通信的介质,让应用程序间可以通信并交换消息。因此,D-Bus为应用程序增加新的功能,简化已有功能,包含信息分享、模块化及权限分离。例如透过蓝牙或Skype所接收到的通话可以传播到任何目前执行中的音乐播放器,并可使其静音或暂停播放,直到通话结束[9]。
大多数的系统会实现一个具较高权限的系统频道,连同给每一个已登录的用户的专用频道,这就可以让D-Bus中可用的登录信息受到限制。因此,D-Bus服务同时包含了系统守护进程(给像是“新增硬件设备”或是“打印机队列变更”等事件使用)以及一个给每个用户的登录会话(给这个用户启动的进程间的一般通信使用)使用的独有守护进程。应用程序透过Unix域套接字与守护进程通信。消息总线是建基于通用的一对一消息传递框架,这让任意两个程序间可以不必透过消息总线守护进程而直接通信[10]。
libdbus
,可链接到多个应用程序。这个守护进程可以将消息按特定路径转送给零个或更多个应用程序,从而实现发布/订阅模式。接收到消息的D-Bus连线会被转送到一个特定的对象,而非进程。因此,客户端只知道它们是与对象交互,但并不知道另一侧是否真的有对象。
D-Bus为每个对象定义了一个名称,其看起来像是POSIX文件系统路径,但实际上并不是,例如/org/kde/kspread/sheets/3/cells/4/5。D-Bus对象的名称通常会使用命名空间以协助独立开发代码模块[11]。命名空间一般会以开发者的保留域名组件作为前缀(例如/org/kde)。
KDE第二版与第三版使用的DCOP系统对D-Bus有深刻影响,后者在KDE 4中取代了前者。D-Bus的实现支持大多数的POSIX操作系统,也有一个Windows的移植。它也在Qt 4、GNOME及Xfce中使用。在GNOME中,它已逐渐取代了早期的Bonobo机制。
D-Bus最初用于桌面环境,后来使用范围逐渐扩展,包含的系统服务越来越多。例如NetworkManager网络守护进程、BlueZ蓝牙堆栈及PulseAudio音频服务器都使用D-Bus来提供其部分或全部的服务,systemd也正促使传统的系统守护进程(如logind)转换到D-Bus服务。[来源请求]
它也用于AllJoyn协议在家庭自动化中的导线协议,为AllJoyn加入了探索、工作阶段管理、安全、标头压缩、嵌入式设备支持[12]。
Seamless Wikipedia browsing. On steroids.
Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.
Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.