寻找关于如何为Gnome / Ubuntu开发小程序的建议
我是一名使用Linux(主要是Ubuntu)的用户,对系统的运作有一定了解(虽然我绝对不是Linux高手!)。过去我用Python和GTK开发过一些小型跨平台桌面应用,并把它们打包成独立的文件树,这样用户只需要Python和GTK这两个依赖。
现在我想为Ubuntu开发一个小应用,并希望能以GPL 2或3的许可证发布。
为了实现这个目标,我知道我需要学习以下新步骤(可能还有其他我不知道的步骤!):
- 与Gnome集成:我希望我的应用能作为任务栏中的小工具出现。
- 使用D-bus:我特别想让我的小工具使用Ubuntu的新osd-notification框架,同时与其他小工具的通信也是我考虑的一个功能。
- 打包:我希望在应用达到初步可用阶段时,能设置一个公共的PPA(个人包存档),而且我想使用官方库中现有包的依赖,而不是把库重新包含在我的包里。
当然,官方文档将是我获取知识的首要来源,但根据我在另一个话题上收到的非常有用的回答,我决定向SO社区寻求更多建议,比如:
- 除了我之前提到的步骤,还有其他我需要学习的内容,以便实现我的项目吗?
- 根据你的经验,你会建议我提前学习这些步骤吗(因为这些知识会影响我编写核心功能的方式),还是认为与Gnome/D-bus和打包的集成可以在核心功能实现后再添加?(注意:D-bus最初只用于推送数据,输入数据将通过网络服务获取)
- 你建议我把应用分成两个包(后端和前端),还是把它们放在一个包里?
- 你知道有什么有用的资源可以推荐给我,以帮助我学习这些内容吗?
- 你知道有哪些常见的“初学者错误”我应该注意的吗?
这些问题并不是全部,如果你觉得我遗漏了什么重要的内容,请随时指正我!
PS:如果我没有清楚地说明我的最终目标,可以看看project hamster:我想实现的界面类似(也就是说:小工具应该显示状态,点击它应该打开应用本身,用户可以在应用中配置小工具并执行各种操作)。
4 个回答
正如你所知道的,最好的朋友就是别人写的代码——复制、粘贴、拆解、理解。幸运的是,有一些项目可以帮助你实现你的目标。我推荐conduit的代码,它是一个很好的参考,教你如何以干净的方式做事情。我觉得他们也有关于dbus的内容。还有一些其他项目值得关注,比如deskbar-applet、hamster(哈哈),以及你记得有某个功能的其他应用。有时候你可能需要理解一些C代码(比如小工具按钮的部分——我建议你从hamster那里获取,因为我花了很多时间才搞明白)。
然后,“devhelp”这个应用会对你大有帮助——它可以让你快速方便地阅读和搜索手册页。确保你也安装了所有模块的-doc包,这样你才能使用它们。对于用户界面,我强烈建议使用glade,因为这样以后更改界面会容易得多。如果你不能使用glade,可以在代码中添加一个对齐框,把小部件放在框里。
当然,你会遇到一些小麻烦和需要摸索的地方,但这不应该太难!打包,特别是使用autotools,可能会有点挑战,但你会搞定的。关于如何做debian(然后再到PPA),你可以查看hamster的代码库历史,里面曾经有一个“debian”文件夹。
我建议你从小做起——看看能不能打开一个窗口,然后在上面放一个按钮。你不必第一次就做到“正确”。第一次只要有东西能工作就可以了。
至于分离,我建议在你到达那个阶段之前不要太担心。把它分成两部分并有一个核心,之后应该不会太难。但这都取决于你的优先级。
最后一点,结识一些懂这个领域的朋友也很有帮助。参与其他项目是结交新朋友的一种方式,哈哈。
好吧,你提到了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.
我在两年前问这个问题的时候,Ubuntu和Gnome的关系要比现在紧密得多。到现在(2011年底),Gnome已经采用了新的界面叫做gnome-shell,而Canonical(Ubuntu的开发公司)则决定自己开发一个新的用户界面(unity)……
导致它们分开的部分原因是libappindicator,这让我的问题表述方式(还有可能部分答案)变得不再适用了。
而且,现在在stack exchange上有了AskUbuntu,这个地方可能更适合问关于Ubuntu的具体问题。