【问题标题】:Creating a window manager for Linux [closed]为 Linux 创建一个窗口管理器 [关闭]
【发布时间】:2011-03-29 04:52:42
【问题描述】:

我想创建一个简单的堆叠窗口管理器(C)供私人使用,主要是为了学习和挑战自己。

我查看了twm 的源代码,它的花里胡哨的东西相对较少,但它似乎非常低级,因为它不是基于小部件工具包。1使用 GTK+ 之类的工具包会更好吗?我担心twm 中的某些代码和库可能过于陈旧(edit: 已弃用),我希望窗口管理器使用相对现代的库。为了理解起见,我也对如何从头开始启动窗口管理器的建议感兴趣 - 没有很多用于此目的的教程。

更新:对于那些考虑类似项目的人:我最终使用了 Common Lisp 和 CLX librarytinywm-lisp 作为基础,出色的 CLFSWMStumpwm 提供了很大的帮助。作为参考,我在 Freenode 上使用了 CLX — Common LISP X InterfacePDF 警告)和 #xlib

【问题讨论】:

  • 小部件基本上存在于窗口中,因此窗口管理器所做的大部分工作都不能依赖小部件。
  • 我虽然是这样,但这就是我引用维基百科的原因; “[twm] 是用 C 直接针对 Xlib 编写的,而不是基于小部件工具包。”我认为这意味着更现代的窗口管理器基于小部件工具包。
  • 不知为何这个问题让我想到了this...

标签: c linux x11 window-managers window-management


【解决方案1】:

http://code.google.com/p/partiwm/ 是尝试从头开始编写窗口管理器(平铺,而不是堆叠),通读代码可能对您有用。

【讨论】:

    【解决方案2】:

    一个非常简约的 WM 是wm2。我没有阅读源代码,因此我不知道它是否是一个教学示例。当然,您可以使用已经为您完成大部分抽象和绘图工作的库,例如 gdkgtk。但是由于这个项目只是个人学习,我还是硬着头皮直接用Xlib吧。

    以下是一些可能对您有用的链接:

    【讨论】:

    • 那我就用 Xlib。你知道任何使用 GTK+ 之类的东西来进行“抽象和绘图工作”的窗口管理器吗?
    • AFAIK,xcb 的 API 还不稳定,因为你不打算发布你的 WM,所以这不应该是一个阻碍。
    • 有几个 WM 使用 gtk 来绘制它们的小部件,例如 Metacity、xfce wm、lxde。我不知道他们使用 gdk 的程度。或者如果他们直接使用 xlib 或 xcb。
    【解决方案3】:

    metacity 对某些 UI 元素使用 gtk。请参阅其 HACKING 和 README。

    另见Where are some good Xlib programming guides?

    【讨论】:

      【解决方案4】:

      无论你做什么,使用 XCB 而不是 Xlib。它现代、异步、简单,让您可以直接访问 X11 协议。

      【讨论】:

      • 看到这是我问的原因之一! quinmars 建议我使用大多数窗口管理器似乎都在使用的Xlib,我还没有看到任何使用XCB 的窗口管理器(Awesome 除外)——这仅仅是因为所有其他窗口管理器都是旧的还是有现在从头开始使用XCB 的理由是什么? twm 中的 Xlib 代码在 20 年后仍然可以在最新版本 og Xorg 中运行——XCB 代码在那个时候还能运行吗?
      • 为了帮助其他可能有兴趣做同样事情的人,我推荐mcwm (hack.org/mc/hacks/mcwm),它完全基于XCB
      • @Baldur:这篇文章已经很老了,但我现在正在进入 XCB。文档非常不完整,但 API 非常透明,并且紧密映射 XLib 概念,所以这不是一个真正的问题。我全心全意地推荐你看看 awesome 的源代码(我是通过 awesome 亲自学习 xcb 的)。它名副其实。
      【解决方案5】:

      Xmonad 可能是一个不错的起点。

      【讨论】:

      • Xmonad 是用 Haskell 编写的,op 想使用 C。
      【解决方案6】:

      为了便于理解,我也对如何从头开始启动窗口管理器的建议感兴趣

      您可能想看看 aewm 窗口管理器。代码很小,它的基本功能很好。它是用 C 语言编写并使用 Xlib。

      http://www.red-bean.com/decklin/aewm/

      【讨论】:

        【解决方案7】:

        查看dwm 的代码。代码库美观且易于理解。整个东西大约有2000行。

        【讨论】:

          【解决方案8】:

          我编写了一个深入的教程系列,向您展示如何用 C++ 编写 X11 窗口管理器:

          此外,您可以查看一个简单的示例窗口管理器 basic_wm,位于

          出于教学目的,它被大量评论。

          关于 Xlib 与 XCB - 如果您刚开始,我会推荐 Xlib 而不是 XCB。 XCB 更高效,但它更底层且更冗长(想想 GUI 的汇编语言)。在您已经有一个原型工作之前,您不希望过早地优化自己。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多