当前位置: 首页 > 编程日记 > 正文

【linux】图形界面基础知识(X、X11、GNOME、Xorg、KDE的概念和它们之间的关系)

转载自:https://blog.csdn.net/zhangxinrun/article/details/7332049

简介

LINUX初学者经常分不清楚linux和X之间,X和Xfree86之间,X和KDE,GNOME等之间是什么关系。常常混淆概念,本文以比较易于理解的方式来解释X,X11,XFREE,WM,KDE,GNOME等之间的关系。

linux本身没有图形界面,linux现在的图形界面的实现只是linux下的应用程序实现的。

图形界面并不是linux的一部分,linux只是一个基于命令行的操作系统,linux和Xfree的关系就相当于当年的DOS和 WINDOWS3.0一样,windows3.0不是独立的操作系统,它只是DOS的扩充,是DOS下的应用程序级别的系统,不是独立的操作系统,同样 XFree只是linux下的一个应用程序而已。不是系统的一部分,但是X的存在可以方便用户使用电脑。WINDOWS95及以后的版本就不一样了,他们 的图形界面是操作系统的一部分,图形界面在系统内核中就实现了,没有了图形界面windows就不成为windows了,但linux却不一样,没有图形 界面linux还是linux,很多装linux的WEB服务器就根本不装X服务器.这也WINDOWS和linux的重要区别之一。

X是协议,不是具体的某个软件。

X 是协议,就像HTTP协议,IP协议一样.这个概念很多初学者甚至学习LINUX有一定时间的人都混淆,一个基于X的应用程序需要运行并显示内容时他就联 接到X服务器,开始用X协议和服务器交谈。比如一个X应用程序要在屏幕上输出一个圆那么他就用X协议对X服务器说:喂!我需要在屏幕上画一个圆.X应用程 序只负责告诉X服务器在屏幕的什么地方用什么颜色画一个多大的圆,而具体的”画”的动作,比如这个圆如何生成,用什么显卡的驱动程序去指挥显卡完成等等工 作是由X服务器来完成的。X服务器还负责捕捉键盘和鼠标的动作,假设X服务器捕捉到鼠标的左键被按下了,他就告诉X应用程序:亲爱的应用程序先生,我发现 鼠标被按下了,您有什么指示吗?如果X应用程序被设计成当按下鼠标左健后再在屏幕上画一个正方形的话,X应用程序就对X服务器说:请再画一个正方形,当然 他会告诉服务器在什么地方用什么颜色画多大的正方形,但不关心具体怎么画–那是服务器的事情。

那么协议是需要具体的软件来实现的,这就是下面我要讲的:

X和XFree86的关系.

有 了协议就需要具体的软件来实现这个协议.就好比我们有了交通法规就需要交警去根据法规维护交通秩序一样.Xfree86就是这样一个去根据法规实现协议的 “交警”.他按照X协议的规定来完成X应用程序提交的在屏幕上显示的任务.当然不仅仅是某个特定的交警才可以去维护和实现这个法规,比如还可以由交通协管 员来实现交通法规,必要的时候警察也可以介入,当然前提是他们都要懂得交通法规,也就是要懂得协议.所以实现X协议的软件也并不只有 XFree86,XFree86只是实现X协议的一个免费X服务器软件.商业上常用MOTIF,现在还有XORG,还有很多很小的由爱好者写的小的X服务 器软件.甚至可以在WINDOWS上有X服务器运行,这样你可以在linux系统上运行一个X应用程序然后在另一台windows系统上显示.多么神奇. 你可以用google找到这样的X服务器软件.只不过在LINUX上最常用的是XFree86.(现在的linux发行版都用Xorg了)顺便说一句,苹 果电脑的图形界面用的也是X协议,而且被认为是做的最好的X协议图形界面,并且他对X协议的实施是做在系统内核里的,所以性能明显好很多,这就是为什么很 多大型三维图形设计软件都是在苹果平台上的原因.

为了便于理解拿HTTP协议来比较:

协议是HTTP (hyper text transmission protocol)
实现这个协议的常用服务器有:apache IIS 等
请求这些服务器传输文件的客户有:IE ,MOZILLA ,NETSCAPE等.

协议是X

