Linux那些事——GTK+, Qt, Gnome, KDE, xWindow, xOrg区别

Linux不仅内核开源,系统配置也是高度可定制化的,其中就包括我们所熟知的图形界面,从桌面环境,主题,字体,Icon我们都可以通过修改Linux的配置文件来修改。这就是为什么我选择Linux的理由,高度的个性化。

用了8年多的Linux桌面发行版,一直没有好好研究一下linux的图形界面xwindow,今天拿出来好好整理一下,也希望对刚入门linux的童鞋有一定帮助。

首先Linux是个开源且自由的软件,他只是一个内核,这意味着我们可以对其任何细节,模块,内核进行高度的定制化。所谓的图形界面,是在Linux环境下的一套或者说一个软件,为Linux提供了图形界面的能力。这和windows的设计很不一样,windows是把图形界面作为必不可少的部分(内核),也就是windows的发布永远携带了图形界面,他和windows系统是一体的,对于linux来说,图形界面是个可有可无的软件而已,没有xwindow,linux是操作系统,有xwindow,linux还是个操作系统,当你安装上了这个xwindow,linux只是多了一个软件而已。

那么关于Linux的图形界面,有很多故事可以讲,这里就来区分一下这些专业的名词。

x Window Server 与 x协议

又被称为x11或者X,所谓server,是一种服务器,就像http服务器,ftp服务器,简而言之这就是一个用来显示图形界面的服务器。xwindow最早由MIT研发,后广泛运用于Unix和Unix Like系统之上。现在几乎所有的操作系统都支持这个xWindow的运行。光有xwindow是不够的,这是一个协议,就像http服务器,http也是一个协议,所有遵守http协议开发的服务器都是http服务器,所有遵守x协议的服务器都叫x window server,所以x winwow server还需要client,这个客户端就是x协议下的应用,例如KDE,Gnome。这些client软件一般都是通过x11协议下的GTK和Qt图形库开发的,因为都遵守x协议,所以可以与x window server沟通,就像浏览器都可以和http服务器沟通一样。
[注:x11中11是x协议的版本号,目前是第11个版本]

x.org

Org顾名思义,是一个组织,他们致力于实现x11这套协议,并且基于这套协议,架构开发出了自己的x window server,就像apache开发了apache,是一个http服务器。xorg实现的这套xwindow在linux系统的图形界面中被广为接受,也是目前最流行的图形界面服务软件,当然除此以外也有其他组织和公司实现了这套x协议,比如Xfree86,Xnest,MOTIF等
理论上,任何公司,组织,个人都可以用计算机语言去实现一套xWindow服务系统,只需要遵守x11的协议,但是x.Org发布的这一套更加的有名,被Linux各发行版广为使用。苹果的Mac OS也是基于这个x协议的,并且mac的darwin内核内置了一个x window server,中和linux不太一样,linux没有把xwindow放在内核中。

GTK+ and Qt

这两个是GUI toolkits,这两个是软件库,类似c语言的stdio.h,win32,java里import的各种外部包,可以任开发者调用(应该是C/C++使用的库)去创建一些图形界面里面的控件,例如button,下拉菜单,窗口等。我记得JAVA里面也有类似AWT和Swing库。用这一套库开发出的图形空间将会有一套统一的风格和标准,这就是不同系统安装的不同软件有的时候会有相同的样式,因为他们可能使用了GTK或者QT的库。KDE默认使用Qt库开发,Gnome默认使用GTK+库开发,而这两套库又是基于X window server的,需要遵守x11协议,在xwindow server上运行,作为client应用实现的基础类库。接下来就要说说KDE和Gnome以及其他基于GTK和Qt开发的x软件。

KDE and Gnome

KDE 和 Gnome才是我们用户真正看到的图形界面,窗口管理器,当然他们还提供了例如菜单,软件列表,鼠标,桌面等控件,所以称他们为桌面环境更合适!他们属于x client级的应用,因为很多图形界面软件基于这些环境才能被管理,例如firefox,gimp等,桌面环境包含了大量的开发完成的桌面的控件,窗口,按钮,表单,动画等,除此以外,还有专门基于这两个桌面环境的软件,对于KDE,大部分的软件和控件都是基于QT库开发的,但也不是全部,GTK开发的软件同样可以运行在KDE环境中,但是有可能出现一些些小问题,崩溃等。而Gnome的大部分软件都是基于GTK+库开发,同样Qt开发的软件也可以运行于Gnome,这主要也归功于Gnome,KDE以及这些软件(firefox,gimp等)都是遵循x11的协议的client应用,他们具有兼容性,这里要强调,虽然KDE和gnome是桌面环境,窗口管理器,看似更庞大,更底层,但是对于x11协议来说,他们和在他们之上运行的窗口应用(例如firefox,gimp等)属于同级,都是基于x的client软件,他们只是为了方便管理图形界面下的多应用程序而生的。

其他环境

除了KDE和Gnome还有更多的桌面环境被广泛运用于Linux,之所以大家都听说这两个,是因为这两个桌面环境运用十分广泛,也可以说这两个软件用的人更多。其他的环境还有:

  1. XFCE-简单快速的桌面环境,基于GTK
  2. Cinnamon基于GTK
  3. MATE基于GTK
  4. LXDE基于GTK
  5. Trinity基于Qt

笔者搜索了一些关于桌面库的资料,发现,GTK的桌面环境多于Qt派,Qt几乎只有可怜的KDE一枝独秀,而且笔者也不太喜欢KDE,现在的KDE桌面环境一般是指KDE Plasma。Ubuntu有一个分支就是基于KDE的,有兴趣的童鞋可以安装Kubuntu体验一下,KDE的特色就是“花里胡哨”。

Unity

