71

我被要求自定义 GNOME 3 桌面的布局。显然,这样做的方法是编写一个“扩展”。

我已经设法完成了一些我想做的事情,但我感到完全缺乏信息。我在任何地方都找不到任何有用的文档。我浪费了一整天的时间在谷歌上疯狂地搜索每一个可以想象的搜索词,拼命地试图找到有用的信息。

GNOME 网站有数百个扩展可供下载。这些不是微不足道的 3 线;它们是复杂的代码片段。它不相信任何人都可以在没有解释如何做的文档的情况下编写这些。

拜托,有人能告诉我实际文件在哪里吗?到目前为止,我能做的最好的事情就是拆开现有的扩展,试图追踪执行我感兴趣的特定部分的魔法命令。(这不是一件容易的事!)

命令名称、对象路径、示例程序,任何东西都会有帮助!

4

2 回答 2

86

我最近自己研究了它。文档通常很少或过时。以下是一些帮助我开始(并通过开发)的资源:

由于文档几乎不可用(或最新),您需要进行大量源代码阅读。我链接了上面的 gnome-shell 源代码(JavaScript 部分),这是一个很好的开始,可以深入研究非官方文档(这是您会找到的最完整的内容)未涵盖的部分。

还有一点特别有用的是检查extensions.gnome.org是否有与您想要创建的内容类似的扩展,并查看它们的源代码(其中大部分是 GitHub 或 Bitbucket 上的开源。您也可以安装它们并找到下的来源~/.local/share/gnome-shell/extensions/)。

在搜索要使用的东西或特定函数的更多文档时,您还可以查阅不同语言的绑定手册(认为参数和返回值可能不匹配)。


最后但同样重要的是,这里有一些调试建议

LookGlass 并不是特别有用。它只显示一行异常(描述),并且仅当它们发生在启动时(当您的扩展程序首次启动时)。

有关完整的 StackTraces 和运行时异常,请查阅~/.xsession-errors-file。它可能很长而且很臃肿。我使用这个方便的脚本来阅读它:

# Grabs the last session-errors from the current X11 session.
# This includes full Stack-Trace of gnome-shell-extension errors.
# See https://live.gnome.org/GnomeShell/Extensions/StepByStepTutorial#lookingGlass
tail -n100 ~/.cache/gdm/session.log | less

请注意,从 Gnome 3.6 开始,如果您gdm用作显示管理器,则当前会话日志是文件~/.cache/gdm/session.log.

在一些使用 systemd 的较新发行版上,您可以通过以下方式获取错误日志:

journalctl -f /usr/bin/gnome-session

调试扩展的首选项部分,您可以gnome-shell-extension-prefs从终端使用 -tool 启动首选项,以查看控制台上的任何异常输出(您也可以调用该工具,如gnome-shell-extension-prefs [uuid],直接显示您的扩展首选项)。

由于目前还没有真正的断点调试方法(有,但很棘手),您可以登录控制台进行快速检查,使用print()-function。您将看到上述输出(在会话错误文件中或启动gnome-shell-extension-prefs-tool 时在终端上)。


虽然进入它可能有点困难,但扩展框架非常强大。玩得开心


我写了一篇更详细的博客文章,可以在这里找到:制作 Gnome-Shell 扩展

于 2012-11-09T20:17:24.020 回答
14

可以在Gnome Developer - API 参考页面上找到广泛的参考列表。

我将以下内容用于我的扩展,但您的使用可能会有所不同:

  • GTK+ 3
    GTK+ 是用于在 GNOME 应用程序中构建用户界面的主要库。它提供用户界面控件和信号回调来控制用户界面。

  • GDK 3
    GDK 是一个中间层,它将 GTK+ 与窗口系统的细节隔离开来。

  • Clutter
    Clutter 是一个基于 GObject 的库,用于创建快速、视觉丰富的图形用户界面。

  • GObject Introspection
    GObject Introspection 致力于在(基于 GObject 的)C 库和语言绑定之间提供一个中间件层。

  • 外壳
    外壳参考手册

  • St
    St - Shell Toolkit - 是 GNOME Shell 的自定义基于 Clutter 的工具包,它定义了有用的 actor。其中一些参与者,例如StBoxLayoutStBin实现各种布局选项。

  • 图标主题规范
    freedesktop.org规范描述了存储图标主题的常用方法。

注意:最后两个对于查找视觉元素参数非常有帮助!

  • PyGTK
    PyGTK 是 Python 的 GTK+。此参考包含每个 Python PyGTK 模块(对应于底层 GTK+ 库)的一章,其中包含类描述。

  • PyGObject
    PyGObject 是一个 Python 扩展模块,它通过使用 GObject Introspection 提供对整个 GNOME 软件平台的清晰一致的访问。具体来说,它是 GLib、GObject、GIO 和 GTK+ 的 Python 绑定。
    此参考包含包含类描述的每个 PyGObject 模块的一章。

于 2012-12-10T05:41:58.637 回答