深度探索Linux操作系统 —— 构建桌面环境

在这里插入图片描述

系列文章目录


深度探索Linux操作系统 —— 编译过程分析
深度探索Linux操作系统 —— 构建工具链
深度探索Linux操作系统 —— 构建内核
深度探索Linux操作系统 —— 构建initramfs
深度探索Linux操作系统 —— 从内核空间到用户空间
深度探索Linux操作系统 —— 构建根文件系统
深度探索Linux操作系统 —— 构建桌面环境


文章目录

  • 系列文章目录
  • 前言
  • 一、窗口管理器
    • 1、基本原理
      • 1. X 的窗口
      • 2. 窗口装饰


前言

    计算机领域中的桌面环境(Desktop Environment)其实是一种比喻的说法,即图形用户界面就像物理书桌一样,其上可以放置文件夹、文档等。桌面最初用来特指个人计算机(PC),但是现在不只个人计算机有图形界面环境,服务器、嵌入式设备等基本都提供桌面环境。桌面环境包括窗口管理器、任务条等基本组件,除了这些基本的组件外,有的桌面环境还提供文件管理器、控制面板等。

    桌面环境是操作系统中人机交互的关键部分,理解它的基本运作原理,无论是对理解操作系统,还是对开发应用程序,都有极大的帮助。我们处于这样一个追求个性的年代,无论是用于消费类电子设备的移动系统,还是用于 PC 的中规中矩的桌面系统,人们都已不再满足于千篇一律的桌面。打造一个全新的个性化桌面,绝不只是停留在更改个背景图、换个主题这个层面,我们需要更大的革新。但是如果对桌面环境的基本原理都不甚了解,那又何谈去开发打造具有创造性的用户交互。

    因此,在本章中我们带领读者从头构建一个基本的桌面环境,包括窗口管理器、任务条以及一个显示桌面背景的组件。为了使读者更能深刻体会 X 的客户/服务器模型,窗口管理器基于 Xlib 编写,而任务条等组件则展示了使用 GTK 图形库的编程方法。

    限于篇幅,我们没有将全部源代码全部贴到书中,所以请读者结合随书光盘中附带的源代码进行阅读。另外,本章虽然涉及 XlibGTK 编程,但是为了不干扰主线 —— 构建桌面环境,我们不会过多讨论它们的编程,其中涉及的 API ,如有必要请参考 Xlib 和 GTK 各自的参考手册。


一、窗口管理器

    本质上,窗口就是显示器上对应的一块区域。对于一个运行多任务的操作系统来讲,在一个有限的屏幕上可以同时存在多个窗口,因此,用户希望多个窗口之间可以协调布局和平共享同一个屏幕。可以将特定窗口切换为当前活动窗口;可以按需改变窗口尺寸;可以最大化、最小化以及关闭窗口。但是 X 的设计哲学是只提供机制,不提供策略,X 服务器只提供窗口操作相关的函数,但不管如何去操作窗口。于是诞生了另外一个特殊的 X 应用:窗口管理器。

1、基本原理

1. X 的窗口

    X 将所有窗口组织为一棵树。X 服务器启动后,将默认创建一个窗口,这个窗口充满整个屏幕,作为整个窗口树的根,称为根窗口(Root Window),所有应用的顶层窗口(Top-level Window)都是根窗口的子窗口。

    假设在 X 中运行两个应用 A 和 B ,A 包含 2 个窗口,B 应包含 3 个窗口,窗口之间的布局如图 7-1 所示。

在这里插入图片描述

它们之间的树形关系如图 7-2 所示。

在这里插入图片描述

    窗口管理器仅管理应用的顶层窗口,即如图 7-2 中的 “Top Window A” 和 “Top Window B” 。一个应用可能有多个顶层窗口,除了应用的主窗口之外,对话框一般也是一个顶层窗口。而对于顶层窗口的子窗口,则由应用自己管理。

