当前两个最流行的linux desktop environment: GNOME 和KDE, 两者对应的图形库分别是 GTK+ 和 QT.

GNOME与KDE与X11的关系:

X defines no user interface, but provides the means to make one. This means you’re free to create your own entire desktop environment, experimenting and innovating at will. But, it also hindered user interfaces on Linux and UNIX for a long time. Into this relative void, two desktop projects emerged as the favorites of Linux: KDE 和 GNOME, 即两者的底层基础应该是X11吧,毕竟X11跟显卡打交道!

GTK+ 和QT的图形库的基础/底层是桌面系统,一般被称为“X Window System”或X11或X. X11是开源的,1980s起始于MIT,当时开发x11是为了给高端的科学工作站提供统一的桌面系统,到1990s,随着硬件价格的降低,人们发起了名为XFree86的项目,将x11移植到家庭pc。(PC processors made by Intel and other commpanies are known as x86 processors)。

X11分为两部分: hardware-level(X server) 和 application-level(X client),两部分通过X protocol 来通信。

hardware-level(X server):

负责底层操作,将图形显示到显示器上。X server直接与显卡打交道,从而电脑中使用的x server需要与电脑中的显卡相匹配,例如分辨率,refresh rate, color depth等。配置文件名字为xorg.conf或Xfree86Config。 在以前,需要手动配置文件,但是在当今的linux版本中,会自动检测显卡。

X server监听用户输入,例如鼠标,键盘事件,并将其传送到 X client.

application-level(X client):

指的是使界面应用程序, X client 等待X server发送过来的用户实事件,然后反馈redraw message to X server,server便可以根据指示来重新绘制界面。

X client和X server可以放在不同的机器上。

X protocol:

使得x server和x client可以分开部署。

Xlib:

Xlib被X client间接调用,Xlib构造出x protocol信息传递给X server。Xlib提供了基本的API,其用于绘制基本的图形元素等。Xlib非常的底层,如果直接调用xlib来绘制一个简单的菜单,也需要上百行代码。从而,编程设计人员开发时不会直接调用Xlib,而是使用toolkit工具包, 例如GTK+ 和 QT!!工具包让开发这只需要几行代码便可以创作出一个菜单,其实是对Xlib的封装吧。

对于X11,有很多toolkit可以选择,各有优缺点,为你的应用选择合适的toolkit是一个非常重要的决定,需要考虑的因素有:

❑Who are you targeting with your application?

❑ Will your users have the toolkit libraries installed?

❑ Does the toolkit have a port for other popular operating systems?

❑ What software license does the toolkit use, and is it compatible with your intended use?

❑ Does the toolkit support your programming language?

❑ Does the toolkit have a modern look and feel?

Window Managers(窗口管理器):

负责将窗口放置在屏幕上,一般支持seperate workspace,即将桌面分割。也负责,在每个窗口周边增加装饰,例如最大化按钮。

Common window managers include:

❑ Metacity, the default window manager for the GNOME desktop.

KWin, the default window manager for the KDE desktop.

❑Openbox, designed to conserve resources and run on older, slower systems.

❑ Enlightenment, a window manager that displays awesome graphics and effects.

As with everything in X, you can switch window managers. Most users, though, run the window manager that comes with their desktop environment.

----------------------------------------------------------------------------------------------------
Other Ways to Create a GUI — Platform-Independent Windowing APIs

It’s worth mentioning other ways to create GUIs that are not specific to Linux — there are languages that have native GUI support  under Linux:

❑ The Java Language supports programming GUIs using the Swing and older AWT APIs. The look and feel of Java GUIs isn’t to everybody’s taste, and on older machines the interface can feel clunky and unresponsive. A great advantage of Java is that once you’ve compiled your Java code, it runs unchanged on any platform with a Java Virtual Machine, which includes Linux, Windows, Mac OS, and mobile devices. See http://java.sun.com for more information.

❑ C# is a programming language very similar to Java. On Linux, the C# Common Language Runtime, or CLR, platform comes from the Mono project at http://www.mono-project.com. C# on the Mono platform supports both Windows. Forms, also used on Windows, and a special binding to the GTK+ toolkit, called Gtk#.

❑ Tcl/Tk is a scripting language that is excellent for rapid development of GUIs and works with X, Windows, and Mac OS. It’s great for rapid prototyping or for small utilities where you want the simplicity and maintainability of a script. You can find all the details at http://tcl.tk.

❑ Python is also a scripting language. You can use the Tk part of Tcl/Tk from Python, or you can program to the Python GTK+ binding, writing GTK+ programs in Python. You can find more about Python at http://www.python.org.

❑ Perl is another common Linux scripting language. You can use the Tk part of Tcl/Tk from Perl, as Perl/Tk. You can find more about Perl at http://www.perl.org/.

With the platform independence that these languages bring there is a price to pay. Sharing informationwith native applications — for instance, using “drag and drop” — is difficult, and saving configuration usually has to be done in a proprietary rather than the desktop standard way. Sometimes vendors of Java software cheat by shipping with platform-specific extensions to get around these sorts of problems.