实现这个协议的常用服务器有Xfree86 ,Xorg ,Xnest等

请求这些服务器来完成显示任务的客户:所有的X应用程序.

只 不过HTTP协议的服务器和客户端通常都在两台不同的电脑(服务器和客户机)之间来实现,所以一般人对这个比较容易理解.而X协议的服务器和客户端程序通 常在同一台电脑上,因此很多用户都感到对此很难理解.既然是协议,那么肯定和平台无关的,因此可以让X应用程序显示在任何装有X服务器的远程计算机上.甚 至显示在装有Xnest服务器的windows系统上.只不过在大多数情况下,X应用程序都用本机的X服务器,然后X服务器将显示结果输出到本机的显示 器.这也是很多人不理解X是一种协议的原因.

X和X11R6又是什么关系?

不知道初学者有没有注意到/usr/X11R6这个目录,这是XFree的默认安装目录
X11R6 实际上是 X Protocol version 11 Release 6
(X协议第11版第六次发行)的意思,就是说目前用的X协议是第11版的,然后经过了6次小的修正.不同版本的X协议是不能通信的.就象我们现在IPV4和IPV6不能通信一样,不过不用担心,现在的X服务器软件和X应用程序都遵循X11R6.

另外XFree86 3.3.6 XFree86 4.3.6 等这些版本是实现X协议的软件XFree86的版本号.这是初学者经常高混淆的概念.

协议版本和实现协议的软件的版本–这两个概念的区别你分清楚了吗?

X服务器和WM(window manager 窗口管理器)之间是什么关系.

平时大家起动图形界面是怎么启动的呢?
如果你是一开己就进入图形界面那就太遗憾了.应为你错过了了解X服务器起动过程的好时机.不过没关系.你打开一个XTERM输入:

init 3

就可以安全的回到字符界面.

好了,等做完以下实验你就完全明白X和WM(window manager 窗口管理器)之间是什么关系了.

先输入以下命令:
#startx

起动图形界面,你看到的是一个和平时使用一样的完整的图形界面操作环境.
你可以最大化,最小化,移动,关闭窗口等.

按ctrl+alt+backspace反回字符界面.

输入:
#xinit

再次启动图形界面,你看到了什么,你看到一个XTERM.而且不能移动.但是你可以在这个XTERM中输入命令打开X应用程序,如果我输入:
#mozilla
打开浏览器,你看到的浏览器和平时有什么不同吗?他在屏幕中间,不能移动,不能最小化,不能最大化,没有边框.

为什么同样一个X应用程序会有这样的不同呢?因为我们用startx起动图形界面的时候同时也启动了一个WM(即窗口管理器),如果你用KDE就起动了KDE,如果你用GNOME就起动了GNOME.但是你用xinit起动图形界面的时候却没有起动WM.

现在你明白窗口管理器的作用了吗?他的作用就是最大化,最小化,移动,关闭窗口等.而这些不是X服务器来负责完成的.

如果你用xinit起动图形界面并在xterm中输入twm,看看会有什么?
xterm被加上了一个边框,你可以通过这个边框移动,最大化,最小化这个xterm,twm就是XFree86中自带的窗口管理器,是一个比较简陋的最简单的窗口管理器,但是他具有窗口管理器的全部特征.

如果你不输入twm而输入gnome-session就可以起动GNOME
或者输入startkde起动KDE.

通过以上的实验你就可以清楚的明白他们之间的关系.

关于KDE和GNOME

KDE和GNOME是LINUX里最常用的图形界面操作环境,他们不仅仅是一个窗口管理器那么简单, KDE是K Desktop Environment 的缩写.他不仅是一个窗口管理器,还有很多配套的应用软件和方便使用的桌面环境,比如任务栏,开始菜单,桌面图标等等.

GNOME是GNU Network Object Model Environment 的缩写.和KDE一样,也是一个功能强大的综合环境.

另外在其它UNIX系统中,常常使用CDE作为这样一个环境.

其它的小型窗口管理器有:
window maker,after step,blackbox,fvwm,fvwm2,等等都是常用的优秀窗口管理器.REDHAT9中有 window maker 但是默认不安装,大家可以装来试试.只要xinit再wmaker&就可以用windowmaker了.

linux图形界面层次关系总结

