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----------------- ...
随机推荐
- ThinkPHP集锦
使用frame搭建页面:不要引入静态的html文件,应该在Action的方法中填写 例:<frame name="menu" src="{:U(GROUP_NAME ...
- SQL Server开窗函数之OVER子句、PARTITION BY 子句
开窗函数与聚合函数一样,都是对行的集合组进行聚合计算.它用于为行定义一个窗口(这里的窗口是指运算将要操作的行的集合),它对一组值进行操作,不需要使用GROUP BY子句对数据进行分组,能够在同一行中同 ...
- Jquery使用ajax参数详解
记录一下 Jquery使用ajax(post.get及参数详解) 1.get: $.ajax({ type: "GET", url: baseUrl + "Showco ...
- Centos离线安装Docker并加入到Swarm管理节点
以root用户登录 加入Swarm前需要在Swarm上生成Token,所以需要提前将Swarm集群搭建完成后,再运行以下命令将各虚机加入到swarm节点 下载docker离线安装包,并拷贝到/root ...
- javaSe-字符型和布尔型
其实java数据类型一节就可以全部写完了,为什么还需要字符型和布尔型呢,原因是这俩个都很重要: 字符型用char表示,字符分三种: 普通字符:char a = 'a',普通字符表示一个普通的字符,没有 ...
- 洛谷 P2905 [USACO08OPEN]农场危机Crisis on the Farm
题目描述 约翰和他的奶牛组建了一只乐队“后街奶牛”,现在他们正在牧场里排练.奶牛们分成一堆 一堆,共1000)堆.每一堆里,30只奶牛一只踩在另一只的背上,叠成一座牛塔.牧场 里还有M(1 < ...
- 最新电脑公司最新GHOST WIN7系统32,64位极速安全版
系统来自系统妈:http://www.xitongma.com 电脑公司最新GHOST win7系统64位极速安全版 V2016年3月 系统简介 电脑公司ghost win7系统64位极速安全版集成了 ...
- Android(java)学习笔记136:利用谷歌API对数据库增删改查(推荐使用)
接下来我们通过项目案例来介绍:这个利用谷歌API对数据库增删改查 1. 首先项目图: 2. 这里的布局文件activity_main.xml: <LinearLayout xmlns:andro ...
- [R] 简单笔记(一)
library(lattice) xyplot(Petal.Length~Petal.Width,data=iris,goups = Species)//画分类图 plot(model,subdata ...
- 使用ServiceController组件控制计算机服务
实现效果: 知识运用: ServiceController组件的MachineName属性 //获取或设置服务所驻留的计算机名称 public string MachineName{get;set;} ...