什么是Linux的本地GUI API?

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

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


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

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

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

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

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

为了进一步复杂化,Ubuntu宣布他们正在开发一个名为Mir的新系统,因为他们认为Wayland存在问题。 该窗口系统也基于OpenGL / ES API。


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


Wayland也值得一提,因为它大多被称为“未来的X11杀手”。

还要注意的是,Android和其他一些移动操作系统虽然拥有Linux内核,但不包括X11,因此在所有Linux系统中,X11都不是原生的。

跨平台与本土无关。 可可也通过GNUStep移植到了其他平台,但它仍然是OS X / macOS本地的。

链接地址: http://www.djcxy.com/p/37147.html

上一篇: What is Linux’s native GUI API?

下一篇: When is the "typename" keyword necessary?