什么是Linux本地GUI API?

我希望这不会成为一个愚蠢的问题,但总是我想知道的。 Windows(Win32 API)和OS X(Cocoa)都有自己的API来处理窗口,事件和其他操作系统的东西。 我从来没有真正明白Linux是什么。

我听说有人说GTK +,但是GTK +是跨平台的,它怎么可能是本地的?

在Linux中,graphics用户界面不是操作系统的一部分。 大多数Linux桌面上的graphics用户界面由称为X Window System的软件提供,该软件定义了处理屏幕,键盘和指针设备的独立于设备的方式。

X Window定义了用于通信的networking协议,任何知道如何“说出”该协议的程序都可以使用它。 有一个名为Xlib的C库,可以更容易地使用这个协议,所以Xlib就是一种本地GUI API。 Xlib不是访问X Window服务器的唯一方法; 还有XCB 。

Toolkit库(如GNOME使用的GTK + )和Qt (由KDE使用 )build立在Xlib之上,因为它们更容易编程。 例如,它们为应用程序提供一致的外观和感觉,使其更易于使用拖放操作,为现代桌面环境提供标准组件等等。

X如何在屏幕上绘制取决于实现。 X.org有独立于设备的部分和依赖于设备的部分。 前者pipe理诸如windows之类的屏幕资源,而后者与显卡驱动程序(通常是内核模块)通信。 通信可能发生在直接内存访问或通过系统调用内核。 驱动程序将命令翻译成卡上的硬件可以理解的forms。

从2013年开始,一个名叫Wayland的新窗口系统开始变得可用,很多发行版都表示会在某个时候迁移到它,尽pipe目前还没有明确的时间表。 该系统基于OpenGL / ES API,这意味着未来OpenGL将成为Linux中的“本地GUI API”。 将GTK +和QT移植到Wayland正在做一些工作,所以目前stream行的应用程序和桌面系统只需要很less的改动。 无法移植的应用程序将通过X11服务器来支持,就像OS X通过Xquartz支持X11应用程序一样。 GTK +端口预计在一年内完成 ,而Qt 5已经完全支持Wayland。

为了使事情进一步复杂化,Ubuntu宣布他们正在开发一个叫做Mir的新系统,因为他们在Wayland遇到了一些问题。 这个窗口系统也是基于OpenGL / ES API的。

Linux是一个内核,而不是一个完整的操作系统。 有不同的窗口系统和gui在Linux之上运行,以提供窗口。 通常X11是Linux发行版使用的窗口系统。

旷野也值得一提,因为它大多被称为未来的X11杀手

另外请注意, android和其他一些移动操作系统虽然拥有Linux内核,但并不具备X11 ,所以从这个意义上说, X11不是所有Linux系统的原生系统。

跨平台与本土无关。 Cocoa也已经通过GNUStep移植到其他平台,但它仍然是OSX本地的。

严格来说,Linux的API由其系统调用组成 。 这些都是可以由用户模式(非内核)程序调用的所有内核函数。 这是一个非常低级的界面,允许程序执行打开和读取文件等操作。 有关一般性介绍,请参阅http://en.wikipedia.org/wiki/System_call

一个真正的Linux系统也将有一个完整的“堆栈”上运行的其他软件,以提供一个graphics用户界面和其他function。 这个堆栈的每个元素都会提供自己的API。

为了帮助已经提到的内容,在这个博客上有一个非常好的Linuxgraphics堆栈概述: http : //blog.mecheye.net/2012/06/the-linux-graphics-stack/

这就解释了X11 / Wayland等,以及它们如何融合在一起。 除了已经提到的内容之外,我认为值得在Linux中增加一些关于以下API的图片:

Mesa – “Mesa是很多东西,但它提供的最重要的东西之一就是它的OpenGL实现,它是OpenGL API的开源实现。

开罗 – “cairo是一个绘图库,可以直接用于像Firefox这样的应用程序,也可以通过像GTK +这样的库来绘制vectorgraphics。”

DRM(直接渲染pipe理器) – 我至less理解这一点,但它基本上是内核驱动程序,让你直接写graphics到framebuffer而不经过X

我想这个问题更像是“什么是Linux的本地GUI API”。

在大多数情况下,X(又名X11​​)将用于: http : //en.wikipedia.org/wiki/X_Window_System 。

你可以在这里findAPI文档

XWindows可能是最接近“本地”的:)

在Linux中最接近Win32的是libc,因为你不仅提到了UI,而且还提到了事件和“other os stuff”

GUI是一个高层次的能力抽象,所以从XOrg服务器到OpenGL几乎所有的东西都是跨平台的,包括Windows平台。 但是,如果通过GUI API指定* nixgraphicsAPI,则可能会在“直接渲染基础结构”中漫游。