本文章转载加原创!!!

   我在一开始接触X Window System的时候,不知道为什么安装它,安装它有什么用处?

   下面就说一下关于X Window System:

   首先,它不是一个系统,它只能算的上是一个很厉害的服务,仅此而已,就是一个服务,然而这个服务的厉害之处就在于,在init 3,命令行中,我想让它显示显示图形,像安装了图形化界面,也就是init 5,但是通常在工作中,是不会安装init 5 这个运行界别的,因为会浪费大量的资源,那么在命令行如何让linux显示图形呢?比如安装oracle的时候,就会有这样的需求,那么这个X Window System就会排上用场了。

  

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

1.1 X Server:硬件管理、萤幕绘制与提供字型功能:

   既然 X Window System 是要显示图形介面,因此理所当然的需要一个组件来管理我主机上面的所有硬件设备才行! 这个任务就是 X Server 所负责的。而我们在 X 发展简史当中提到的 XFree86 计画及 Xorg 基金会,主要提供的就是这个 X Server 啦!那么 X Server 管理的设备主要有哪些呢?其实与输入/输出有关喔!包括键盘、鼠标、手写板、显示器 (monitor) 、萤幕解析度与色彩深度、显卡 (包含驱动程序) 与显示的字型等等,都是 X Server 管理的。

咦!显卡、萤幕以及键盘鼠标的配置,不是在启动的时候 Linux 系统以 /etc/sysconfig 目录下的 keyboard/mouse 等配置档就设好了吗?为何 X Server 还要重新配置啊?这是因为 X Window Linux 里面仅能算是『一套很棒的软件』, 所以 X Window 有自己的配置档,你必须要针对他的配置档配置妥当才行。也就是说, Linux 的配置与 X Server 的配置不一定要相同的!因此,你在 Linux run level 3 想要玩图形介面时,就得要加载 X Window 需要的驱动程序才行~总之, X Server 的主要功能就是在管理『主机』上面的显示硬件与驱动程序。

   既然 X Window System 是以透过网络取得图形介面的一个架构,那么用户端是如何取得服务器端提供的图形画面呢? 由於服务器与用户端的硬件不可能完全相同,因此我们用户端当然不可能使用到服务器端的硬件显示功能! 举例来说,你的用户端计算机并没有 3D 影像加速功能,那么你的画面可能呈现出服务器端提供的 3D 加速吗? 当然不可能吧!所以罗 X Server 的目的在管理用户端的硬件设备!也就是说:『每部用户端主机都需要安装 X Server,而服务器端则是提供 X Client 软件, 以提供用户端绘图所需要的数据数据』。

       X Server / X Client 的互动并非仅有 client --> server,两者其实有互动的! X Server 还有一个重要的工作,那就是将来自输入装置 (如键盘、鼠标等) 的动作告知 X Client 你晓得, X Server 既然是管理这些周边硬件,所以,周边硬件的动作当然是由 X Server 来管理的, 但是 X Server 本身并不知道周边设备这些动作会造成什么显示上的效果, 因此 X Server 会将周边设备的这些动作行为告知 X Client ,让 X Client 去伤脑筋。

1.2 X Client:负责 X Server 要求的『事件』之处理:

   前面提到的 X Server 主要是管理显示介面与在萤幕上绘图,同时将输入装置的行为告知 X Client 此时 X Client 就会依据这个输入装置的行为来开始处理,最后 X Client 会得到『 嗯!这个输入装置的行为会产生某个图示』,然后将这个图示的显示数据回传给 X Server X server 再根据 X Client 传来的绘图数据将他描图在自己的萤幕上,来得到显示的结果。

   也就是说, 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 的画面中,将鼠标向右移动,那他是怎么告知 X Server X Client 的呢? 首先, X server 会侦测到鼠标的移动,但是他不知道应该怎么绘图啊!此时,他将鼠标的这个动作告知 X Client X Client 就会去运算,结果得到,嘿嘿!其实要将鼠标指标向右移动几个位素,然后将这个结果告知 X server 接下来,您就会看到 X Server 将鼠标指标向右移动罗~

这样做有什么好处啊?最大的好处是, X Client 不需要知道 X Server 的硬件配备与操作系统!因为 X Client 单纯就是在处理绘图的数据而已,本身是不绘图的。所以,在用户端的 X Server 用的是什么硬件?用的是哪套操作系统?服务器端的 X Client 根本不需要知道~相当的先进与优秀~对吧! ^_^ 整个运行流程可以参考下图:用户端用的是什么操作系统在 Linux 主机端是不在乎的!

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

刚刚前面提到,X Client 的主要工作是将来自 X Server 的数据处理成为绘图数据,再回传给 X server 而已, 所以 X client 本身是不知道他在 X Server 当中的位置、大小以及其他相关资讯的。这也是上面我们谈到的, X client 彼此不知道对方在萤幕的哪个位置啊!为了克服这个问题,因此就有 Window Manager (WM, 窗口管理员) 的产生了。 窗口管理员也是 X client ,只是他主要在负责全部 X client 的控管,还包括提供某些特殊的功能,例如:

  • 提供许多的控制元素,包括工作列、背景壁纸的配置等等;

  • 管理虚拟壁纸      (virtual desktop)

  • 提供窗口控制参数,这包括窗口的大小、窗口的重叠显示、窗口的移动、窗口的最小化等等。

1.3.1 常用的X Window Manager

