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

news/2024/9/12 15:16:30/文章来源:https://www.cnblogs.com/notify-ctrl/p/18367133

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

摘自维基百科

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

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

相关文章

windows10清理缓存命令,windows10清理缓存命令是什么

在Windows 10系统中,清除缓存可以通过多种方法实现,但严格来说,并没有一个单一的“指令”可以一键清除所有类型的缓存。不过,我可以为你介绍几种常用的方法来清除不同类型的缓存。 一、使用磁盘清理工具 磁盘清理工具是Windows 10内置的一个非常实用的工具,可以帮助用户删…

问题:ETL中写入数据到Clickhouse抛出 Code: 27. DB::ParsingException: Cannot parse input

问题描述 问题:ETL中写入数据到Clickhouse抛出 Code: 27. DB::ParsingException: Cannot parse input 问题原因: 目标字段的长度和精度不足以容纳源字段 问题解决方法:案例1: 源是timestamp,目标是datetime修改结果: 创建目标表的时候选择高精度的字段类型案例2: 源是带…

CSS3第三天(盒子模型+浮动)

盒子模型 1.内边距padding 指定了高宽,再指定内边距,则会撑开盒子。 盒子未指定高宽(继承算未指定),则不会撑开盒子。 2.外边距margin 用于控制盒子之间的距离。同padding的简写方式。 margin-left左外边距 right top bottom 块级盒子水平居中,需满足两个条件:①盒子必须…

定位

浮动可以让多个块级盒子一行没有缝隙排列显示,经常用于横向排列盒子。 平铺 定位可以让盒子自由的在某个盒子内移动或者固定屏幕中某个位子,并且可以压住其他盒子。 叠积 定位:定位模式(position属性)+偏移量 position属性:static、relative、absolute、fixed top、botto…

Java基础语法笔记

Java基础语法 1.注释,标识符,关键字 注释line comment:// block comment:/* */ java doc:/** */ 标识符、关键字数据类型

相对路径与绝对路径

一、什么是绝对路径 大家都知道,在我们平时使用计算机时要找到需要的文件就必须知道文件的位置,而表示文件的位置的方式就是路径,例如只要看到这个路径:c:/website/img/photo.jpg我们就知道photo.jpg文件是在c盘的website目录下的img子目录中。类似于这样完整的描述文件位置…

【日记】北美的飓风怎么这么恐怖,地球真的能活人吗……(2252 字)

正文今天还是把周末的所有事情一起写。每到周末都没什么写日记的动力。周五下午出去吃饭,吃一半,斯视频突然打过来。我当时有点懵,不知道他要干什么,但还是接了。第一个画面就是他摆弄自行车。他跟我说,自行车踏板和链条有问题,踩下去的时候转一半就动不了了。经过我们二…

使用 preloadRouteComponents 提升 Nuxt 应用的性能

title: 使用 preloadRouteComponents 提升 Nuxt 应用的性能 date: 2024/8/19 updated: 2024/8/19 author: cmdragon excerpt: preloadRouteComponents 是提升 Nuxt 应用性能的一个简单而有效的工具。通过在适当的时候预加载路由组件,你可以为用户提供更快速、更流畅的导航体…

【VMware VCF】VMware Cloud Foundation Part 07:管理工作负载域中的主机和集群。

一个标准 VMware Cloud Foundation 实例中具有管理工作负载域和 VI 工作负载域两种类型,管理域有且只有一个,而 VI 域可以创建多个,每种工作负载域中可以具有多个 vSphere 集群,而每个集群中可以具有多台主机,有关工作负载域所支持的集群和主机数等限制请查看 VMware Conf…

牛客周赛 Round 56

牛客周赛 Round 56\(A\) 牛客 NC277678 面包店故事 \(AC\)选择结构。点击查看代码 int main() {int x,y,n;cin>>x>>y>>n;if(x+y<=n){cout<<"YES"<<endl;}else{cout<<"NO"<<endl;}return 0; }\(B\) 牛客 NC27…

winform工具箱安装其他控件

下载对应的控件 dll文件 一,新建Winform项目或者打开您已有的Winform项目,选择窗体,显示窗体设计器界面, 点击“视图”-“工具箱”,显示工具箱,如下图: 在工具箱,点击鼠标右键,添加选项卡 输入对应控件名 在工具箱中选中选中DEMO选项卡。安装方法一:根据提示“此组中…

哈德玛积与向量矩阵乘法

哈德玛积(Hadamard product)通常是指两个矩阵之间的一种元素对元素的乘法操作。当应用于向量时,哈德玛积同样指的是这两个向量之间对应元素的乘法操作。向量矩阵乘法(vector matrix multiplication)