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

  1. 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博客

相关推荐
耶啵奶膘33 分钟前
uniapp-是否删除
linux·前端·uni-app
_.Switch1 小时前
高级Python自动化运维:容器安全与网络策略的深度解析
运维·网络·python·安全·自动化·devops
2401_850410831 小时前
文件系统和日志管理
linux·运维·服务器
JokerSZ.2 小时前
【基于LSM的ELF文件安全模块设计】参考
运维·网络·安全
XMYX-02 小时前
使用 SSH 蜜罐提升安全性和记录攻击活动
linux·ssh
芯盾时代2 小时前
数字身份发展趋势前瞻:身份韧性与安全
运维·安全·网络安全·密码学·信息与通信
心灵彼岸-诗和远方3 小时前
DevOps业务价值流:架构设计最佳实践
运维·产品经理·devops
一只哒布刘3 小时前
NFS服务器
运维·服务器
苹果醋34 小时前
Java8->Java19的初步探索
java·运维·spring boot·mysql·nginx
二十雨辰4 小时前
[linux]docker基础
linux·运维·docker