我们常常听到的 KDE, GNOME, XFCE 还有簡易到爆的 twm 等等,都是一些窗口管理员的专案计画啦! 这些专案计画中,每种窗口管理员所用以开发的显示引擎都不太相同,所著重的方向也不一样, 因此我们才会说,在 Linux 底下,每套 Window Manager 都是独特存在的,不是换了壁纸与显示效果而已, 而是连显示的引擎都不会一样喔!底下是这些常见的窗口管理员全名与连结:

   由於 Linux 越来越朝向 Desktop 桌上型计算机使用方向走,因此窗口管理员的角色会越来越重要! 目前我们 CentOS 默认提供的有 GNOME KDE ,这两个窗口管理员上面还有提供非常多的 X client 软件, 包括办公室生产力软件 (Open Office) 以及常用的网络功能 (firefox 浏览器、 Thunderbird 收发信件软件) 等。 现在使用者想要接触 Linux 其实真的越来越简单了,如果不要架设服务器,那么 Linux 壁纸的使用与 Windows 系统可以说是一模一样的!不需要学习也能够入门哩! ^_^

那么你知道 X Server / X client / window manager 的关系了吗?我们举 CentOS 默认的 GNOME 为例好了, 由於我们要在本机端启动 X Window system ,因此,在我们的 CentOS 主机上面必须要有 Xorg X server 核心, 这样才能够提供萤幕的绘制啊~然后为了让窗口管理更方便,於是就加装了 GNOME 这个计画的 window manager 然后为了让自己的使用更方便,於是就在 GNOME 上面加上更多的窗口应用软件,包括输入法等等的, 最后就建构出我们的 X Window System 罗~ ^_^!所以你也会知道,X server/X client/Window Manager 是同时存在於我们一部 Linux 主机上头的啦!

1.4 Display Manager:提供登陆需求

   谈完了上述的数据后,我们得要了解一下,那么我如何取得 X Window 的控制?在本机的文字介面底下你可以输入 startx 来启动 X 系统,此时由於你已经登陆系统了,因此不需要重新登陆即可取得 X 环境。但如果是 runlevel 5 的环境呢?你会发现在 tty7 的地方有个可以让你使用图形介面登陆 (输入帐号口令) 的咚咚,那个是啥? X Server/X client 还是什么的?其实那是个 Display Manager 啦!这个 display manager 最大的任务就是提供登陆的环境, 并且加载使用者选择的 Window Manager 与语系等数据喔!

   几乎所有的大型窗口管理员专案计画都会提供 display manager 的,在 CentOS 上面我们主要利用的是 GNOME GNOME Display Manager (gdm) 这支程序来提供 tty7 的图形介面登陆喔!至於登陆后取得的窗口管理员, 则可以在 gdm 上面进行选择的!并非 gdm 只能提供 GNOME 的登陆而已喔!

 

 

第2章 安装VNC步骤(rhel 7

2.1 安装x windowgnomechinese-support

yum grouplist
yum groupinstall “X Window System”
yum groupinstall “GNOME Desktop Environment”

yum groupinstall chinese-support 

2.2 配置vnc服务器端

参照centos 6 : http://www.cnblogs.com/jyzhao/p/5615448.html 

    1、安装vnc server端

yum install vnc* -y
2、创建密码,在家目录下生成配置文件

 Vncpasswd

3、确定启动方式gnome|KDE|。。。。

 [root@single ~]# vim .vnc/xstartup

#!/bin/sh

unset SESSION_MANAGER

unset DBUS_SESSION_BUS_ADDRESS

exec /etc/X11/xinit/xinitrc

gnome-session &

 

4、创建参数文件

[root@single ~]# cp /lib/systemd/system/vncserver@.service /lib/systemd/system/vncserver@:1.service

 

5、修改参数文件

[root@single ~]# vi /lib/systemd/system/vncserver@\:1.service
[Unit]
Description=Remote desktop service (VNC)
After=syslog.target network.target
 
[Service]
Type=forking
# Clean any existing files in /tmp/.X11-unix environment
ExecStartPre=/bin/sh -c '/usr/bin/vncserver -kill %i > /dev/null 2>&1 || :'
ExecStart=/sbin/runuser -l root -c "/usr/bin/vncserver %i"                                    --------改动处1:以root用户为例,-l后改动为username
PIDFile=/root/.vnc/%H%i.pid                                                                                  --------改动处2:.vnc前设置用户的家文件夹,root为/root
ExecStop=/bin/sh -c '/usr/bin/vncserver -kill %i > /dev/null 2>&1 || :'
 
[Install]
WantedBy=multi-user.target
 
6、编辑VNC的配置文件

Vim /etc/sysconfig/vncservers
添加以下内容:

VNCSERVERS="1:root"
VNCSERVERARGS[1]="-geometry 800x600 -alwaysshared -depth 24"

注:分辨率可以根据实际情况调整,分辨率不合适可能导致vnc连接显示黑屏的现象

7、启动

 Systemctl start vncserver@:1.service 

8.如果想开机自启动,那么  

Systemctl enable vncserver@:1.service

 

注:如果你是第一次接触RHEL7,那么你此时肯定连接不上VNC,因为:  

service iptables stop根本就关不掉防火墙!  

需要:systemctl stop firewalld  

 

总的来说需要编辑三个文件:

   1)、用户家目录下的.vnc/x*文件

   2)、lib/systemd/system/vncserver@\:1.service

   3)、编辑vnc的配置文件,/etc/sysconfig/vncservice


 

2.3 安装客户端VNC Viewer