博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
BeginLinux Programming chapter16: X11桌面系统简介
阅读量:5754 次
发布时间:2019-06-18

本文共 4578 字,大约阅读时间需要 15 分钟。

当前两个最流行的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.

 

转载于:https://www.cnblogs.com/butterflybay/p/10347910.html

你可能感兴趣的文章
我的友情链接
查看>>
C#网络编程(1)
查看>>
2.2-单用户模式
查看>>
3.5-du命令
查看>>
hbuilder下沉浸式状态栏设置
查看>>
win8下忘记开机密码进入系统(本机)
查看>>
编译安装Nginx+Mariadb+Memcache+php实现Nginx与Memcache结合
查看>>
解密******全攻略 为邮件系统安全加锁(下)
查看>>
linux服务之apache
查看>>
varnish详解与实际应用案例
查看>>
oracle 11g中 alert文件的变化
查看>>
centos 7 删除 virbr0 虚拟网卡
查看>>
构建简单电子邮件系统
查看>>
find命令
查看>>
通过网络安装系统
查看>>
RedHat 7.2配置本地yum源
查看>>
Form表单中method="post/get'的区别
查看>>
u盘安装xp,win7 win8系统
查看>>
tomcat内存配置
查看>>
wireshark filter syntax
查看>>