linux本身–>X服务器<-[通过X协议交谈]->窗口管理器(综合桌面环境)–>X应用程序.

Xfree86服务器的实现包括两个部分,一部分是和显卡直接打交道的低层,一部分是和X应用程序打交道的上层。上层负责接收应用程序的请求和鼠标 键盘的动作。而和显卡直接打交道的底层负责指挥显卡生成图形,其实就是显卡驱动。上层接收到应用程序的请求后,将请求内容做适当处理,然后交给显卡驱动来 指挥 显卡完成画图的动作.另外,上层的捕捉键盘和鼠标动作的部分会向应用程序提供鼠标和键盘的状态信息,应用程序接收到这些信息后决定是否再有相应的动作.

平时说的VESA,VGA ,fbdev等其实就是针对不同模式显卡的驱动程序.
VESA(Video Electronics Standards Association)
VGA (Video Graphics Array)
fbdev (FrameBuffer Device)

都是不同的显卡标准,不过这些标准都已经很老了.现在的显卡都兼容这几种模式.

framebuffer模式的显卡本身不具有任何运算数据的能力,他好比是一个暂时存放水的水池.CPU将运算后的结果放到这个水池,水池再将结果 流到显示器.中间不会对数据做处理.在这中情况下,所有显示任务都有CPU完成,CPU负担很重.从frambuffer这个名字我们就能猜测到他的功能 了(数据侦缓冲).

在linux内核中有有framebuffer机制,摹仿framebuffer显卡的这种功能.他的好处是把显卡的硬件结构抽象掉,把所有的显卡都当做一个”水池”来用.应用程序也可以直接读取这个水池的内容.framebuffer的设备名是 /dev/fb
可以用命令:
#dd if=/dev/zero of=/dev/fb
清空屏幕.如果你的X用的是framebuffer的驱动,屏幕将全变黑.通过移动鼠标,切换窗口等动作可以让原先的内容重新显示.

如果你不用framebuffer驱动,可以在字符模式下做这个试验.屏幕将全部被清空.
以下的命令:
#dd if=/dev/fb of=fbfile
可以将fb中的内容保存下来,以后可以重新写回屏幕:
#dd if=fbfile of=/dev/fb

作用类似于屏幕截图,但是截下的图不能用普通图片浏览器看.

现在知道linux中framebuffer设备的神奇了吧.
linux字符界面在高分辨率下,启动时会有一个小企鹅logo,这个logo就是用framebuffer功能写上屏幕的.

VESA和VGA比FB要好很多,但是他的显示能力也很有限.CPU仍旧要处理大部分的显示任务.

现在的显卡就不一样了,CPU几乎不参数显示任务,而专注于运算工作.我们平时在linux下装显卡驱动,其实就是替换掉XFree86中底层的那 一部分. 使他有更强的显示能力.比如你的显卡是nvidia的,XFree默认的驱动是”nv”,他是一个nvidia显卡的通用驱动,但是他不能发挥 nvidia显卡的性能.这个”nv”驱动模块可以在:

/usr/X11R6/lib/modules/drivers

目录下找到,文件名是:nv_drv.o

这个目录下还有很多显卡驱动模块.
apm_drv.o dummy_drv.o nsc_drv.o sis_drv.o
ark_drv.o fbdev_drv.o nv_drv.o tdfx_drv.o
ati_drv.o glint_drv.o r128_drv.o tga_drv.o
atimisc_drv.o i128_drv.o radeon_drv.o trident_drv.o
chips_drv.o i740_drv.o rendition_drv.o tseng_drv.o
cirrus_alpine.o i810_drv.o s3_drv.o vesa_drv.o
cirrus_drv.o linux s3virge_drv.o vga_drv.o
cirrus_laguna.o mga_drv.o savage_drv.o
cyrix_drv.o neomagic_drv.o siliconmotion_drv.o

fbdev vga evsa 等都在其中.

只要在XF86Conf文件中的Section module段中指定了什么驱动,X就用哪个驱动.
代码:

Section “Module”
Load “dbe”
Load “extmod”
Load “fbdevhw” #这里用的是fbdev
Load “glx”
Load “record”
Load “freetype”
Load “type1”
Load “dri”
EndSection

