Linux学习-什么是 X Window System
Unix Like 操作系统不是只能进行服务器的架设而已,在美编、排版、制图、多媒体应用上也是有其 需要的。 这些需求都需要用到图形接口 (Graphical User Interface, GUI) 的操作的, 所以后来才有所 谓的 X Window System 这玩意儿。为啥图形窗口接口要称为 X 呢?因为就英文字母来看 X 是 在 W(indow) 后面,因此,人们就戏称这一版的窗口接口为 X 啰
X Window 的发展简史
X Window 系统最早是由 MIT (Massachusetts Institute of Technology, 麻省理工学院) 在 1984 年发 展出来的, 当初 X 就是在 Unix 的 System V 这个操作系统版本上面开发出来的。
由于这个 X 希望能够透过网络进行图形接口的存取,因此发展出许多的 X 通讯协议,这些网络架 构非常的有趣, 所以吸引了很多厂商加入研发,因此 X 的功能一直持续在加强!一直到 1987 年 更改 X 版本到 X11 ,这一版 X 取得了明显的进步, 后来的窗口接口改良都是架构于此一版本, 因此后来 X 窗口也被称为 X11。
我们可以知道的是:
- 在 Unix Like 上面的图形用户接口 (GUI) 被称为 X 或 X11;
- X11 是一个『软件』而不是一个操作系统;
- X11 是利用网络架构来进行图形接口的执行与绘制;
- 较著名的 X 版本为 X11R6 这一版,目前大部分的 X 都是这一版演化出来的 (包括 X11R7);
- 现在大部分的 distribution 使用的 X 都是由 Xorg 基金会所提供的 X11 软件;
- X11 使用的是 MIT 授权,为类似 GPL 的开放原始码授权方式。
主要组件: X Server/X Client/Window Manager/Display Manager
X Window system 是个利用网络架构的图形用户接口软件,那到底这个架构可以分成多少个组件呢?基本上是分成 X Server 与 X Client 两个组件而已喔!其中 X Server 在管理硬件,而 X Client 则是应用程序。在运作上,X Client 应用程序会将所想要呈现的画面告知 X Server , 最终由 X server 来将结果透过他所管理的硬件绘制出来!整体的架构我们大约可以使用如下的图示 来作个介绍:
X Server 的重点就是在管理客户端的硬件,包括接受键盘/鼠标等设备的 输入信息, 并且将图形绘制到屏幕上。
- XServer:硬件管理、屏幕绘制与提供字型功能:
X Server 的主要功能就是 在管理『主机』上面的显示硬件与驱动程序。
每部客户端主机都需要安装 X Server,而服务器端则是提供 X Client 软件, 以 提供客户端绘图所需要的数据数据
X Server 还有一个重要的工作,那就是将来自输入设备 (如键盘、鼠标等) 的动作告知 X Client, 你晓得, X Server 既然是管理这些周边硬件,所以,周边硬件的动作当然是由 X Server 来 管理的, 但是 X Server 本身并不知道接口设备这些动作会造成什么显示上的效果, 因此 X Server 会将接口设备的这些动作行为告知 X Client ,让 X Client 去伤脑筋。
- X Client:负责 X Server 要求的『事件』之处理:
X Client 最重要的工作就是处理来自 X Server 的动作,将该动作处理成为绘图数据, 再 将这些绘图数据传回给 X Server。由于 X Client 的目的在产生绘图的数据,因此我们也称呼 X Client 为 X Application (X 应用程序)。而且,每个 X Client 并不知道其他 X Client 的存在, 意思 是说,如果有两个以上的 X client 同时存在时,两者并不知道对方到底传了什么数据给 X Server , 因此 X Client 的绘图常常会互相重迭而产生困扰喔!
- X Window Manager:特殊的 X Client ,负责管理所有的 X client 软件
Window Manager (WM, 窗口管理员) 主要在负责全部 X client 的控管,还包括提供某些特殊的功能,例如:
- 提供许多的控制元素,包括任务栏、背景桌面的设定等等;
- 管理虚拟桌面 (virtual desktop);
- 提供窗口控制参数,这包括窗口的大小、窗口的重迭显示、窗口的移动、窗口的最小化等等。
- Display Manager:提供登入需求
图形接口登入 (输入账号密码)那是个 Display Manager 啦!这个 display manager 最大的任务就是提供登入的环境, 并且加载使用者选择 的 Window Manager 与语系等数据喔!
X Window 的启动流程
- 在文字接口启动 X :透过 startx 指令
我们都知道 Linux 是个多人多任务的操作系统,所以啦,X 窗口也是可以根据不同的使用者而有不 同的设定! 这也就是说,每个用户启动 X 时, X server 的分辨率、启动 X client 的相关软件及 Window Manager 的选择可能都不一样! 但是,如果你是首次登入 X 呢?也就是说,你自己还没有 建立自己的专属 X 画面时,系统又是从哪里给你这个 X 预设画面呢?而如果你已经设定好相关的 信息,这些信息又是存放于何处呢?
事实上,当你在纯文本接口且并没有启动 X 窗口的情况下来输入 startx 时,这个 startx 的作用就 是在帮你设定好上头提到的这些动作啰!startx 其实是一个 shell script ,他是一个比较亲和的程序, 会主动的帮忙使用者建立起他们的 X 所需要引用的配置文件而已。
startx 最重要的任务就是找出用户或者是系统默认的 X server 与 X client 的配置文件,而使用者也 能够使用 startx 外接参数来取代配置文件的内容。
[root@study ~]# startx [X client 参数] -- [X server 参数]
# 范例:以颜色深度为 16 bit 启动 X
[root@study ~]# startx -- -depth 16
startx 后面接的参数以两个减号『--』隔开,前面的是 X Client 的设定,后面的是 X Server 的设定。
startx 都是提到如何找出 X server / X client 的设定值而已! 没错,事实 上启动 X 的是 xinit 这支程序, startx 仅是在帮忙找出设定值而已!那么 startx 找到的设定值可用 顺序为何呢?基本上是这样的:
X server 的参数方面:
- 使用 startx 后面接的参数;
- 若无参数,则找寻用户家目录的文件,亦即 ~/.xserverrc
- 若无上述两者,则以 /etc/X11/xinit/xserverrc
- 若无上述三者,则单纯执行 /usr/bin/X (此即 X server 执行档)
X client 的参数方面:
- 使用 startx 后面接的参数;
- 若无参数,则找寻用户家目录的文件,亦即 ~/.xinitrc
- 若无上述两者,则以 /etc/X11/xinit/xinitrc
- 若无上述三者,则单纯执行 xterm (此为 X 底下的终端机软件)
- 由 startx 呼叫执行的 xinit
事实上,当 startx 找到需要的设定值后,就呼叫 xinit 实际启动 X 的。他的语法是:
[root@study ~]# xinit [client option] -- [server or display option]
那个 client option 与 server option 如何下达呢?其实那两个咚咚就是由刚刚 startx 去找出来的。在我们透过 startx 找到适当的 xinitrc 与 xserverrc 后,就交给 xinit 来执行。在预设的情况下 (使 用者尚未有 ~/.xinitrc 等文件时),你输入 startx , 就等于进行 xinit /etc/X11/xinit/xinitrc -- /etc/X11/xinit/xserverrc 这个指令一般!但由于 xserverrc 也不存在,因 此实际上的指令是:xinit /etc/X11/xinit/xinitrc -- /usr/bin/X。
那为什么不要直接执行 xinit 而是使用 startx 来呼叫 xinit 呢?这是因为我们必须要取得一些参数 嘛! startx 可以帮我们快速的找到这些参数而不必手动输入的。因为单纯只是执行 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 server 的文件: xserverrc
X 窗口最先需要启动的就是 X server 啊,那 X server 启动的脚本与参数是透过 /etc/X11/xinit/ 里面 的 xserverrc 。不过我们的 CentOS 7.x 根本就没有 xserverrc 这个文件啊! 那用户家目录目前也没 有 ~/.xserverrc ,这个时候系统会怎么做呢?其实就是执行 /usr/bin/X 这个指令啊! 这个指令也是 系统最原始的 X server 执行档啰。
在启动 X Server 时,Xorg 会去读取 /etc/X11/xorg.conf 这个配置文件。
我们的 Linux 可以『同时启动多个 X』喔!第一个 X 的画面会在 :0 亦即 是 tty2 ,第二个 X 则是 :1 亦即是 tty3 。X server 未注明加载的接口时,默认是使用 :0 ~ 但是 X client 未 注明时,则无法执行喔!
- 启动 X Client 的文件: xinitrc
假设你的家目录并没有 ~/.xinitrc ,则此时 X Client 会以 /etc/X11/xinit/xinitrc 来作为启动 X Client 的预设脚本。xinitrc 这个文件会将很多其他的文件参数引进来, 包括 /etc/X11/xinit/xinitrc-common 与 /etc/X11/xinit/Xclients 还有 /etc/sysconfig/desktop 。
你也可以发现最终在 XClient 文 件当中会有两个指令的搜寻, 包括 startkde 与 gnome-session 这两个,这也是 CentOS 预设会提供 的两个主要的 Window Manager 啰。 而你也可以透过修改 /etc/sysconfig/desktop 内的 DESKTOP=GNOME 或 DESKTOP=KDE 来决定默认使用哪个窗口管理员的。
另外,如果有特殊需求,你当然可以自定义 X client 的参数!这就得要修改你家目录下的 ~/.xinitrc 这 个文件啰。 不过要注意的是,如果你的 .xinitrc 配置文件里面有启动的 x client 很多的时候,千万 注意将除了最后一个 window manager 或 X Client 之外,都放到背景里面去执行啊!举例来说,像 底下这样:
xclock -geometry 100x100-5+5 &
xterm -geometry 80x50-50+150 &
exec /usr/bin/twm
意思就是说,我启动了 X ,并且同时启动 xclock / xterm / twm 这三个 X clients 喔! 如此一来, 你的 X 就有这三个咚咚可以使用了!如果忘记加上 & 的符号,那就..... 会让系统等待啊,而无法
一次就登入 X 呢!
- X 启动的埠口
既然 X 是可以跨网络的,那 X 启动的埠口是几号?
其实,CentOS 由于考虑 X 窗口是在本机上面运作,因此将埠口改为插槽档 (socket) 了,因此你无 法观察到 X 启动的埠口的。事实上, X server 应该是要启动一个 port 6000 来与 X client 进行沟 通的! 由于系统上面也可能有多个 X 存在,因此我们就会有 port 6001, port 6002... 等等。这也就 是说:(假设为 multi-user.target 模式, 且用户仅曾经切换到 tty1 而已)
X 窗口系统 | 显示接口号码 | 默认终端机 | 网络监听端口 |
---|---|---|---|
第一个 X | hostname:0 | tty2 | port 6000 |
第二个 X | hostname:1 | tty3 | port 6001 |
X 启动流程测试
好了,我们可以针对 X Server 与 X client 的架构来做个简单的测试喔! 这里假设你的 tty1 是multi-user.target 的,而且你也曾经在 tty2 测试过相关的指令,所以你的 X :1 将会启用在 tty3 喔!而且,底下的指令都是在 tty1 的地方执行的,至于底下的画面则是在 tty3 的地方展现。 因此,请 自行切换 tty1 下达指令与 tty3 查阅结果啰!
1. 先来启动第一个 X 在 :1 画面中:
[dmtsai@study ~]$ X :1 &
上述的 X 是大写,那个 :1 是写在一起的,至于 & 则是放到背景去执行。此时系统会主动的跳到 第二个图形接口终端机,亦即 tty3 上所以如果一切顺利的话,你应该可以看到一个 X 的鼠标 光标可以让你移动了。接下来,请按下 [ctrl]+[alt]+[F1] 回到刚刚下达指令的终端机:
2. 输入数个可以在 X 当中执行的虚拟终端机
[dmtsai@study ~]$ xterm -display :1 &
[dmtsai@study ~]$ xterm -display :1 &
去到 tty3 查阅一下。唉~没有多出一个终端机啊? 这是因为两个终端机 重迭了~我们又无法移动终端机,所以只看到一个。 接下来,请再次回到 tty1 去下达指令吧!(可能需要 yum install xorg-x11-apps 喔!)
3. 在输入不同的 X client 观察观察,分别去到 tty3 观察喔!
[dmtsai@study ~]$ xclock -display :1 &
[dmtsai@study ~]$ xeyes -display :1 &
加载窗口管理员
4. 输入可以管理的 window manager,我们这边先以 root 来安装 twm 喔!
[root@study ~]# yum install http://ftp.ksu.edu.tw/FTP/CentOS/6/os/x86_64/\
> Packages/xorg-x11-twm-1.0.3-5.1.el6.x86_64.rpm
# 真要命!CentOS 7 说 twm 已经没有在维护,所以没有提供这玩意儿了!鸟哥只好拿旧版的 twm 来安装!
# 请您自行到相关的网站上找寻这个 twm 啰!因为版本可能会不一样!
[root@study ~]# yum install xorg-x11-fonts-{100dpi,75dpi,Type1}
5. 接下来就可以开始用 dmtsai 的身份来玩一下这玩意儿了!
[dmtsai@study ~]$ twm -display :1 &
玩玩看先!
6. 将所有刚刚建立的 X 相关工作全部杀掉! [dmtsai@study ~]# kill %6 %5 %4 %3 %2 %1
Linux学习-什么是 X Window System的更多相关文章
- Linux X Window System运行原理和启动过程
本文主要说明X Window System的基本运行原理,其启动过程,及常见的跨网络运行X Window System. 一) 基本运行原理 X Window System采用C/S结构,但和我们常见 ...
- linux学习第一天(X window 及 语系查询设置)
前言: 在写这篇博文之前,我已经详细阅读了<鸟哥的Linux私房菜>,但是实践并不深入,只是单纯的为了了解常用的命令,扩展自己的知识广度.看过一遍感觉收获还是有的,但是并不是很精通.因此, ...
- Linux学习-Linux历史(总结篇)
Linux之前,Unix的历史 1969年以前,一个伟大的梦想:Bell,MIT与GE的Multics系统 在此之前的计算机主机少,用户从多,程序是在读卡纸上打洞,光是等待.为了更加强化大型主机的功能 ...
- linux学习心得之目录树开端与/etc(图文)
linux学习心得之目录树开端与/etc(图文) linux中“一切皆文件”,学习linux一年了,在学习过程中对目录树的一点心得,分享给大家,有不对的地方敬请斧正. 不多说了,先上图: 根目录: / ...
- Linux学习之Centos(三)------系统文件目录及含义详解
Linux学习之Centos 之三------文件目录及含义 在了解了每个文件的相关种类与属性,以及了解了如何更改文件属性/权限的相关信息后,再来要了解的就是, 为什么每套Linux distribu ...
- Linux学习之CentOS(五)--CentOS下VMware-Tools安装
已经进入到了Linux学习之CentOS的第六篇随笔了,所以这里就介绍一下VMware-Tools的安装. VMware-Tools的安装 VMware-Tools 主要的功能就是让用户在虚拟机和真实 ...
- Linux学习之CentOS(三)--初识linux的文件系统以及用户组等概念
Linux学习之CentOS(三)--初识linux的文件系统以及用户组等概念 进入到了Linux学习之CentOS第三篇了,这篇文章主要记录下对linux文件系统的初步认识,以及用户组.用户权限.文 ...
- linux学习:【第3篇】远程连接及软件安装
狂神声明 : 文章均为自己的学习笔记 , 转载一定注明出处 ; 编辑不易 , 防君子不防小人~共勉 ! linux学习:[第3篇]远程连接及软件安装 远程连接 xshell , xftp软件官网 : ...
- Linux 学习笔记之超详细基础linux命令 Part 5
Linux学习笔记之超详细基础linux命令 by:授客 QQ:1033553122 ---------------------------------接Part 4----------------- ...
随机推荐
- openstack安装newton版本neutron服务部署(四)
一.管理节点部署服务: 1.安装neutron: [root@linux-node1 ~]# yum install openstack-neutron openstack-neutron-ml2 o ...
- Mysql有什么办法批量去掉某个字段字符中的空格
Mysql有什么办法批量去掉某个字段字符中的空格?不仅是字符串前后的空格,还包含字符串中间的空格,答案是 replace,使用mysql自带的 replace 函数,另外还有个 trim 函数. ...
- JavaScript是什么
JavaScript是一种解释型语言而不是编译型语言,它往往被认为是一种脚本语言,而不被看作是一种真正的编程语言.也就是说,脚本语言比较简单,它们是非程序员所使用的编程语言. 如果一个程序员对Java ...
- Ubuntu 12.04源
deb http://ubuntu.uestc.edu.cn/ubuntu/ precise main restricted universe multiverse deb http://ubuntu ...
- Android方法数methods超过65536
当Android App中的方法数超过65535时,如果往下兼容到低版本设备时,就会报编译错误: Cannot fit requested classes in a single dex file. ...
- Ionic 2 中的创建一个闪视卡片组件
闪视卡片是记忆信息的重要工具,它的使用可以追溯到19世纪.我们将要创建一个很酷的短暂动画来实现它.看起来像是这个样子的: 闪视卡片示例 Ionic 2 实例开发 新增章节将为你介绍如何在Ionic 2 ...
- IT圈网红,抢鲜围观
即将于2017年10月23-26日,在北京举办的微软技术暨生态大会,是微软中国年度最盛大的科技峰会,是微软技术大会与合作伙伴大会的首次联袂,也是聚集众多IT大咖的技术狂欢派对. 无论你想实现现代化工作 ...
- python+selenium之多表单切换
在Web应用中经常会遇到fram/iframe表单嵌套页面的应用,WebDriver只能在一个页面上对元素识别与定位,对于fram/iframe表单内嵌套页面上的元素无法直接定位.这是需要通过swit ...
- 学习Linux的好网站
http://www.linuxcommand.org/ 很不错的学习shell和script的教程.包含:Learning the shell 和 writing shell scripts 两个内 ...
- OpenGL小试牛刀第二季(粒子模拟)
效果截图:粒子模拟代码展示:#include "Particle.h" /** 构造函数 */CParticle::CParticle(){ data = NULL; numpar ...