当前位置: 首页 > news >正文

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最为普遍且最受欢迎。

218b1771b9744d9792844f4de371f7a7.png

在图例中,X服务器从键盘、鼠标获取输入信息,之后将输入反馈显示于银幕,而网页浏览器及终端模拟器则在客户端的本机系统上运行。
此外客户端也通过网络与远程的机器、服务器保持联系,以保消息状态的更新。如此的机制及架构能使远程运行的软件如同在本机端运行一样。

3dd6d46c516c4d67a5c0ae9daefcfeca.png

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'

9227355b938b44f784c41e015ae4f579.png

 

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的使用都是相对比较高的。轻量级的桌面需要较少的资源,所以可以运行在大多数的硬件上。

723a2a6e55a849deb47392889ed35a5b.png

参考:

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窗口系统&#xff08;X Window System&#xff09;&#xff0c;亦即常说的X11&#xff0c;因其版本止于11之故。 X窗口系统&#xff08;X Window System&#xff0c;也常称为X11或X&#xff09;是一种以位图方式显示的软件窗口系统。…...

深入Linux:权限管理与常用命令详解

文章目录 ❤️Linux常用指令&#x1fa77;zip/unzip指令&#x1fa77;tar指令&#x1fa77;bc指令&#x1fa77;uname指令&#x1fa77;shutdown指令 ❤️shell命令以及原理❤️什么是 Shell 命令❤️Linux权限管理的概念❤️Linux权限管理&#x1fa77;文件访问者的分类&#…...

Mojo 编程语言:AI开发者的新宠儿

Mojo&#xff08;Meta Object Oriented programming for Java Objects&#xff09;是一种面向对象的编程语言&#xff0c;旨在简化和加速Java应用程序的开发过程。作为近年来新兴的编程语言&#xff0c;Mojo因其与Java的紧密集成以及AI开发领域的应用潜力而逐渐成为AI开发者的新…...

ARM/Linux嵌入式面经(十):极氪

开篇强调两个事情: pdf文件都在百度网盘群:911289806一定要把超链接里面的文章看了,那都是为了你们写的。老板!!!现在多学点,涨个2k工资,真的很值得。要不吃学习的苦,要不吃生活的苦。 1. 自我介绍 专开新篇,等我! 2. 项目介绍,提问 专开新篇,等我! 3. SPI通信和…...

【PVE】新增2.5G网卡作为主网卡暨iperf测速流程

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

数学建模美赛入门

数学建模需要的学科知识 高等数学线性代数 有很多算法的掌握是需要高等数学和线代的相关知识 如&#xff1a;灰色预测模型需要微积分知识&#xff1b;神经网络需要用到导数知识&#xff1b;图论和层次分析法等都需要用到矩阵计算的相关知识等&#xff1b; 概率论与数理统计&am…...

两段序列帧动画播放,在ios机型上出现闪屏

使用场景&#xff1a;两段序列帧动画连接播放&#xff0c;先播放第一段播一次&#xff0c;再播放第二段&#xff0c;第二段循环播放&#xff0c;在ios机型上出现动画闪动&#xff0c;播放不正常。 错误的写法&#xff1a;把每一段序列帧动画单独写在了定义的动画里 .gacha-bg…...

【C++深度探索】全面解析多态性机制(二)

&#x1f525; 个人主页&#xff1a;大耳朵土土垚 &#x1f525; 所属专栏&#xff1a;C从入门至进阶 这里将会不定期更新有关C/C的内容&#xff0c;欢迎大家点赞&#xff0c;收藏&#xff0c;评论&#x1f973;&#x1f973;&#x1f389;&#x1f389;&#x1f389; 前言 我…...

MySQL配置数据库的连接命令

MySQL配置数据库连接命令 在MySQL中&#xff0c;配置数据库连接的命令涉及创建用户、授予权限、配置主从复制等多个方面。以下是常用的命令及其用途&#xff1a; 创建用户 创建一个新的数据库用户并为其设置密码&#xff1a; CREATE USER usernamehost IDENTIFIED BY passwo…...

[PaddlePaddle飞桨] PaddleSpeech-自动语音识别-小模型部署

PaddleSpeech的GitHub项目地址 环境要求&#xff1a; gcc > 4.8.5 paddlepaddle < 2.5.1 python > 3.8 OS support: Linux(recommend), Windows, Mac OSXpip下载指令&#xff1a; python -m pip install paddlepaddle-gpu2.5.1 -i https://pypi.tuna.tsinghua.edu.c…...

redis查询慢,你们是如何排查优化的?(总结篇)

1&#xff0c;先进行基准测试&#xff0c;查看redis是否存在查询过慢情况&#xff0c;根据自己的情况而定 2、检查网络连接是否出现延迟&#xff0c;数据丢包问题&#xff08;可能性小 3、开启慢查询日志&#xff0c;通过日志可以清楚知道哪些命令比较耗时&#xff0c;同时避…...

Docker 容器出现 IP 冲突

Docker 容器出现 IP 冲突的情况可能由以下几个原因导致&#xff1a; 静态 IP 分配&#xff1a;如果你在 docker-compose.yml 文件中为多个容器手动设置了相同的静态 IP 地址&#xff0c;那么这些容器在启动时就会出现 IP 冲突。确保每个容器分配的静态 IP 地址是唯一的。桥接网…...

paddlepaddle2.6,paddleorc2.8,cuda12,cudnn,nccl,python10环境

1.安装英伟达显卡驱动 首先需要到NAVIDIA官网去查自己的电脑是不是支持GPU运算。 网址是&#xff1a;CUDA GPUs | NVIDIA Developer。打开后的界面大致如下&#xff0c;只要里边有对应的型号就可以用GPU运算&#xff0c;并且每一款设备都列出来相关的计算能力&#xff08;Compu…...