这是XFree86 4.0以上版本的方法.即X主程序和驱动模块是分开的.

主程序是/usr/X11R6/bin/XFree86 (即上层部分)
然后主程序启动的时候根据配置文件决定用哪一个驱动.

但是,在XFree86以前的版本(3.3.6)中, X主程序和驱动模块是合在一起的,因此,以前的Xfree86 3.3.6 有很多针对不同显卡的版本.

另外其他的X服务器如KDrive 也是驱动也主程序整合的,因此同样是KDrive X服务器会有 VESA ,SVGA ,和 fbdev的版本之分.因为这些都是轻量级的X服务器,为了简化结构他做成这样.

Xfree86 4 做成驱动和主程序分离的好处是用户可以自己添加升级驱动.

相关文章:

DreamWeaver做ASP 第13页

第七步&#xff1a;修改资料篇 修改资料&#xff01;首先要清醒一点&#xff0c;什么人才可以修改。 一&#xff0c;本人只能修改自己的&#xff1b;二&#xff0c;管理员可以修改所有人的。 那今天先来搞个可以修改自己资料的页面。 顺序是&#xff1a;先确认是正确登录&#…

【linux命令】setterm控制终端属性命令(中英文)

###setterm中文 SETTERM(1) 用户命令 SETTERM(1) 名字 setterm - 设置终端属性 概要 setterm [选项] 描述 setterm向终端写一个字符串到标准输出&#xff0c;调用终端的特定功能。在虚拟终端上使用&#xff0c;将会改变虚拟终端的输出特性。不支持的选项将被忽略。 选项 对…

搜狗分身技术再进化,让AI合成主播“动”起来

整理 | 一一出品 | AI科技大本营去年 11 月的互联网大会期间&#xff0c;搜狗与新华社联合发布全球首个AI合成主播一经亮相&#xff0c;引起了人们对“AI媒体”的广泛讨论。如今&#xff0c;搜狗 AI 合成主播不断更新迭代。2 月 19 日&#xff0c;在新华社新媒体中心与搜狗公司…

Angular http跨域

