Dav*_*son 427 c c++ linux api user-interface
我希望这不是一个愚蠢的问题,但它总是我想知道的.Windows(Win32 API)和OS X(Cocoa)都有自己的API来处理窗口,事件和其他操作系统.对于Linux的等价物,我从来没有真正得到明确的答案.
我听说有人说GTK +,但是GTK +是跨平台的,它怎么可能是原生的呢?
Jon*_*oni 591
在Linux中,图形用户界面不是操作系统的一部分.大多数Linux桌面上的图形用户界面由称为X Window System的软件提供,该软件定义了一种独立于设备的方式来处理屏幕,键盘和指针设备.
X Window定义了用于通信的网络协议,任何知道如何"说"该协议的程序都可以使用它.有一个叫C库的Xlib,使得它更容易使用这个协议,所以×程序库是一种对本地的GUI API.Xlib不是访问X Window服务器的唯一方法; 还有XCB.
使用基于Xlib构建的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宣布他们正在开发一个名为Mir的新系统,因为他们认为Wayland存在问题.该窗口系统也基于OpenGL/ES API.
Chr*_*son 83
Linux是内核,而不是完整的操作系统.有不同的窗口系统和gui在Linux上运行以提供窗口.通常,X11是Linux发行版使用的窗口系统.
non*_*one 58
Wayland也值得一提,因为它主要被称为"未来的X11杀手".
另请注意,Android和其他一些移动操作系统不包含X11,尽管它们有Linux内核,因此从这个意义上讲,X11并非所有Linux系统都是原生的.
跨平台与本土无关.Cocoa也通过GNUStep移植到其他平台,但它仍然是OS X/macOS的原生.
nib*_*bot 23
严格来说,Linux的API包含其系统调用.这些是可以由用户模式(非内核)程序调用的所有内核函数.这是一个非常低级的接口,允许程序执行打开和读取文件等操作.有关一般介绍,请参见http://en.wikipedia.org/wiki/System_call.
真正的Linux系统还将在其上运行其他软件的整个"堆栈",以便提供图形用户界面和其他功能.该堆栈的每个元素都将提供自己的API.
小智 20
为了帮助已经提到的内容,在这个博客上有一个非常好的Linux图形堆栈概述:http://blog.mecheye.net/2012/06/the-linux-graphics-stack/
这解释了X11/Wayland等以及它们如何组合在一起.除了已经提到的内容之外,我认为值得添加一些关于以下用于Linux中图形的API:
Mesa - "Mesa是很多东西,但它提供的主要功能之一就是它的OpenGL实现.它是OpenGL API的开源实现."
开罗 - "cairo是一个绘图库,可以直接用于Firefox等应用程序,也可以通过GTK +等库来绘制矢量形状."
DRM(直接渲染管理器) - 我理解这一点,但它基本上是内核驱动程序,可让您直接将图形写入帧缓冲区而无需通过X
我想这个问题更像是"什么是linux的原生GUI API".
在大多数情况下,X(也称为X11)将用于此:http://en.wikipedia.org/wiki/X_Window_System.
您可以在此处找到API文档
XWindows可能是最接近可称为"原生"的:)