• Linux桌面溯源


    Linux显示服务器协议

    X Window System(X.org):这是最早的显示服务器协议,也是最广泛使用的。它提供了一个图形用户界面,允许多个用户同时使用计算机。X.org支持硬件加速,窗口管理和输入处理等功能。
     
    Wayland:这是一个现代的显示服务器协议,旨在提供更高的性能和安全性。Wayland将显示服务器和窗口合成器分离,支持硬件加速和输入处理。它也引入了一些新的功能,如窗口管理和多点触控。
     
    Mir:这是一个由Canonical开发的显示服务器协议,旨在提供更高的性能和安全性。Mir是专门为触摸屏设计的,支持硬件加速和多点触控。
     
    Weston:这是一个基于Wayland的简单显示服务器,旨在提供一个简单的方式来运行Wayland应用程序。Weston支持硬件加速和多点触控。
     
    KMS(Kernel Mode Setting):这是Linux内核中的一个模块,允许直接从内核控制显示设备。KMS通常与X.org或Wayland一起使用,以提供图形用户界面。
     
    这些显示服务器协议的选择取决于具体的需求和使用场景。例如,如果需要一个简单、快速的显示服务器,可以选择Weston。如果需要一个提供高级功能的显示服务器,可以选择Wayland。
     

    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 变量值的格

    1. :<机器运行的第几号X server>.<该X server管理的第几号screen>
    2. 示例: :0.0,:0.1,:1.0
    3. 含义: X client读取该值后,会把绘图命令发送给<机器运行的第几号X server>,请求该X server将GUI绘制在<该X server管理的第几号screen>
    4. 注意: X client与X server必须位于同一机器,通过unix socket或内存通信
    5. <机器的IP或主机名>:<该机器运行的第几号X server>.<该X server管理的第几号screen>
    6. 示例: 192.168.1.2:0.0127.0.0.1:1.0,localhost:10.0
    7. 含义: X client读取该值后,会把绘图命令发送给<机器的IP或主机名>上的<机器运行的第几号X server>,请求该X server将GUI绘制在<该X server管理的第几号screen>
    8. 注意: 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=8icon-default.png?t=N7T8https://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博客

  • 相关阅读:
    iNFTnews|NFT和艺术有何区别?
    网络虚拟化之virtio-net和vhost
    原来Spring能注入集合和Map的computeIfAbsent是这么好用!
    再获认可!知道创宇入选“业务安全推进计划”首批成员单位
    PBR的应用
    无插件播放之http-flv
    python读取pdf表格并合并为excel
    创建型模式-工厂方法模式(二)
    Leetcode Java学习记录——代码随想录链表篇
    关于hive的时间戳
  • 原文地址:https://blog.csdn.net/MENGSONGSHAN/article/details/140342095