var app angular.module(Mywind,[ui.router]); app.controller(Myautumn,function($scope,$http,$filter){ //$http跨域 //服务端设置 // 访问权限 response.setHeader("Access-Control-Allow-Origin", "*"); // 访问类型 response.setHeader(&q…

文本分类step by step(二)

&#xff08;注&#xff1a;如有转载请标明作者&#xff1a;finallyliuyu, 和出处&#xff1a;博客园&#xff09; 《文本分类 step by step(一)》 在《文本分类step by step&#xff08;一&#xff09;》中&#xff0c;我们从处理语料库开始讲起&#xff0c;一直讲到利用分类器…

Centos7.4 版本环境下安装Mysql5.7操作记录

Centos7.x版本下针对Mysql的安装和使用多少跟之前的Centos6之前版本有所不同的&#xff0c;废话就不多赘述了&#xff0c;下面介绍下在centos7.x环境里安装mysql5.7的几种方法&#xff1a;一、yum方式安装 Centos7.x版本下针对Mysql的安装和使用多少跟之前的Centos6之前版本有所…

叫你一声“孙悟空”,敢答应么?

整理 | 一一出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;随着自然语言理解等技术的发展&#xff0c;对话机器人如今盛行&#xff0c;而基于此的智能音箱产品的发展也异常火热。很多开发者一般热衷于在一些对话机器人平台上开发相应的语音技能&#xff0c;但也有不…

【linux】Matchbox(一):启动脚本

脚本执行顺序 启动X服务器 /etc/rc5.d/S01xserver-nodm --> …/init.d/xserver-nodm–> 对应进程&#xff1a; /bin/sh /etc/rc5.d/S01xserver-nodm start background xinit /etc/X11/Xsession–> 对应进程&#xff1a; xinit /etc/X11/Xsession – /usr/bin/Xorg …

java试用(1)hello world

设置环境变量path H:\soft\j2sdk1.4.2_17\bin;H:\soft\eclipse;%path%set CLASSPATH.;H:\soft\j2sdk1.4.2_17\jre\lib;JAVA_HOME: D:\jdk1.5.0PATH: D:\jdk1.5.0\bin;编写程序 Noname1.java (注意&#xff1a;文件名要和class名一样)class Noname1 { public static void…

GAN性能不稳?这九大技术可“镇住”四类缺陷

作者 | Bharath Raj译者 | ang010ela编辑 | 一一出品 | AI科技大本营尽管 GAN 领域的进步令人印象深刻&#xff0c;但其在应用过程中仍然存在一些困难。本文梳理了 GAN 在应用过程中存在的一些难题&#xff0c;并提出了最新的解决方法。使用 GAN 的缺陷众所周知&#xff0c;GAN…

java正则表达式获取指定两个字符串之间内容

xml解析利用正则表达式获取指定两个字符串之间内容 在遇到解析复杂xml的时候&#xff0c;想到大家所想到的都是利用dom4j作为首发工具&#xff0c;但是当遇到层次很多&#xff0c;较为复杂&#xff0c;我们难道还需要从根节点一层一层的解析下去吗&#xff1f;此时不仅代码繁琐…

【linux】Matchbox(二):基本概念

X server X server是Linux系统里面图形接口服务器的简称。Windows系统的界面是这个系统不可分割的一部分&#xff0c;各种窗口操作界面显示都是由系统核心直接管理的&#xff0c;而Linux的图形界面并不是系统的必要组成部分&#xff0c;它可以在无界面的条件下运行。当需要Lin…

Android 控件之ImageSwitcher图片切换器

ImageSwitcher是Android中控制图片展示效果的一个控件&#xff0c;如&#xff1a;幻灯片效果...&#xff0c;颇有感觉啊。做相册一绝 源码下载 一、重要方法 setImageURI(Uri uri)&#xff1a;设置图片地址 setImageResource(int resid)&#xff1a;设置图片资源库 setImageDra…

【Qt】Qt5.x移植后的环境配置(imx6)

1、环境配置脚本如下 #!/bin/shexport QTDIR=/usr/lib/qt5 export QT_QPA_PLATFORM_PLUGIN_PATH=$QTDIR/plugins export QT_QPA_PLATFORM=eglfs:fb=/dev/fb0 export QT_QPA_GENERIC_PLUGINS=evdevtouch:/dev/input/event1 export QT_QPAFONTDIR=/usr/lib/fonts export QML2_IM…

程序员如何避免“滴滴式裁员”悲剧?

作者 | 徐麟转载自数据森麟&#xff08;ID:shujusenlin&#xff09;滴滴于2月15日正式发表裁员公告&#xff0c;想必很多互联网人的朋友圈都已经被这条消息刷屏了&#xff0c;其中最常见的莫过于下面这张图了&#xff1a;此图一出&#xff0c;广大互联网吃瓜群众不禁后背发凉&a…

windows服务搭建及命令总结

1、图解FTP服务器搭建(Windows Server 2008) https://wenku.baidu.com/view/803bdc1759eef8c75fbfb361.html?fromsearch https://www.cnblogs.com/john2017/p/6269671.html 2、WindowsServer2008下搭建ApachePHPMySQL https://wenku.baidu.com/view/2e82b99ea1116c175f0e7cd18…

Linux下的CST和UTC时间的区别

在linux中&#xff0c;用date查看时间的时候显示&#xff1a;2008年 12月 17日 星期三 09:04:14 CSTCST China Standard Time UTC8:00 中国沿海时间(北京时间)世界协调时间(Universal Time Coordinated,UTC)GPS 系统中有两种时间区分&#xff0c;一为UTC&#xff0c;另一为LT&a…

Python之父重回决策层,未来如何发展?

作者 | 豌豆花下猫来源 | Python猫&#xff08;ID&#xff1a;python_cat&#xff09;春节假期结束了&#xff0c;大家陆续地重回到原来的生活轨道上。假期是一个很好的休息与调节的机会&#xff0c;同时&#xff0c;春节还有辞旧迎新的本意&#xff0c;它是新的轮回的开端。在…

【Android】adb命令总结

1、adb version 显示ADB工具版本 2、adb devices 查询设备&#xff0c;显示设备序列号 3、adb sideload < file_location> 通过USB进行ROM刷机 4、adb install < apk文件路径> 安装APK 5、adb uninstall <软件名> 卸载软件 6、adb push <本地路径>…

MySQL中char与varchar的区别

字符与字节的区别 一个字符由于所使用的字符集的不同&#xff0c;会并存储在一个或多个字节中&#xff0c;所以一个字符占用多少个字节取决于所使用的字符集注意&#xff1a;char与varchar后面接的数据大小为存储的字符数&#xff0c;而不是字节数&#xff08;其实是5.0版本以上…

怎样在Red Hat Enterprise Linux 5.4版本上安装GCC?

注意&#xff1a;如果打算使用GUI的方式安装&#xff0c;需要导入GPG-Key(否则在使用GUI时会出现public key for *.rpm is not installed) 请切换到安装光盘目录下&#xff1a; cd /media 可以看到 RHEL* 的目录&#xff0c;然后切换到这个目录中&#xff1a; cd RHEL* 你需要运…

【C++】mingw32-make+cmake:error: ‘nullptr‘ was not declared in this scope解决方法

###问题 使用cmake成功&#xff08;Configuring done Generating done&#xff09;后&#xff0c;在cmd终端中执行 mingw32-make报错&#xff1a; error: nullptr was not declared in this scope###原因 nullptr是在c11的新内容。编译时&#xff0c;没有添加对C11的支持。 解…

喜得爱女,吴恩达深情撰文:欢迎你来到新世界!

整理 | 琥珀出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;一个月前&#xff0c;吴恩达冷不丁在Twitter放出了重磅消息&#xff1a; “我们的最新‘成果’ Baby Ng 即将诞生&#xff01;2019 年 2 月见面&#xff01;”果然&#xff0c;昨日吴恩达公开了首个小公主降…

FastJson 简单使用

对象、List转JsonUser user new User(); /*JSON 序列化&#xff0c;默认序列化出的JSON字符串中键值对是使用双引号&#xff0c;如果需要单引号的JSON字符串&#xff0c; [eg:String jsonString JSON.toJSONString(map, SerializerFeature.UseSingleQuotes);] *fastjson序…

【数据安全案例】交警计算机系统再遭***,交通违法记录随意删除

根据新浪报道&#xff0c;据新华社10月14日电 利用当网管的机会&#xff0c;破解密码&#xff0c;非法进入交警计算机系统为他人删除车辆交通违法记录牟利。辽宁省鞍山市铁西区检察院透露&#xff0c;当地某公司员工程尚军因涉嫌破坏计算机信息系统罪&#xff0c;已于10月初被依…

开源,还能走多远?

【编者按】在各大厂纷纷拥抱开源的当口&#xff0c;“开源代码面临可持续发展危机”的言论也甚嚣尘上。早期&#xff0c;技术爱好者们“用爱发电”&#xff0c;“他们知道在出问题前&#xff0c;没人会注意到他们&#xff0c;没人会重视他们”。但遗憾的是&#xff0c;很长一段…

使用axis开发web service服务端

一、axis环境搭建 1.安装环境 JDK、Tomcat或Resin、eclipse等. 2.到 http://www.apache.org/dyn/closer.cgi/ws/axis/1_4 下载Axis的jar包 3.将Axis的jar包放入WEB-INF/lib目录下 二、编写web service服务端 1.编写服务 package com.webservice;public class HelloWebservice {…

【Qt】qt打印文件名、函数名、行号

#include <QDebug> #define MyDebug qDebug()<<"[FILE:"<<__FILE__<<",LINE"<<__LINE__<<",FUNC"<<__FUNCTION__<<"]

【Qt】Qt项目常用代码总结

路径 获取当前路径 #include <QCoreApplication> QString appDirPath QCoreApplication::applicationDirPath(); 转换成对应系统路径 返回路径名&#xff0c;使分隔符转换为适合底层操作系统的分隔符。 windows下为“\”; linux下为“/” #include <QDir> a…

滴滴裁员补偿丰厚,员工称裁出幸福感?

整理 | 一一出品 | AI科技大本营&#xff08;rgznai100&#xff09;滴滴裁员的“靴子”正在逐步落地。据《财经》报道&#xff0c;滴滴近日已给出裁员的具体赔偿方案&#xff1a;补偿一般为 N1 个月&#xff0c;如果本周能确认&#xff0c;再额外给一个月补偿——这一个月补偿是…