原来是ubuntu的默认桌面环境,基于gnome开发,ubuntu打算把他作为独立的桌面环境,但是后来这个项目挂了,估计是没有足够的人钱去开发了,现在ubuntu改用gnome3作为默认桌面环境,这让我非常伤心,只能说没有unity的ubuntu不是我爱的ubuntu,庆幸的是,由于gnome的高度可定制性,我将他充分个性化了。

其实,对于unity我有很多话想说,这是我最爱的桌面环境,记得,那是我第一个接触的Linux发行版,也是ubuntu第一次将unity对外公布,运用于版本11.04,那时的我还在上高中,身边的同学甚至不知道linux是什么,而我每天回家都会兴奋的打开我的ubuntu unity桌面,那时的我没有人能理解,唯独的快乐是深深的沉静在代码和定制linux的世界里。

那些年,爱折腾


Linux那些事——GTK+, Qt, Gnome, KDE, xWindow, xOrg区别的更多相关文章

  1. X11,GTK,QT,GNOME的区别与联系(UI工具总结)

    1,X11是X Window System Protocol, Version 11(RFC1013),是X server和X client之间的通信协议.X server是xfree86/xorg驱 ...

  2. linux桌面环境gnome,kde,xfce,lxde 使用比较(转)

    Linus Torvalds大神前几日在 Google+上表示,GNOME 3"无可容忍的凌乱",改投Xfce桌面环境.下面就GNOME, KDE, XFCE和 LXDE略作比较. ...

  3. [转帖]查看Linux用的桌面是GNOME、KDE或者其他

    http://superuser.com/questions/96151/how-do-i-check-whether-i-am-using-kde-or-gnome KDE 基于QT做的 已经越来越 ...

  4. 查看Linux用的桌面是GNOME、KDE或者其他(转)

    http://superuser.com/questions/96151/how-do-i-check-whether-i-am-using-kde-or-gnome 1) pgrep -l &quo ...

  5. Linux C 程序 GTK+图形界面编程(22)

    GTK+图形界面编程 Linux大多是在字符界面,但也可以开发图形界面 目前已经存在多种Linux下开发图形界面的程序开发包:最常用的是Qt和GTK+ Qt是一个跨平台的图形界面开发库,不仅仅支持Li ...

  6. Linux 虚拟串口及 Qt 串口通信实例

    Linux 虚拟串口及 Qt 串口通信实例 2011-06-22 17:49 佚名 互联网 字号:T | T Linux 虚拟串口及 Qt 串口通信实例是本文所要介绍的内容,在实现过程中,打开了两个伪 ...

  7. Linux Debian 如何部署 Qt?

    Linux Debian 如何部署 Qt? 在这里以 HelloWorld 为例 目录结构如下: . ├── HelloWorld ├── HelloWorld.sh ├── imageformats ...

  8. 【Linux开发】【Qt开发】配置tslibs触摸屏库环境设置调试对应的设备挂载点

    [Linux开发][Qt开发]配置tslibs触摸屏库环境设置调试对应的设备挂载点 标签(空格分隔): [Linux开发] [Qt开发] 比如: cat /dev/input/mice cat /de ...

  9. QT、QTE、qtopia区别

    QT.QTE.qtopia区别 Qt的授权是分为两条线,商业版和开源版.如果使用商业版的Qt,那么开发出的程序可以是私有的和商业的:如果使用的是开源版的Qt,由于其使用的是GPL协议,那么可发出的程序 ...

随机推荐

  1. vscode显示当前文件完整路径信息

    Code->Preferences->Settings 搜索window.title 原本是activeEditorShort,修改 activeEditorShort => act ...

  2. FileReader笔记

    FileReader API链接地址:https://developer.mozilla.org/en-US/docs/Web/API/FileReader 实例代码: <!DOCTYPE ht ...

  3. cmd执行jmeter命令生成报告的问题。

    现有几个jmeter脚本,准备以命令行的方式执行jmeter脚本,并生成报告. 一.使用python语言处理 1.目录结构 2.说明 jmx目录下是jmeter脚本 result目录下是生成的报告及文 ...

  4. python 文件练习

    # 注册:# 1.账号.密码存到文件# 2.判断输入是否为空# 3.校验用户是否存在# 4.用户名和密码长度在6-12位之间#将文件读取到字典中def get_users(): f = open('1 ...

  5. 64)vertor 简单使用

    1)简单 代码样例:我的理解   vector  其实就是一个简单的数组,然后通过迭代器来进行 遍历数组中的值,而且有自带push_back()来添加元素 #include<iostream&g ...

  6. PIL库参考文档之Image模块

    原文: https://pillow-cn.readthedocs.io/zh_CN/latest/reference/Image.html 中文版参考文档不全,所以自己试着翻译了一下,以下~备注部分 ...

  7. ZJNU 1217 - 航线问题——高级

    将所有航线的其中一边排序后,另一边进行类dp 定义一个数组c,c[i]表示在所有能够开通i条航线的组合中,位置序号最大的那条航线的序号的最小值 比如下面一个样例 1 3 2 4 3 1 4 2 此时对 ...

  8. Maven依赖三板大斧

    一:问题出现场景 记得有一次,面试时候面试官问了个问题,来哥们,“你们项目是maven搭建哈,你的项目里如果出现架包冲突了,你们怎么解决的?”. 我:......,装作很淡定,我们是通过报错,定位哪个 ...

  9. SLAM资料

    当下SLAM方案的总体介绍 http://wwwbuild.net/roboteasy/908066.html slam基础知识 https://www.zhihu.com/question/3518 ...

  10. ESLint javascript格式要求

    首行缩进2个空格 eslint: indent functionhello (name) { console.log('hi', name) } 字符串使用单引号(除了避免转义) eslint: qu ...