Linux桌面溯源
X窗口系统(X Window System)
Linux起源于X窗口系统(X Window System),亦即常说的X11,因其版本止于11之故。
X窗口系统(X Window System,也常称为X11或X)是一种以位图方式显示的软件窗口系统。最初是1984年麻省理工学院的研究,之后变成UNIX、类UNIX、以及OpenVMS等操作系统所一致适用的标准化软件工具包及显示架构的运作协议。X窗口系统通过软件工具及架构协议来创建操作系统所用的图形用户界面,此后则逐渐扩展适用到各形各色的其他操作系统上。现在几乎所有的操作系统都能支持与使用X。今日知名的桌面环境——GNOME和KDE也都是以X窗口系统为基础建构成的。
由于X只是工具包及架构规范,本身并无实际参与运作的实体,所以必须有人依据此标准进行开发撰写。如此才有真正可用、可执行的实体,始可称为实现体。当前依据X的规范架构所开发撰写成的实现体中,以X.Org最为普遍且最受欢迎。
在图例中,X服务器从键盘、鼠标获取输入信息,之后将输入反馈显示于银幕,而网页浏览器及终端模拟器则在客户端的本机系统上运行。
此外客户端也通过网络与远程的机器、服务器保持联系,以保消息状态的更新。如此的机制及架构能使远程运行的软件如同在本机端运行一样。
X Server
X Server是一个显示服务器,它实现了X Window System协议,用于在网络计算环境中提供图形界面支持。
X Server提供了底层图形显示和输入处理功能,负责处理图形硬件的低级别操作,如屏幕绘制、键盘和鼠标输入等。高层桌面环境(KDE, Gnome,Xfce),依赖于X Server来进行窗口的绘制和用户交互。
X Server通过网络透明性允许应用程序在不同的主机上运行,并在本地主机上显示其图形界面。
X会话
X会话(X session)是指在X Window System(X11)环境下启动并运行的图形用户界面会话。它包括启动X服务器、窗口管理器或桌面环境,以及一组在此基础上运行的应用程序。
启动X会话
使用显示管理器
安装完成后,显示管理器通常会自动启动,并在系统启动时运行。你可以通过图形界面选择用户并登录,从而启动X会话。
使用命令行工具
1. startx:
`startx` 是一个用于启动X会话的命令行工具,它会读取用户的`.xinitrc`文件来配置启动的应用程序或窗口管理器。
startx
2. xinit:
`xinit` 是一个更低级别的工具,可以更精细地控制X会话的启动过程。
xinit /usr/bin/xterm -- :1
配置 `.xinitrc` 文件
用户可以创建或编辑 `.xinitrc` 文件来定制X会话的启动过程。
nano ~/.xinitrc
#!/bin/sh
exec i3
chmod +x ~/.xinitrc
退出X会话
退出X会话的方式取决于所使用的窗口管理器或桌面环境。通常可以通过以下方式退出:
1、通过窗口管理器的菜单或快捷键:如i3的快捷键`Mod+Shift+E`。
2、通过注销或关闭按钮:在桌面环境(如GNOME、KDE Plasma)中,通常在菜单中提供注销、重启和关机选项。
3、通过命令行:在终端中运行`exit`,或在X会话启动的终端中
Display环境变量
DISPLAY是一个Shell变量,它的值用于控制“在哪里绘制和显示图形界面”。
X client为了找到自己应该在哪里绘制和显示图形界面,首先会获取并解析当前Shell中DISPLAY变量的值。接着,X client根据解析结果,把绘图命令发送给对应的X server。
DISPLAY 变量值的格
:<机器运行的第几号X server>.<该X server管理的第几号screen>示例: :0.0,:0.1,:1.0
含义: X client读取该值后,会把绘图命令发送给<机器运行的第几号X server>,请求该X server将GUI绘制在<该X server管理的第几号screen>上
注意: X client与X server必须位于同一机器,通过unix socket或内存通信
<机器的IP或主机名>:<该机器运行的第几号X server>.<该X server管理的第几号screen>示例: 192.168.1.2:0.0,127.0.0.1:1.0,localhost:10.0
含义: X client读取该值后,会把绘图命令发送给<机器的IP或主机名>上的<机器运行的第几号X server>,请求该X server将GUI绘制在<该X server管理的第几号screen>上
注意: X client与X server可以位于不同机器,通过TCP协议通信。
示例参见:https://blog.csdn.net/kn_2018/article/details/132710736?spm=1001.2101.3001.6650.6&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7Ebaidujs_baidulandingword%7ECtr-6-132710736-blog-132511452.235%5Ev43%5Epc_blog_bottom_relevance_base9&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7Ebaidujs_baidulandingword%7ECtr-6-132710736-blog-132511452.235%5Ev43%5Epc_blog_bottom_relevance_base9&utm_relevant_index=8https://blog.csdn.net/kn_2018/article/details/132710736?spm=1001.2101.3001.6650.6&utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_baidulandingword~Ctr-6-132710736-blog-132511452.235%5Ev43%5Epc_blog_bottom_relevance_base9&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2~default~baidujs_baidulandingword~Ctr-6-132710736-blog-132511452.235%5Ev43%5Epc_blog_bottom_relevance_base9&utm_relevant_index=8
查看X server的显示号
1、查看环境变量
echo $DISPLAY
2、查询X server的进程信息
ps aux | grep -e 'X ' -e 'Xorg'
Window Manager(窗口管理器)
窗口管理器(WM)是一种系统软件,它在图形用户界面(GUI)的窗口系统中控制窗口的位置和外观。它可以是桌面环境(DE)的一部分,也可以单独使用。
实现一个屏幕上显示多个X程序,实现调整程序大小,标题栏,最大化,最小化,关闭按钮,虚拟桌面这些功能。
常见的窗口管理器:
DWM
Metacity
Enlightement DR16
Compiz
Gnome Shell
AWESOME
i3、Openbox、Fluxbox、Mutter等
Display Manager(显示管理器)
显示管理器,或登录管理器,通常是一个图形用户界面,在启动过程结束时显示,以代替默认的shell。有各种显示管理器的实现,就像有各种类型的窗口管理器和桌面环境一样。
启动系统的时候登录的界面即是显示管理器。注意: 如果使用 桌面环境,应该尽量使用对应的显示管理器。
常见的显示管理器:
GDM --- Gnome 显示管理器 (gdm)
LightDM
LXDM
SSDM
XDM --- X 显示管理器 (xorg-xdm)
KDM --- KDE 显示管理器 (kdebase-workspace)
Desktop Environment(桌面环境)
桌面环境将各种组件捆绑在一起,以提供常见的图形用户界面元素,如图标、工具栏、壁纸和桌面小部件。此外,大多数桌面环境都包含一组集成的应用程序和实用程序。最重要的是,桌面环境提供了它们自己的窗口管理器(桌面环境包含窗口管理器),但是通常可以用另一个兼容的窗口管理器代替(不使用桌面环境自带的窗口管理器,使用其他窗口管理器)。
桌面环境可以根据使用资源的多少分为重量级和轻量级。通常图形化界面都是比较吃资源的,内存占用率以及CPU的使用都是相对比较高的。轻量级的桌面需要较少的资源,所以可以运行在大多数的硬件上。
参考:
An introduction to the Linux graphics stack › FLUSP - FLOSS at USP
Linux桌面系统x11原理简介-CSDN博客
快速理解 X server, DISPLAY 与 X11 Forwarding_xserver-CSDN博客
相关文章:

Linux桌面溯源
X窗口系统(X Window System) Linux起源于X窗口系统(X Window System),亦即常说的X11,因其版本止于11之故。 X窗口系统(X Window System,也常称为X11或X)是一种以位图方式显示的软件窗口系统。…...

深入Linux:权限管理与常用命令详解
文章目录 ❤️Linux常用指令🩷zip/unzip指令🩷tar指令🩷bc指令🩷uname指令🩷shutdown指令 ❤️shell命令以及原理❤️什么是 Shell 命令❤️Linux权限管理的概念❤️Linux权限管理🩷文件访问者的分类&#…...
Mojo 编程语言:AI开发者的新宠儿
Mojo(Meta Object Oriented programming for Java Objects)是一种面向对象的编程语言,旨在简化和加速Java应用程序的开发过程。作为近年来新兴的编程语言,Mojo因其与Java的紧密集成以及AI开发领域的应用潜力而逐渐成为AI开发者的新…...
ARM/Linux嵌入式面经(十):极氪
开篇强调两个事情: pdf文件都在百度网盘群:911289806一定要把超链接里面的文章看了,那都是为了你们写的。老板!!!现在多学点,涨个2k工资,真的很值得。要不吃学习的苦,要不吃生活的苦。 1. 自我介绍 专开新篇,等我! 2. 项目介绍,提问 专开新篇,等我! 3. SPI通信和…...

【PVE】新增2.5G网卡作为主网卡暨iperf测速流程
【PVE】新增2.5G网卡作为主网卡暨iperf测速流程 新增网卡 新增网卡的首先当然需要关闭PVE母机,把新网卡插上,我用淘宝遥现金搞了个红包,花了26元买了块SSU的2.5G网卡。说实话这个价位连散热片都没有,确实挺丐的。稍后测下速度看…...

