我是Windows开发人员(Win32api),从Windows迁移到Linux。在安装linux时,有许多关于X11,X Window系统,X Server,Xorg,Xfree86的知识,而没有什么。
我们怎么不知道Windows中的此类情况?这些维基文章吓到我了。谁能解释这些事情?它们如何工作?为什么在Linux中如此复杂而不在Windows中如此复杂?
任何良好的参考,也表示赞赏。
PS:我喜欢了解内部知识,请毫不犹豫地深入了解。
我是Windows开发人员(Win32api),从Windows迁移到Linux。在安装linux时,有许多关于X11,X Window系统,X Server,Xorg,Xfree86的知识,而没有什么。
我们怎么不知道Windows中的此类情况?这些维基文章吓到我了。谁能解释这些事情?它们如何工作?为什么在Linux中如此复杂而不在Windows中如此复杂?
任何良好的参考,也表示赞赏。
PS:我喜欢了解内部知识,请毫不犹豫地深入了解。
Answers:
Windows在单个API /框架的单个实现之上为您提供了单个桌面的单个实现,所有这些都由Microsoft完成。
在Unix系统上,您会获得一个API /框架(X11 / X Window系统),针对该API /框架存在多个实现(Xorg,Xfree86),并在其上获得各种“更高级别”的API /框架(GTK +,Qt等)。 ),因为原始X11太原始了,您可以在上面获得各种桌面(Gnome,KDE等),这些桌面都是由不同的人完成的。
此外,X11系统是从头开始设计的,考虑到了远程GUI(即显示远程运行应用程序GUI的本地机器),它引入了“ X Server”和“ X Client”的概念。
然后,有一个术语为新手“感觉”到了错误的方式:您的本地计算机正在运行提供“显示GUI”服务的“ X服务器”,而远程计算机是使用该服务的“ X客户端”在计算机上显示GUI。
好吧,那是快速概述。一旦解决了这个问题,就可以更轻松地了解有关该主题的任何文章/论坛帖子。
编辑:回答OP的两个第一条评论。
是的,“ X11”仅仅是一个协议,而Xorg / XFree86是两个实现。从根本上讲,X11仅与绘制线条和点有关,如果要创建GUI,这并不是非常有用。
在X11协议之上,人们实现了许多事情,并且与Windows进行1:1的比较是非常困难的,因为Microsoft从来没有费心真正将事情分开。另外,我不是GUI类型的开发人员,即我对这两种系统的实际经验都很少。
在底部,“窗口管理器”提供一个窗口(处理边框,关闭/最小化/最大化按钮,调整大小等),并将窗口内的“不动产”提供给小部件工具集。窗口管理器很多,有些类似于其他系统(Windows,MacOS,AmigaOS等),并且它们对于其余系统几乎都是可互换的。
“窗口小部件工具集”为您提供了用于构建GUI的按钮,滑块,文本字段等。这就是您(作为应用程序开发人员)实际上在API方面真正做到的“看”,并且决定了应用程序的大部分“外观”。
“桌面”在特定的窗口小部件工具集/窗口管理器组合之上构建了许多应用程序,以提供一致的外观。除非您真的想开发桌面本身,否则您不必费心这些。
桌面“ Gnome”使用窗口管理器“ Metacity”顶部的小部件工具集“ GTK +”。
桌面“ KDE”使用窗口管理器“ KWin”顶部的窗口小部件工具集“ Qt”。
请注意,尤其是GTK +和Qt这两个,已经从简单的“窗口小工具集”发展成为“应用程序开发框架”。如果要为Linux开发GUI应用程序,则必须有效地选择要使用的两个应用程序中的哪一个。如果您想要一个更“轻便”的应用程序(不需要大的库依赖项),还有更多选择,但是今天大多数系统无论如何都已经安装了GTK +和Qt库。
完全有可能在Gnome桌面上使用Qt应用程序或在KDE桌面上使用GTK +应用程序(并非总是那样),因此您不必担心兼容性。如果在功能类似的两个应用程序之间进行选择,人们通常会首选使用其所选桌面的“本机”窗口小部件的应用程序,但我不必为此担心。
选择“窗口小工具集”时,还有其他更重要的要点:许可条款,对您选择的语言的支持,跨平台兼容性。
Scriptum发布:几年后回来,我已经有了一些自己的GUI编程经验,并且意识到如果您正在寻找“ 走哪条路”的建议,上述解释中会遗漏一件事:wxWidgets。这是一个在您本机使用的内容之上构建的框架,并允许透明地便携式 GUI开发,而不会牺牲性能或附加任何licensind字符串。C ++ API。这是我为GUI需求选择的路径,我认为应该完整地提及它。
At the bottom, a "window manager"
窗口管理器基于X窗口系统构建?如果是这样,Windows系统将位于右下角?您使我与窗口管理器和窗口系统混淆。
我不明白为什么您觉得很难理解http://en.wikipedia.org/wiki/X_Window_System提供的解释, 但是无论如何:
X Window系统通常由两部分组成:
服务器连接到硬件(附加卡,输入设备),并允许客户端使用这些资源。客户端连接到xserver并使用提供的资源。
存在用于Unix的服务器(Xorg,mac爱好者有自己的服务器等)和用于Windows的服务器(Hummingbird,Cygwin的Xorg端口等)。
您可以将一个操作系统上的客户端连接到另一操作系统上运行的服务器。
服务器和客户端之间的通信是通过Xlib-API或(更现代的)xcb-API完成的。
要创建一个简单的应用程序,通常只需执行以下操作:
并做了。