Installieren Sie ein empfohlenes Paket, wenn der Benutzer nach einer entsprechenden Aktion fragt

10

Angenommen, ich erstelle eine Anwendung für ein DEB-Paket, das als empfohlene Abhängigkeit ein Paket aufweist. Nennen wir es package1.

Wenn also Paket1 installiert ist, kann es meinem Programm zusätzliche Funktionen bieten, die jedoch nicht direkt mit den Grundfunktionen meines Programms zusammenhängen (daher ist es ein empfohlenes Paket).

Der Benutzer entscheidet sich also zunächst nicht für die Installation des empfohlenen Pakets (im Ubuntu Software Center können Sie auswählen, ob die empfohlenen Pakete installiert oder nicht installiert werden sollen), sondern in Zukunft, während er meine Anwendung verwendet die entsprechende Funktionalität.

Wie kann ich ihm am besten sagen, dass ein zusätzliches Paket installiert werden muss, damit diese Funktionalität funktioniert? Welches Programm kann ich verwenden, um dieses Paket direkt von meinem Programm aus zu installieren. Ein Dialogfeld zeigt an, wie der Installationsprozess abläuft.

Ich möchte dies über die Standardmethode tun, vorzugsweise über eine Methode, die unabhängig von der Linux-Desktop-Umgebung ist.

Kurz gesagt, ich möchte eine Möglichkeit, ein Paket aus meinem Programm zu installieren, weder durch Öffnen des Ubuntu Software Centers (über eine apt: // URL) noch im Hintergrund.

Im Idealfall handelt es sich um ein Dialogfeld, wie es vom Update Manager (oder für diejenigen, die sich daran erinnern, vom Synaptic Package Manager) verwendet wird.

PS: Ich würde etwas bevorzugen, das mit C ++ implementiert werden könnte!

Hytromo
quelle

Antworten:

9

Wenn Sie Python verwenden, python-aptdaemon-gtkist dies wahrscheinlich der richtige Weg. Ein gutes Beispiel dafür finden Sie unter/usr/share/doc/python-aptdaemon.gtk3widgets/examples/gtk3-demo.py.gz

Sie erhalten nette Installationsanweisungen wie:

Eingabeaufforderung installieren

Bei Verwendung von C ++ könnten Sie die AptDaemon D-Bus-Schnittstelle verwenden, aber ich kenne keine Beispiele und Sie würden die Widgets nicht kostenlos erhalten.

Die D-Bus-API von AptDaemon ist hier dokumentiert: http://packages.python.org/aptdaemon/dbus.html

Ich kann nicht viel über C ++ DBus-Tutorials im Web finden, daher ist die Dokumentation und die Beispiele im libdbus-c ++ - doc-Installieren Sie libdbus-c ++ - doc Paket wahrscheinlich die beste Wahl .

andrewsomething
quelle
Entschuldigung, ich benutze kein Python, aber ich mag es als Lösung. Irgendeine C ++ - Alternative (ich werde meine Antwort bearbeiten, um dieses Detail aufzunehmen)?
Hytromo
Hmm ... Sie könnten die AptDaemon D-Bus-Schnittstelle von C ++ verwenden, aber ich kenne keine Beispiele und Sie würden die Widgets nicht kostenlos bekommen.
Andrews etwas
Nett. Wissen Sie, wo ich Dokumentation und Beispiele zur Verwendung dieser DBUS-Schnittstelle finden kann?
Hytromo
Ich brauche eigentlich kein Tutorial zum Senden von Nachrichten über DBus im Allgemeinen. Ich weiß, wie das geht. Ich muss nur wissen, welche Nachrichten ich senden soll und wohin!
Hytromo
5

Sie können ein Beispiel für den Totem Media Player nehmen, wenn der Benutzer aufgefordert wird, fehlende Codecs zu installieren, oder wenn Sie die Freigabeoptionen eines Verzeichnisses in nautilus per Rechtsklick öffnen, wird er aufgefordert, Samba zu installieren.

Ich denke, sie benutzen das sessioninstallerPaket, um das zu tun. Siehe man session-installerund https://launchpad.net/sessioninstaller

Sie können auch den folgenden Befehl verwenden xdg-open apt://package: Er öffnet den Standard-Paketmanager mit der Möglichkeit, Ihr Paket zu installieren (Ubuntu Software Center in neueren Versionen).

Marc M.
quelle
Bitte erweitern Sie Ihre Antwort und geben Sie weitere Details zur Arbeit mit dem Session-Installer an. Was die xdg-open-Lösung betrifft, habe ich klar erwähnt, dass ich nicht möchte, dass sie in USC geöffnet werden, sondern, wie Sie sagten, mit einem unabhängigen Dialogfeld installiert wird, wie bei der Installation von Codecs in Totem oder Samba in Nautilus.
Hytromo
1

Dies ist eine alte Frage, aber ich habe die Antwort gefunden apturl.

Es funktioniert wie folgt:

apturl apt:packagename und genau das brauche ich und was nautilus benutzt!

Wichtig ist, dass es auf vielen Linux-Distributionen vorinstalliert verfügbar ist :)

Hytromo
quelle