数学建模美赛入门
数学建模需要的学科知识 高等数学线性代数 有很多算法的掌握是需要高等数学和线代的相关知识 如:灰色预测模型需要微积分知识;神经网络需要用到导数知识;图论和层次分析法等都需要用到矩阵计算的相关知识等; 概率论与数理统计&am…...
两段序列帧动画播放,在ios机型上出现闪屏
使用场景:两段序列帧动画连接播放,先播放第一段播一次,再播放第二段,第二段循环播放,在ios机型上出现动画闪动,播放不正常。 错误的写法:把每一段序列帧动画单独写在了定义的动画里 .gacha-bg…...

【C++深度探索】全面解析多态性机制(二)
🔥 个人主页:大耳朵土土垚 🔥 所属专栏:C从入门至进阶 这里将会不定期更新有关C/C的内容,欢迎大家点赞,收藏,评论🥳🥳🎉🎉🎉 前言 我…...
MySQL配置数据库的连接命令
MySQL配置数据库连接命令 在MySQL中,配置数据库连接的命令涉及创建用户、授予权限、配置主从复制等多个方面。以下是常用的命令及其用途: 创建用户 创建一个新的数据库用户并为其设置密码: CREATE USER usernamehost IDENTIFIED BY passwo…...
[PaddlePaddle飞桨] PaddleSpeech-自动语音识别-小模型部署
PaddleSpeech的GitHub项目地址 环境要求: gcc > 4.8.5 paddlepaddle < 2.5.1 python > 3.8 OS support: Linux(recommend), Windows, Mac OSXpip下载指令: python -m pip install paddlepaddle-gpu2.5.1 -i https://pypi.tuna.tsinghua.edu.c…...
redis查询慢,你们是如何排查优化的?(总结篇)
1,先进行基准测试,查看redis是否存在查询过慢情况,根据自己的情况而定 2、检查网络连接是否出现延迟,数据丢包问题(可能性小 3、开启慢查询日志,通过日志可以清楚知道哪些命令比较耗时,同时避…...
Docker 容器出现 IP 冲突
Docker 容器出现 IP 冲突的情况可能由以下几个原因导致: 静态 IP 分配:如果你在 docker-compose.yml 文件中为多个容器手动设置了相同的静态 IP 地址,那么这些容器在启动时就会出现 IP 冲突。确保每个容器分配的静态 IP 地址是唯一的。桥接网…...

paddlepaddle2.6,paddleorc2.8,cuda12,cudnn,nccl,python10环境
1.安装英伟达显卡驱动 首先需要到NAVIDIA官网去查自己的电脑是不是支持GPU运算。 网址是:CUDA GPUs | NVIDIA Developer。打开后的界面大致如下,只要里边有对应的型号就可以用GPU运算,并且每一款设备都列出来相关的计算能力(Compu…...
【D3.js in Action 3 精译】1.3 D3 视角下的数据可视化最佳实践(上)
当前内容所在位置 第一部分 D3.js 基础知识 第一章 D3.js 简介 1.1 何为 D3.js?1.2 D3 生态系统——入门须知 1.2.1 HTML 与 DOM1.2.2 SVG - 可缩放矢量图形1.2.3 Canvas 与 WebGL1.2.4 CSS1.2.5 JavaScript1.2.6 Node 与 JavaScript 框架1.2.7 Observable 记事本 1…...

如何在Linux上如何配置虚拟主机
在Linux上配置虚拟主机可以通过使用Apache HTTP服务器来实现。Apache是一个开源的跨平台的Web服务器软件,可以在多种操作系统上运行并支持虚拟主机的配置。 以下是在Linux上配置虚拟主机的步骤: 安装Apache HTTP服务器 在终端中运行以下命令来安装Apache…...
c语言alpha-beta剪枝六子棋
c语言Alpha-Beta剪枝算法六子棋[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2i5w8kc1-1720756528545)(https://i-blog.csdnimg.cn/direct/464b9db7d6384a63ab8c3213efff0e99.png)] 1.介绍 Alpha-Beta剪枝算法是一种用于优化博弈树搜索的算法&…...

基于PyTorch深度学习实践技术应用
近年来,Python语言由于其开源、简单等特点,受到了广大程序开发者的偏爱,丰富的函数库使得其在各行各业中得到了广泛的应用。伴随着新一轮人工智能(尤其是深度学习)的快速发展,许多深度学习框架应运而生&…...
数据湖仓一体(五)安装spark
上传安装包到/opt/software目录并解压 [bigdatanode106 software]$ tar -zxvf spark-3.3.1-bin-hadoop3.tgz -C /opt/services/ 重命名文件 [bigdatanode106 services]$ mv spark-3.3.1-bin-hadoop3 spark-3.3.1 配置环境变量 [bigdatanode106 ~]$ sudo vim /etc/profile…...

项目收获总结--本地缓存方案选型及使用缓存的坑
本地缓存方案选型及使用缓存的坑 一、摘要二、本地缓存三、本地缓存实现方案3.1 自己编程实现一个缓存3.2 基于 Guava Cache 实现本地缓存3.3 基于 Caffeine 实现本地缓存3.4 基于 Encache 实现本地缓存3.5 小结 四、使用缓存的坑4.1 缓存穿透4.2 缓存击穿4.3 缓存雪崩4.4 数据…...

java使用poi-tl模版引擎导出word之if判断条件的使用
文章目录 模版中if语句条件的使用1.数据为False或空集合2.非False或非空集合 模版中if语句条件的使用 如果区块对的值是 null 、false 或者空的集合,位于区块中的所有文档元素将不会显示,这就等同于if语句的条件为 false。语法示例:{{?stat…...
Python|GIF 解析与构建(5):手搓截屏和帧率控制
目录 Python|GIF 解析与构建(5):手搓截屏和帧率控制 一、引言 二、技术实现:手搓截屏模块 2.1 核心原理 2.2 代码解析:ScreenshotData类 2.2.1 截图函数:capture_screen 三、技术实现&…...

C++_核心编程_多态案例二-制作饮品
#include <iostream> #include <string> using namespace std;/*制作饮品的大致流程为:煮水 - 冲泡 - 倒入杯中 - 加入辅料 利用多态技术实现本案例,提供抽象制作饮品基类,提供子类制作咖啡和茶叶*//*基类*/ class AbstractDr…...
Cesium1.95中高性能加载1500个点
一、基本方式: 图标使用.png比.svg性能要好 <template><div id"cesiumContainer"></div><div class"toolbar"><button id"resetButton">重新生成点</button><span id"countDisplay&qu…...
2024年赣州旅游投资集团社会招聘笔试真
2024年赣州旅游投资集团社会招聘笔试真 题 ( 满 分 1 0 0 分 时 间 1 2 0 分 钟 ) 一、单选题(每题只有一个正确答案,答错、不答或多答均不得分) 1.纪要的特点不包括()。 A.概括重点 B.指导传达 C. 客观纪实 D.有言必录 【答案】: D 2.1864年,()预言了电磁波的存在,并指出…...

什么是库存周转?如何用进销存系统提高库存周转率?
你可能听说过这样一句话: “利润不是赚出来的,是管出来的。” 尤其是在制造业、批发零售、电商这类“货堆成山”的行业,很多企业看着销售不错,账上却没钱、利润也不见了,一翻库存才发现: 一堆卖不动的旧货…...
Qt Http Server模块功能及架构
Qt Http Server 是 Qt 6.0 中引入的一个新模块,它提供了一个轻量级的 HTTP 服务器实现,主要用于构建基于 HTTP 的应用程序和服务。 功能介绍: 主要功能 HTTP服务器功能: 支持 HTTP/1.1 协议 简单的请求/响应处理模型 支持 GET…...

多种风格导航菜单 HTML 实现(附源码)
下面我将为您展示 6 种不同风格的导航菜单实现,每种都包含完整 HTML、CSS 和 JavaScript 代码。 1. 简约水平导航栏 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport&qu…...
AGain DB和倍数增益的关系
我在设置一款索尼CMOS芯片时,Again增益0db变化为6DB,画面的变化只有2倍DN的增益,比如10变为20。 这与dB和线性增益的关系以及传感器处理流程有关。以下是具体原因分析: 1. dB与线性增益的换算关系 6dB对应的理论线性增益应为&…...
JS手写代码篇----使用Promise封装AJAX请求
15、使用Promise封装AJAX请求 promise就有reject和resolve了,就不必写成功和失败的回调函数了 const BASEURL ./手写ajax/test.jsonfunction promiseAjax() {return new Promise((resolve, reject) > {const xhr new XMLHttpRequest();xhr.open("get&quo…...
JavaScript 数据类型详解
JavaScript 数据类型详解 JavaScript 数据类型分为 原始类型(Primitive) 和 对象类型(Object) 两大类,共 8 种(ES11): 一、原始类型(7种) 1. undefined 定…...