寻找关于如何为Gnome / Ubuntu开发小程序的建议

5 投票
4 回答
1398 浏览
提问于 2025-04-15 16:36

我是一名使用Linux(主要是Ubuntu)的用户,对系统的运作有一定了解(虽然我绝对不是Linux高手!)。过去我用Python和GTK开发过一些小型跨平台桌面应用,并把它们打包成独立的文件树,这样用户只需要Python和GTK这两个依赖。

现在我想为Ubuntu开发一个小应用,并希望能以GPL 2或3的许可证发布。

为了实现这个目标,我知道我需要学习以下新步骤(可能还有其他我不知道的步骤!):

  • 与Gnome集成:我希望我的应用能作为任务栏中的小工具出现。
  • 使用D-bus:我特别想让我的小工具使用Ubuntu的新osd-notification框架,同时与其他小工具的通信也是我考虑的一个功能。
  • 打包:我希望在应用达到初步可用阶段时,能设置一个公共的PPA(个人包存档),而且我想使用官方库中现有包的依赖,而不是把库重新包含在我的包里。

当然,官方文档将是我获取知识的首要来源,但根据我在另一个话题上收到的非常有用的回答,我决定向SO社区寻求更多建议,比如:

  1. 除了我之前提到的步骤,还有其他我需要学习的内容,以便实现我的项目吗?
  2. 根据你的经验,你会建议我提前学习这些步骤吗(因为这些知识会影响我编写核心功能的方式),还是认为与Gnome/D-bus和打包的集成可以在核心功能实现后再添加?(注意:D-bus最初只用于推送数据,输入数据将通过网络服务获取)
  3. 你建议我把应用分成两个包(后端和前端),还是把它们放在一个包里?
  4. 你知道有什么有用的资源可以推荐给我,以帮助我学习这些内容吗?
  5. 你知道有哪些常见的“初学者错误”我应该注意的吗?

这些问题并不是全部,如果你觉得我遗漏了什么重要的内容,请随时指正我!

PS:如果我没有清楚地说明我的最终目标,可以看看project hamster:我想实现的界面类似(也就是说:小工具应该显示状态,点击它应该打开应用本身,用户可以在应用中配置小工具并执行各种操作)。

4 个回答

3

正如你所知道的,最好的朋友就是别人写的代码——复制、粘贴、拆解、理解。幸运的是,有一些项目可以帮助你实现你的目标。我推荐conduit的代码,它是一个很好的参考,教你如何以干净的方式做事情。我觉得他们也有关于dbus的内容。还有一些其他项目值得关注,比如deskbar-applethamster(哈哈),以及你记得有某个功能的其他应用。有时候你可能需要理解一些C代码(比如小工具按钮的部分——我建议你从hamster那里获取,因为我花了很多时间才搞明白)。

然后,“devhelp”这个应用会对你大有帮助——它可以让你快速方便地阅读和搜索手册页。确保你也安装了所有模块的-doc包,这样你才能使用它们。对于用户界面,我强烈建议使用glade,因为这样以后更改界面会容易得多。如果你不能使用glade,可以在代码中添加一个对齐框,把小部件放在框里。

当然,你会遇到一些小麻烦和需要摸索的地方,但这不应该太难!打包,特别是使用autotools,可能会有点挑战,但你会搞定的。关于如何做debian(然后再到PPA),你可以查看hamster的代码库历史,里面曾经有一个“debian”文件夹。

我建议你从小做起——看看能不能打开一个窗口,然后在上面放一个按钮。你不必第一次就做到“正确”。第一次只要有东西能工作就可以了。

至于分离,我建议在你到达那个阶段之前不要太担心。把它分成两部分并有一个核心,之后应该不会太难。但这都取决于你的优先级。

最后一点,结识一些懂这个领域的朋友也很有帮助。参与其他项目是结交新朋友的一种方式,哈哈。

3

好吧,你提到了Python,所以你需要准备好使用pynotify这个工具。它是一个封装了DBus的库,可以让你直接操作系统的通知系统。

>>> import pynotify
>>> pynotify.init("Lil' Applet")
True
>>> note = pynotify.Notification(
...            pynotify.get_app_name(), 
...            "Lil' Applet wants you to know something's up.", 
...            "/usr/share/icons/Human/48x48/status/dialog-information.png")
>>> note.show()
True

这样就可以显示出一个像这样的通知:

[    ] **Lil' Applet**
[ICON]
[    ] Lil' Applet wants you to know something's up.
1

我在两年前问这个问题的时候,Ubuntu和Gnome的关系要比现在紧密得多。到现在(2011年底),Gnome已经采用了新的界面叫做gnome-shell,而Canonical(Ubuntu的开发公司)则决定自己开发一个新的用户界面(unity)……

导致它们分开的部分原因是libappindicator,这让我的问题表述方式(还有可能部分答案)变得不再适用了。

而且,现在在stack exchange上有了AskUbuntu,这个地方可能更适合问关于Ubuntu的具体问题。

撰写回答