代码之家  ›  专栏  ›  技术社区  ›  dmkc

*NIX GUI是如何工作的?

  •  6
  • dmkc  · 技术社区  · 14 年前

    我想知道更多关于什么使*NIX系统上的GUI工作的信息,但不太确定从哪里开始研究。据我所知,X服务器使所有的视觉效果都成为可能,在它之上有各种UI环境,比如KDE、Gnome和其他环境。

    但是,例如,我一直认为在某些UI环境下运行会限制您使用那些环境下的程序,直到我意识到我能够在Gnome下使用KDE实用程序和软件,反之亦然,它们保留了它们本机环境的外观。

    2 回复  |  直到 14 年前
        1
  •  6
  •   Paul McMillan    14 年前

    从本质上讲,GUI位是包含chrome(程序窗口周围的内容)的单独库,通常还包括许多其他内容,如桌面工具栏等。GNOME和KDE就是这方面的桌面环境示例。

    它们每个都包含一个窗口管理器,这个窗口管理器可以精确地告诉程序在哪里绘制,以及如何绘制chrome。

    在你的窗口管理器上面,你有你的实际程序。每个窗口管理器都会调用窗口管理器来执行类似于“给我一个带关闭按钮的50x50窗口”的常规操作。

    程序绘制的实际小部件通常使用一个图形工具包,就像GNOME中包含的那样。KDE包括Qt工具包。

    这里有很多选择 http://xwinman.org/

        2
  •  7
  •   Warbo    10 年前

    我觉得保罗的回答可能有点用词繁重,所以这是我的尝试。

    荷载

    我们使用 司机 (生活在我们的 操作系统内核 接口 ,例如OpenGL:

    App --OpenGL--> Driver --> Hardware --VGA--> Screen
    

    全部的 驱动程序可以绘制图像,尽管这比真正的OpenGL支持慢得多)。OpenGL的一个主要竞争对手是DirectX,但它只适用于Windows和XBox。

    倍数 通过网络 服务器

    App A ----------OpenGL-------+
                                 |
    App B --+                    |
            |                    |
            +--X11--> X server --+----> Driver --> Hardware --> Screen
            |
    App C --+
            |
      ...network ...
            |
    App D --+
    

    X倾向于直接访问驱动程序,因为它比OpenGL要长,但这并不太重要。

    X11协议通过让应用程序创建 窗户 他们可以画进去。X可以在屏幕上排列这些窗口,包括重叠窗口。使用OpenGL的应用程序可以让它们的命令“通过”X直接指向驱动程序,X仍将像其他命令一样排列窗口(这将 在网络上工作,因为它绕过了X11的网络功能)。

    窗口管理器 . 或者,窗口管理器可以在其他窗口的边缘创建一些薄窗口,以便可以绘制标题栏、调整句柄大小等。

    xterm 程序和 twm

    xterm --+
            |
            +--X11--> X --> Driver --> ...
            |
    twm   --+
    

    然而,大多数现代应用程序觉得原始X11太乏味了;与其绘制线条和形状,不如绘制整个 小部件 (按钮、菜单、图标等)。要做到这一点, 工具包 已经创建。最有名的两个叫做 GTK公司+ (GIMP工具包,因为它最初是为GIMP创建的);其他工具包括Motif、Lesstif、ETK、Tk和FLTK。我们可以让工具箱绘制一个按钮,它会发送所有必要的X11命令来绘制一个按钮,另外它会考虑按钮的大小和位置, 清爽 如果某个图形覆盖了它,它就会移动,告诉我们单击按钮时的代码,一些工具包甚至允许使用 . 有些工具包也是跨平台的,因此它们会在Linux上发送X11命令,在Windows、OSX等上发送不同的命令。

    Rhythmbox --> GTK+ --+
                         |
    GIMP      --> GTK+ --+
                         |
    Amarok    --> Qt   --+--X11--> X --> Driver --> ...
                         |
    Skype     --> Qt   --+
                         |
    aMSN      --> Tk   --+
    

    一些工具包提供了一些特性 其他的;例如 wxWidgets XUL 由Firefox使用,并使用GTK+绘制:

    Audacity --> wxWidgets --> Qt   --+
                                      |
    Firefox  --> XUL       --> GTK+ --+--X11--> X --> Driver --> ...
                                      |
    GIMP     ----------------> GTK+ --+
    

    值得一提的一点是,X11的shape-and-text绘图命令实际上并不常用,因为它们非常原始。许多工具箱实际上将它们的小部件呈现为图像,然后让X绘制这些图像。新的 系统正试图通过放弃绘图命令,让应用程序和工具包直接使用OpenGL来取代X,这将使事情变得更快。

    您提到了不同的桌面环境,比如GNOME和KDE,以及它们是否协同工作。这些基本上都是大量应用程序的集合,它们是为了很好地协同工作而编写的。碰巧GNOME应用程序都是用GTK+编写的,而KDE应用程序都是用Qt编写的。

    混合桌面时唯一要担心的是两个应用程序是否在竞争做相同的工作,例如,如果您试图运行两个窗口管理器或两个桌面面板。注意这是 一个关于图形、工具包等的问题,因为如果我使用两个构建在 相同的