假设我正在为 DEB 包构建一个应用程序,该包具有推荐的依赖项包,我们将其称为 package1。
因此,如果安装了 package1,它可以为我的程序提供额外的功能,但与我的程序的基本功能没有直接关系(这就是为什么它是一个推荐的包)
因此,用户最初不会选择安装推荐的软件包(在 Ubuntu 软件中心,您可以通过勾选/取消勾选来选择安装或不安装推荐的软件包),但将来在使用我的应用程序时,它会要求相应的功能。
告诉他必须安装额外的软件包才能使此功能正常工作的最佳方法是什么?我可以使用什么程序直接从我的程序安装此软件包,并使用对话框指示安装过程如何进行?
我想通过默认方式来执行此操作,最好是一种独立于 Linux 桌面环境的方式。
简而言之,我想要一种从我的程序中安装软件包的方法,既不需要打开 Ubuntu 软件中心(通过 apt:// URL),也不需要通过在后台执行此操作。
理想情况下,它将是一个类似于更新管理器使用的对话框(或者,对于那些记得的人来说,来自 Synaptic 包管理器)。
PS:我更喜欢可以使用 C++ 实现的东西!
答案1
如果你使用 Python,python-aptdaemon-gtk
这可能是最佳选择。有关如何执行此操作的一个很好的示例,请查看/usr/share/doc/python-aptdaemon.gtk3widgets/examples/gtk3-demo.py.gz
您会收到很好的安装提示,例如:
在使用 C++ 的情况下,您可以使用 AptDaemon D-Bus 接口,但我不知道任何示例,并且您无法免费获得小部件。
AptDaemon 的 D-Bus API 记录在此处:http://packages.python.org/aptdaemon/dbus.html
我在网上找不到太多关于 C++ DBus 的教程,所以最好的选择可能是libdbus-c++-doc包裹。
答案2
您可以在图腾媒体播放器上举例,当它提示用户安装缺少的编解码器时,或者当您通过右键单击打开 nautilus 中目录的共享选项时,它会提示安装 samba。
我认为他们使用这个sessioninstaller
包来做这件事。请参阅man session-installer
和https://launchpad.net/sessioninstaller
您也可以使用该命令xdg-open apt://package
:它将打开默认包管理器,并可以安装您的包(最近版本中的 ubuntu 软件中心)。
答案3
这是一个老问题,但我已经找到了答案,那就是apturl
。
其工作原理如下:
apturl apt:packagename
这正是我所需要的,也是 nautilus 所使用的!
重要的是,它已预装在许多 Linux 发行版上 :)