2. 窗口装饰

    在第 6 章中,我们看到,无论是基于 Xlib 的程序,还是使用 GTK 编写的程序,在没有窗口管理器的情况下,它们的窗口都以 “素颜” 示人,只是一个 “裸” 窗口。一个典型的桌面应用的窗口,一般而言,包括一个标题栏,标题栏上还可能显示窗口的名称、最大化、最小化和关闭按钮。另外,窗口一般还有一个边框。用户可以通过标题栏移动窗口,可以在边框处拖动鼠标改变窗口尺寸,可以分别通过最大化、最小化和关闭按钮最大化、最小化、关闭窗口。这些组件除了具备功能外,还具备美化的作用,比如可以设置窗口边框的颜色、阴影效果等,因此,它们也被称为窗口装饰。

    显然,窗口装饰不应该由各个应用负责,暂且不提重复劳动,单单一致性就是个大问题。如果任由应用自己绘制,最后将导致窗口标题栏等装饰五花八门。因此,在 X 中,将窗口装饰提取为公共部分,由窗口管理器统一负责。通常的实现方式是:窗口管理器创建一个窗口,我们称这个窗口为 Frame ,作为根窗口的子窗口,但是作为应用的顶层窗口的父窗口。其他装饰,或者直接绘制在 Frame 窗口上,或者创建新的装饰窗口,但是这些装饰窗口也作为 Frame 的子窗口,本章我们开发的窗口管理器采用后者。应用的顶层窗口和 Frame 窗口之间的关系如图 7-3 所示。

在这里插入图片描述

   

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

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

相关文章

Quartus II + Modelsim 脚本仿真

软件版本:Intel Quartus Prime Design Suite: 23.2 方式参考附件Intel 官方文档:Questa*-Intel FPGA Edition Quick-Start: Intel Quartus Prime Pro Edition 第1步,创建一个ram ip,并形成一个例化的top层ip 第2步,自…

免费图片无损放大:8大平台突破画质极限

之前介绍过图片提高清晰度的工具平台,这次AIGCer介绍下将图片无损放大的几个在线免费的工具平台。图片高清放大是一种处理低分辨率图像的方法,以增加图像的尺寸和细节,使其看起来更大、更清晰。 1.美图设计室 传送门:https://ww…

基于Python+WaveNet+MFCC+Tensorflow智能方言分类—深度学习算法应用(含全部工程源码)(二)

目录 前言引言总体设计系统整体结构图系统流程图 运行环境模块实现1. 数据预处理1)数据介绍2)数据测试3)数据处理 相关其它博客工程源代码下载其它资料下载 前言 博主前段时间发布了一篇有关方言识别和分类模型训练的博客,在读者…

什么是Z-Wave,技术特点,各国支持的频段

1.1 背景 Z-Wave是一种无线通信的协议,主要应用于智能家居网络,而其Z-Wave联盟主要是推动家庭自动化领域采用Z-Wave协议,其联盟成员都是智能家居领域非常有名的厂商,基本上覆盖了全球。 2.1 技术特点 低功耗、高可…

BigDecimald简单使用

为什么要用BigDecimal运算 在计算浮点型数据时,往往会存在数据计算失真问题 例1 2.0 - 1.9 应该等于0.1,用float类型赋值运算得出的结果为0.100000024,有问题 例2 1.8 - 1.9 应该等于 -0.1,用double类型赋值得出的结果为-0.09999999999999987,明显有问题 BigDecimal使用 BigDec…

用23种设计模式打造一个cocos creator的游戏框架----(十四)观察者模式

1、模式标准 模式名称:观察者模式 模式分类:行为型 模式意图:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。 结构图: 适用于:…

网神 SecGate 3600 防火墙 多处任意文件上传漏洞复现

0x01 产品简介 网神SecGate 3600防火墙是基于状态检测包过滤和应用级代理的复合型硬件防火墙,是专门面向大中型企业、政府、军队、高校等用户开发的新一代专业防火墙设备,支持外部攻击防范、内网安全、网络访问权限控制、网络流量监控和带宽管理、动态路由、网页内容过滤、邮…

【Jeecg Boot 3 - 第二天】1.2、jar 包和 lib 依赖分离,部署包缩小100倍

一、场景 二、思路 三、实战 ▶ 2.1、项目 jar 包解压获取 lib config Stage 1:正常打包获取 jeecg-system-start-3.6.0.jar Stage 2:解压 获取如下文件 Stage 3:获取 lib config ▶ 2.2、获取简化版项目jar包 Stage 1&#xff1…

AI+无代码助力企业供应链优化

