用了好几年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的桌面环境不就不需要掌握一整个全新的图形工具包了吗。