编写GNOME Shell扩展的文档

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

我设法做了一些我想做的事情,但我完全缺乏信息。 我找不到任何有用的文件。 我浪费了整整一天的时间疯狂search每一个可以想象的search词,拼命试图find有用的信息。

GNOME网站有数百个下载扩展。 这些不是微不足道的三分线; 他们是复杂的代码块。 它不相信任何人都可以写这些没有文件解释如何做到这一点。

请,有人可以告诉我实际的文件在哪里? 到目前为止,我所做的最好的事情是把现有的扩展分解成试图追踪我感兴趣的特定位的魔法命令(不是一件容易的事情!

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

我最近自己挖了一下。 文档大多不可用或过时。 以下是一些帮助我开始(并通过开发)的来源:

  • 基本的东西
  • 基本的东西在发展
  • 分步教程
  • 许多库的JavaScript绑定的非官方文档
  • gnome-shell的JavaScript绑定的来源
  • St(Shell Toolkit)Ui-Toolkit组件的说明。
  • 一些非官方的指南,以扩展extensions.gnome.org

由于文档几乎不可用(或最新),因此您需要进行大量的源代码阅读。 我将上面的gnome-shell源代码(JavaScript部分)联系起来,这是一个很好的开始,因为它可以深入到官方文档(这是您find的最完整的东西)所涵盖的部分。

检查extensions.gnome.org是否需要扩展可以创build类似的东西,并查看它们的源代码(大部分是GitHub或Bitbucket上的开源代码),您也可以安装它们并find在~/.local/share/gnome-shell/extensions/ )。

当search某些特定function的文档时,您也可以参考手册中的不同语言的绑定(认为参数和返回值可能不匹配)。


最后但并非最不重要的,这里有一些debuggingbuild议

LookingGlass并不是特别有用。 它只显示一行exception(描述),并且只在启动时发生(当您的扩展第一次启动时)。

对于完整的StackTraces和运行时exception,请参阅~/.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作为显示pipe理器,当前会话日志是~/.cache/gdm/session.log

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

 journalctl -f /usr/bin/gnome-session 

为了debugging你的扩展的prefs部分 ,你可以使用terminal上的gnome-shell-extension-prefs tool来启动首选项,在控制台上看到任何exception输出(你也可以像gnome-shell-extension-prefs [uuid] ,直接显示你的扩展选项)。

由于目前还没有真正的断点debugging方式(有,但很棘手 ),您可以login控制台进行快速检查,使用print()函数。 您将看到上面提到的输出(在启动gnome-shell-extension-prefs tool时会话错误文件或terminal上)。


虽然可能有点困难,但是扩展框架是相当强大的。 玩得开心


我写了一个更详细Blog-Post ,可以在这里find: 制作Gnome-Shell扩展

在Gnome开发人员 – API参考页面上可以find大量的参考资料。

我为我的扩展使用以下,但您的使用可能会有所不同:

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

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

  • 杂波
    Clutter是一个基于GObject的库,用于创build快速,丰富的graphics用户界面。

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

  • 贝壳
    Shell参考手册


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

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

注:最后两个在寻找视觉元素参数非常有帮助!

  • PyGTK的
    PyGTK是Python的GTK +。 该引用包含每个包含类描述的Python PyGTK模块(对应于底层的GTK +库)的章节。

  • PyGObject
    PyGObject是一个Python扩展模块,通过使用GObject Introspection,可以对整个GNOME软件平台进行干净而一致的访问。 具体而言,它是GLIB,GObject,GIO和GTK +的Python绑定。
    该引用包含每个包含类描述的PyGObject模块的章节。