zoukankan      html  css  js  c++  java
  • Linux X Windows介绍(参考鸟哥私房菜和百度百科)

    什么是 X Window System?

    X Window即X Windows图形用户接口,是一种计算机软件系统和网络协议,提供了一个基础的图形用户界面(GUI)和丰富的输入设备能力联网计算机。其中软件编写使用广义的命令集,它创建了一个硬件抽象层,允许设备独立性和重用方案的任何计算机上实现。

    主要组件: X Server/X Client/Window Manager/Display Manager

    X Window System 的架构

    1.服务端( X Server):硬件管理、屏幕绘制、提供字体功能

      Server是控制显示器和输入设备(键盘和鼠标)的软件。Server可以创建视窗,在视窗中绘图和文字,回应Client程序的“需求”(requests),但它不会自己完成,只有在Client程序提出需求后才完成动作。

      每一套显示设备只对应惟一的Server,而Server一般由系统供应商提供,通常无法被用户修改。对操作系统而言,Server只是一个普通的用户程序而已,因此很容易更换新版本,甚至更换成第三方提供的原始程序。

    2.客户端(X Client):负责 X Server 要求的『事件』之处理:

      Client是使用系统视窗功能的一些应用程序。在X下的应用程序称做Client,原因是它是Server的客户,要求Server回应它的请求完成特定动作。Client无法直接影响视窗行为或显示效果,只能送一个请求(request)给Server,由Server来完成这些的请求。典型的请求通常是“在某个视窗中写‘Hello World’的字符串”,或者从A到B划一条直线。

      Client的功能大致可分为两部分:1.向Server发出“需求”只是它的一部分功能;2.其他的功能是为用户执行程序而准备的。例如输入文字信息、作图、计算等等。通常,Client程序的这一部分是和X独立的,它对于X几乎不需要知道什么。比如,应用程序(特别是只大型的标准绘图软件、统计软件等)对许多输出设备具有输出的能力,而在X视窗中的显示只是Client程序许多输出中的一种,所以,Client程序中和X相关的部分只占整个程序中很小的一部分。

      用户可以通过不同的途径使用Client程序:通过系统提供的程序使用;通过第三方的软件使用;或者用户为了某种特殊应用而自己编写的Client程序来使用。

    3.X Window Manager:特殊的 X Client ,负责管理所有的 X client 软件

    主要在负责全部 X client 的控管,还包括提供某些特殊的功能,例如:

    • 提供许多的控制元素,包括工作列、背景壁纸的配置等等;
    • 管理虚拟壁纸 (virtual desktop);
    • 提供窗口控制参数,这包括窗口的大小、窗口的重叠显示、窗口的移动、窗口的最小化等等。
    • 主流X Window Manager有KDE、GNOME、TWM、XFCE

    4.Display Manager:提供登陆需求

     

    X Window的启动流程

    1).通过startx命令,读取用户或系统默认的X Server和X Client的配置文件

     startx 是一个 shell script,找出使用者或者是系统默认的 X server 与 X client 的配置文件,而使用者也能够使用 startx 外接参数来取代配置档的内容。这个意思是说:startx 可以直接启动,也能够外接参数,例如底下格式的启动方式:

    [root@www ~]# startx [X client 参数] -- [X server 参数]
    
    # 范例:以色彩深度为 16 bit 启动 X
    [root@www ~]# startx  --  -depth 16

      启动 X 的是 xinit 这支程序, startx 仅是在找出配置值!那么 startx 找到的配置值可用顺序为何呢?基本上是这样的:

    • X server 的参数方面:
      1. 使用 startx 后面接的参数;
      2. 若无参数,则找寻使用者家目录的文件,亦即 ~/.xserverrc
      3. 若无上述两者,则以 /etc/X11/xinit/xserverrc
      4. 若无上述三者,则单纯运行 /usr/bin/X (此即 X server 运行档)
    • X client 的参数方面:
      1. 使用 startx 后面接的参数;
      2. 若无参数,则找寻使用者家目录的文件,亦即 ~/.xinitrc
      3. 若无上述两者,则以 /etc/X11/xinit/xinitrc
      4. 若无上述三者,则单纯运行 xterm (此为 X 底下的终端机软件)

    2).由startx调用执行的xinit,启动X Server和加载X Client

      当 startx 找到需要的配置值后,就呼叫 xinit 实际启动 X 的。用法是:

    [root@www ~]# xinit [client option] -- [server or display option]

    因为单纯只是运行 xinit 的时候,系统的默认 X Client 与 X Server 的内容是这样的:

    xinit xterm  -geometry  +1+1  -n  login  -display  :0 --  X  :0

    在 X client 方面:那个 xterm 是 X 窗口底下的虚拟终端机,后面接的参数则是这个终端机的位置与登陆与否。 最后面会接一个『 -display :0 』表示这个虚拟终端机是启动在『第 :0 号的 X 显示介面』的意思。至於 X Server 方面, 而我们启动的 X server 程序就是 X 啦!其实 X 就是 Xorg 的连结档,亦即是 X Server 的主程序! 所以启动 X 还挺简单的~直接运行 X 而已,同时还指定 X 启动在第 :0 个 X 显示介面。 如果单纯以上面的内容来启动你的 X 系统时,你就会发现 tty7 有画面了!只是.....很丑~因为还没启动 window manager !

    启动X server文件:xserverrc

    X 窗口最先需要启动的就是 X server 。 CentOS 5.x 根本就没有  /etc/X11/xinit/xserverrc和~/.xserverrc文件。所以只有运行原始 /usr/bin/X命令,该命令读取 /etc/X11/xorg.conf。其实 X 启动的时候还可以指定启动的界面。 :0 这个参数,这是啥? 事实上我们的 Linux 可以『同时启动多个 X』!第一个 X 的画面会在 :0 亦即是 tty7 ,第二个 X 则是 :1 亦即是 tty8 。 后续还可以有其他的 X 存在的。启动了 X server 后,接下来就是加载 X client 到这个 X server 上面。

    启动X client文件:xinitrc

     X Client从 ~/.xinitrc或以 /etc/X11/xinit/xinitrc 作为启动 X Client 的默认脚本。不过分析到最后,其实最终就是加载 KDE 或者是 GNOME 而已。你也可以发现最终在 XClient 文件当中会有两个命令的搜寻, 包括 startkde 与 gnome-session 这两个,这也是 CentOS 默认会提供的两个主要的 Window Manager。

    X 启动的端口

      考虑 X 窗口是在本机上面运行,因此将端口改为插槽文件 (socket) 了,因此无法观察到 X 启动的端口的。事实上, X server 应该是要启动一个 port 6000 来与 X client 进行沟通的! 由于系统上面也可能有多个 X 存在,因此我们就会有 port 6001, port 6002... 等等。这也就是说:

    X 窗口系统 显示界面号码 默认终端机 网络监听端口
    第一个 X hostname:0 tty7 port 6000
    第二个 X hostname:1 tty8 port 6001

    在 X Window System 的环境下,我们称 port 6000 为第 0 个显示界面,亦即为 hostname:0 , 那个主机名称通常可以不写,所以就成了 :0 即可。在默认的情况下,第一个启动的 X (不论是启动在第几个 port number) 是在 tty7 ,亦即按下 [ctrl]+[Alt]+[F7] 那个画面。 而起动的第二个 X (注意到了吧!可以有多个 X 同时启动在您的系统上呢) 则默认在 tty8 亦即 [ctrl]+[Alt]+[F8] 。

  • 相关阅读:
    ios设备new Date('2019-07-26 11:00:00')报错
    vue图片压缩(不失真)
    ios微信端网页点击右上角复制链接或在浏览器打开,得不到当前页地址(动态路由)
    ios打开网页,输入框获取焦点键盘弹起,关闭键盘,界面下方空白不回弹
    vue-cli打包后vendor.js文件太大怎么办
    ios点击有300毫秒延迟,输入框必须重压或长按才能获取焦点唤起软键盘
    ios微信端上下滑动页面,若触摸的是input区域,页面内不滚动,整个页面被拖动了
    vue-cli打包优化之分析工具webpack-bundle-analyzer
    vue引入fastclick设置输入框type="number"报错Failed to execute 'setSelectionRange' on 'HTMLInputElement': The input element's type ('number') does not support selection.的解决办法
    js/vue图片压缩
  • 原文地址:https://www.cnblogs.com/bigrabbit/p/2710546.html
Copyright © 2011-2022 走看看