一尘不染

Linux的本机GUI API是什么?

linux

我希望这不会成为一个愚蠢的问题,但这始终是我一直想知道的事情。Windows(Win32 API)和OS
X(Cocoa)都有自己的API,可以处理窗口,事件和其他OS内容。对于Linux的等效功能,我从未真正有明确的答案。

我听说有人说GTK +,但是GTK +是跨平台的,怎么会是本地的呢?


阅读 386

收藏
2020-06-02

共1个答案

一尘不染

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

X
Window定义了用于通信的网络协议,任何知道如何“说”该协议的程序都可以使用它。有一个名为Xlib的C库,可以更轻松地使用此协议,因此Xlib是
机GUI API的一种。Xlib并不是访问X
Window服务器的唯一方法。还有XCB

之所以使用Xkit之上的GTK
+
(由GNOME使用)和Qt(由KDE使用)之类的工具包库,是因为它们易于编程。例如,它们在整个应用程序中为您提供一致的外观和感觉,使拖放操作变得更容易,为现代桌面环境提供了标准的组件,等等。

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宣布由于Wayland遇到的问题而正在开发一个名为Mir的新系统。该窗口系统也基于OpenGL
/ ES API。

2020-06-02