Xfce漫游(1) - Xfce与相关概念

用了好几年Xfce桌面了,但是从来没有仔细研究过Xfce底下相关的运行逻辑,最近才对相关的底层概念感兴趣并去尝试了解了一下,但是它的体系架构以及复杂的依赖关系令初来乍到者望而却步。没办法,写点什么方便理解吧。

这一系列文章主要是探讨Xfce底层实现的,不会过多聚焦于美化之类的话题。我的环境是Arch Linux+Xfce,不同发行版的命令可能不同。

XFCE桌面环境

Xfce是桌面环境,用于Unix与Unix-like操作系统,如Linux与FreeBSD。Xfce建基在GTK+之上,它同时为程序设计者提供开发框架。Xfce使用Xfwm作为默认的视窗管理器,亦可搭配Openbox等其他视窗管理器协作。Xfce由许多彼此独立的组件所构成,除了本身,还有第三方的程序使用Xfce的程序库,如文本编辑器Mousepad、多媒体播放程序Parole与终端模拟器。(摘自xfce-维基百科

为了将讨论最简化,下面列出Xfce桌面最为核心的部件(按Xfce默认会话,已按加载顺序排序):

  • xfce4-session: Xfce的会话(session)管理器,同时也负责与D-Bus交流
  • xfwm4: Xfce的窗口管理器,负责与显示混成器(compositor)进行交流以管理其中显示的窗口
  • xfsettingsd: Xfce的设置管理器守护进程(用于Xfconf)
  • xfce4-panel: Xfce的面板
  • thunar --daemon: Xfce的文件管理器。这里只是启动守护进程
  • xfdesktop: Xfce桌面本身,负责显示墙纸和桌面内容;借助thunar在桌面显示~/Desktop文件夹内的文件

这些应该是组成桌面环境至少需要的部分。此外还有一些自启动程序如xfce4-notifyd等,由于不在最小化session的范围内,暂时不做讨论。

上面出现的不少程序都与Dbus连接或者作为一个用户级别的systemd单元;同时也有负责与Compositor交流的程序。此外,Xfce是基于GTK3(目前如此)开发的,为了理解xfce的实现必须先对GTK有一定了解。还有一点需要补充的是,Xfce遵循着XDG标准,这个又是由freedesktop.org组织提出和维护的。总而言之,为了了解Xfce的运行……一步步来吧。

GTK+

一个GUI工具包,在功能上可以认为是对标Qt,负责处理底层渲染以及为上层应用程序提供接口。和Qt不同的是,GTK+中不同的组件都单独分出了不同的库文件,主要有:

  • Glib: G家最基本的库,提供了各种数据结构、容器、事件循环机制等等…… 这个库是通用化的,除了GTK之外的程序也可使用它(其实Qt也在使用这个库)
  • GObject: Glib的一部分。提供面向对象功能(毕竟都是用C语言实现的)
  • Gio: Glib的一部分。提供IO相关功能(文件流、VFS交互、网络、与D-bus交互等等)
  • GDK: 绘图工具箱。负责基本图形绘制,与底下的渲染器(cairo、pango等)、Compositor以及Glib进行交流,并向上层的GTK提供服务。
  • GTK: 应用程序程序员直接交互的图形库。虽然其实程序员也需要直接和Glib打交道。

真是复杂啊,下图或许能说明GTK中各个组件的关系。话说我直接去调查基于Qt的桌面环境不就不需要掌握一整个全新的图形工具包了吗。