内容来自演讲:潘峰 | 预见明日科技(北京)有限公司 | CEO 摘要 本文介绍了企业供应链中的挑战和解决方案。文章指出,供应链成本占企业经营成本的大部分,且存在供给端和需求端的高度不确定性。为应对这种不确定性&…

【深度学习】注意力机制(二)

本文介绍一些注意力机制的实现,包括EA/MHSA/SK/DA/EPSA。 【深度学习】注意力机制(一) 【深度学习】注意力机制(三) 目录 一、EA(External Attention) 二、Multi Head Self Attention 三、…

ActiveMQ任意文件写入漏洞(CVE-2016-3088)

简述:ActiveMQ的fileserver支持写入文件(但是不支持解析jsp),同时也支持移动文件。所以我们只需要先上传到服务器,然后再移动到可以解析的地方即可造成任意文件写入漏洞。我们可以利用这个漏洞来上传webshell或者上传定时任务文件。 漏洞复现 启动环境 …

stm32 HAL库 发送接受 到了一定的字符串后就卡在.s文件中

问题介绍: 某个项目开发过程中,串口接收中断,开启了DMA数据传输,开启了DMA中断,开启DMA半满中断。然后程序运行的过程中,接收了一部分数据后就会卡在启动文件的DMA1_Ch4_7_DMA2_Ch3_5_IRQHandler 中断里。…

Etcd实战(二)-k8s集群中Etcd数据存储

1 介绍 k8s中所有对象的manifest都需要保存到某个地方,这样他们的manifest在api server重启和失败的时候才不会丢失,因此引入了etcd。在k8s中只有api server和etcd直接交互,其它组件都通过api server间接和etcd交互,这样做的好处…

Flink反压如何查看和优化

我们在使用Flink程序进行流式数据处理时,由于种种原因难免会遇到性能问题,如我们在使用Flink程序消费kafka数据,可能会遇到kafka数据有堆积的情况,并且随着时间的推移,数据堆积越来越多,这就表名消费处理数…

机器学习---Boosting

1. Boosting算法 Boosting思想源于三个臭皮匠,胜过诸葛亮。找到许多粗略的经验法则比找到一个单一的、高度预 测的规则要容易得多,也更有效。 预测明天是晴是雨?传统观念:依赖于专家系统(A perfect Expert) 以“人无…

云基础软件深化合作,云轴科技ZStack与麒麟软件战略签约

12月8日,云轴科技ZStack与麒麟软件战略合作签约仪式在北京举行,双方对过往紧密合作表达了充分肯定,并就进一步联合技术创新、打造重点行业标杆和持续赋能客户达成高度共识。云轴科技创始人&CEO张鑫和麒麟软件高级副总经理谢文征共同见证双…

Oracle(2-17) RMAN Maintenance

文章目录 一、基础知识1、Retention Policy 保留政策2、Recovery Window - Part 1 恢复窗口-第1部分3、Cross Checking 交叉检查4、The CROSSCHECK Command CROSSCHECK命令5、OBSOLETE VS EXPIRED 过时与过期6、Deleting Backups and Copies 删除备份和副本7、The DELETE Comma…

无参RCE [GXYCTF2019]禁止套娃1

打开题目 毫无思绪,先用御剑扫描一下 只能扫出index.php 我们尝试能不能用php伪协议读取flag php://filter/readconvert.base64-encode/resourceindex.php php://filter/readconvert.base64-encode/resourceflag.php 但是页面都回显了429 怀疑是不是源码泄露 用…

【Linux学习】深入理解动态库与静态库

目录 十三.动态库与静态库 13.1 认识动静态库 13.2 深入理解动静态库 什么是库? 编译链接过程 动静态库的基本原理 13.3 静态库 静态库的打包: 静态库的使用: 13.4 动态库 动态库的打包: 动态库的使用: 13.5 动态库与静态库怎么选? 十三.动态库与静态库 13.1 认识动静态库 …

【毕业设计】基于STM32的解魔方机器人

1、方案设计 1.采用舵机作为魔方机器人的驱动电机,从舵机的驱动原理可知:舵机运行的速度和控制器的主频没有关系,所以采用单片机和采用更高主频的嵌入式处理器相比在控制效果上没有什么差别。单片机编程过程简单,非常容易上手&am…