【D3.js in Action 3 精译】1.3 D3 视角下的数据可视化最佳实践(上)

当前内容所在位置 第一部分 D3.js 基础知识 第一章 D3.js 简介 1.1 何为 D3.js&#xff1f;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服务器软件&#xff0c;可以在多种操作系统上运行并支持虚拟主机的配置。 以下是在Linux上配置虚拟主机的步骤&#xff1a; 安装Apache HTTP服务器 在终端中运行以下命令来安装Apache…...

c语言alpha-beta剪枝六子棋

c语言Alpha-Beta剪枝算法六子棋[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2i5w8kc1-1720756528545)(https://i-blog.csdnimg.cn/direct/464b9db7d6384a63ab8c3213efff0e99.png)] 1.介绍 Alpha-Beta剪枝算法是一种用于优化博弈树搜索的算法&…...

基于PyTorch深度学习实践技术应用

近年来&#xff0c;Python语言由于其开源、简单等特点&#xff0c;受到了广大程序开发者的偏爱&#xff0c;丰富的函数库使得其在各行各业中得到了广泛的应用。伴随着新一轮人工智能&#xff08;尤其是深度学习&#xff09;的快速发展&#xff0c;许多深度学习框架应运而生&…...

数据湖仓一体(五)安装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 或者空的集合&#xff0c;位于区块中的所有文档元素将不会显示&#xff0c;这就等同于if语句的条件为 false。语法示例&#xff1a;{{?stat…...

华为云AI开发平台ModelArts

华为云ModelArts&#xff1a;重塑AI开发流程的“智能引擎”与“创新加速器”&#xff01; 在人工智能浪潮席卷全球的2025年&#xff0c;企业拥抱AI的意愿空前高涨&#xff0c;但技术门槛高、流程复杂、资源投入巨大的现实&#xff0c;却让许多创新构想止步于实验室。数据科学家…...

以下是对华为 HarmonyOS NETX 5属性动画(ArkTS)文档的结构化整理,通过层级标题、表格和代码块提升可读性:

一、属性动画概述NETX 作用&#xff1a;实现组件通用属性的渐变过渡效果&#xff0c;提升用户体验。支持属性&#xff1a;width、height、backgroundColor、opacity、scale、rotate、translate等。注意事项&#xff1a; 布局类属性&#xff08;如宽高&#xff09;变化时&#…...

【RockeMQ】第2节|RocketMQ快速实战以及核⼼概念详解(二)

升级Dledger高可用集群 一、主从架构的不足与Dledger的定位 主从架构缺陷 数据备份依赖Slave节点&#xff0c;但无自动故障转移能力&#xff0c;Master宕机后需人工切换&#xff0c;期间消息可能无法读取。Slave仅存储数据&#xff0c;无法主动升级为Master响应请求&#xff…...

智能仓储的未来:自动化、AI与数据分析如何重塑物流中心

当仓库学会“思考”&#xff0c;物流的终极形态正在诞生 想象这样的场景&#xff1a; 凌晨3点&#xff0c;某物流中心灯火通明却空无一人。AGV机器人集群根据实时订单动态规划路径&#xff1b;AI视觉系统在0.1秒内扫描包裹信息&#xff1b;数字孪生平台正模拟次日峰值流量压力…...

Springboot社区养老保险系统小程序

一、前言 随着我国经济迅速发展&#xff0c;人们对手机的需求越来越大&#xff0c;各种手机软件也都在被广泛应用&#xff0c;但是对于手机进行数据信息管理&#xff0c;对于手机的各种软件也是备受用户的喜爱&#xff0c;社区养老保险系统小程序被用户普遍使用&#xff0c;为方…...

Unsafe Fileupload篇补充-木马的详细教程与木马分享(中国蚁剑方式)

在之前的皮卡丘靶场第九期Unsafe Fileupload篇中我们学习了木马的原理并且学了一个简单的木马文件 本期内容是为了更好的为大家解释木马&#xff08;服务器方面的&#xff09;的原理&#xff0c;连接&#xff0c;以及各种木马及连接工具的分享 文件木马&#xff1a;https://w…...

网站指纹识别

网站指纹识别 网站的最基本组成&#xff1a;服务器&#xff08;操作系统&#xff09;、中间件&#xff08;web容器&#xff09;、脚本语言、数据厍 为什么要了解这些&#xff1f;举个例子&#xff1a;发现了一个文件读取漏洞&#xff0c;我们需要读/etc/passwd&#xff0c;如…...

ZYNQ学习记录FPGA(一)ZYNQ简介

一、知识准备 1.一些术语,缩写和概念&#xff1a; 1&#xff09;ZYNQ全称&#xff1a;ZYNQ7000 All Pgrammable SoC 2&#xff09;SoC:system on chips(片上系统)&#xff0c;对比集成电路的SoB&#xff08;system on board&#xff09; 3&#xff09;ARM&#xff1a;处理器…...

【HarmonyOS 5】鸿蒙中Stage模型与FA模型详解

一、前言 在HarmonyOS 5的应用开发模型中&#xff0c;featureAbility是旧版FA模型&#xff08;Feature Ability&#xff09;的用法&#xff0c;Stage模型已采用全新的应用架构&#xff0c;推荐使用组件化的上下文获取方式&#xff0c;而非依赖featureAbility。 FA大概是API7之…...

字符串哈希+KMP

P10468 兔子与兔子 #include<bits/stdc.h> using namespace std; typedef unsigned long long ull; const int N 1000010; ull a[N], pw[N]; int n; ull gethash(int l, int r){return a[r] - a[l - 1] * pw[r - l 1]; } signed main(){ios::sync_with_stdio(false), …...