BeginLinux Programming chapter16: X11桌面系统简介的更多相关文章

  1. 嵌入式Qt程序启动参数-qws 不需要X11桌面系统

    1 背景 通过串口终端启动arm开发板(linux系统)的Qt应用程序,提示: [root@FORLINX6410]# /opt/qt-4.7.1/demos/textedit/textedit s3 ...

  2. Linux 桌面玩家指南:04. Linux 桌面系统字体配置要略

    特别说明:要在我的随笔后写评论的小伙伴们请注意了,我的博客开启了 MathJax 数学公式支持,MathJax 使用$标记数学公式的开始和结束.如果某条评论中出现了两个$,MathJax 会将两个$之 ...

  3. 不管服不服 Windows仍是全球第一大桌面系统

    不管服不服 Windows仍是全球第一大桌面系统 近日,根据来自市场调研机构 Net Applications 公布的统计数据显示,Windows 依然是世界上排名第一的操作系统,而且未来将很难被打破 ...

  4. Ubuntu与ROS的Docker桌面系统与ROS在线练习课程(在线Linux虚拟机)

    ROS在线练习课程正在逐步完善中,目前以ROS官网中文资料制作,可参考: https://www.shiyanlou.com/courses/854  邀请码 U23ERF8H 安装Ubuntu+RO ...

  5. 树莓派4B踩坑指南 - (1)系统简介及特性

    系统简介及特性 19年双十一入坑树莓派4B,发现不是一般的坑,对于新出来的4B,从外包装壳,到接口,到内核,很多老的资料已经不再适用,又没有什么特别大的论坛可以讨论,只能自己一点点的摸索. 所以将遇到 ...

  6. .Net简单图片系统-简介

    系统简介 最近做了一个简单图片系统,这个系统就是 将上传的的图片保存到系统本地文件系统或者基于fastdfs的分布式文件系统中,在查看图片时会直接请求此系统或者fastdfs的tracker服务器(需 ...

  7. "浅谈Android"第一篇:Android系统简介

    近来,看了一本书,名字叫做<第一行代码>,是CSDN一名博主写的,一本Android入门级的书,比较适合新手.看了书之后,有感而发,想来进行Android开发已经有一年多了,但欠缺系统化的 ...

  8. 【译】Android系统简介—— Activity

    续上一篇,继续介绍Android系统.上一篇: [译]Android系统简介 本文主要介绍构建Android应用的一些主要概念: Activity Activity是应用程序中一个单独的有UI的页面( ...

  9. Android系统简介(中):系统架构

    Android的系统架构栈分为4层,从上往下分别是Applications.Application framework.Libraries  & Android Runtime.Linux  ...

随机推荐

  1. TensorFlow(十五):使用inception-v3实现各种图像识别

    上代码: import tensorflow as tf import os import numpy as np import re from PIL import Image import mat ...

  2. Python -三目运算(三元运算)

    if 1==1: name = "jacky" else: name = "zhuyuanlu" name = 值1 if 条件 else 值2 #如果这个条件 ...

  3. centos7 安装 mysql5.6(MySQL-5.6.44-1.el7.x86_64.rpm-bundle.tar)

    1.卸载MariaDB rpm -qa | grep -i mariadb rpm -e --nodeps mariadb-libs--.el7.x86_64 2.卸载已有Mysql 卸载旧版本mys ...

  4. (转)Linux 磁盘IO性能测试

    Linux 如何测试 IO 性能(磁盘读写速度) 这几天做MySQL性能测试,偌大一个公司,找几台性能测试机器都很纠结,终于协调到两台,IO的性能如何还不知道.数据库属于IO密集型的应用,所以还是先评 ...

  5. Windows下OpenFOAM开发及使用环境配置指南 (2)【转载】

    转载自:http://openfoam.blog.sohu.com/158751915.html *************************************************** ...

  6. idea 2019激活码

    9MWZD5CC4E-eyJsaWNlbnNlSWQiOiI5TVdaRDVDQzRFIiwibGljZW5zZWVOYW1lIjoiMjAxNzY1MDYxQGNxdS5lZHUuY24gLiIsI ...

  7. ML_Review_PCA(Ch4)

    Note sth about PCA(Principal Component Analysis)   ML6月20日就要考试了,准备日更博客,来记录复习一下这次ML课所学习的一些方法. 博客是在参考老 ...

  8. sql 从服务器取消主从复制

    mysql>change master to master_host='' mysql>stop slave;reset slave;

  9. 微信小程序 位置定位position详解,相对定位relative,绝对定位absolute相关问题

    一.位置position[定位属性:static,relative,absolute,fixed,inherit,-ms-page,initial,unset] 1.static:元素框正常生成,块级 ...

  10. 灵活使用ssh、dsh和pssh高效管理大量计算机

    http://os.iyunv.com/art/201012/240113.htm 灵活使用ssh.dsh和pssh高效管理大量计算机 http://os.iyunv.com2010-12-23 09 ...