Installer un package «recommandé» lorsque l'utilisateur demande l'action correspondante

10

Disons que je construis une application dans un package DEB, qui a comme dépendance recommandée un package, appelons-le package1.

Ainsi, package1, s'il est installé, peut fournir des fonctionnalités supplémentaires à mon programme, mais pas directement lié aux fonctionnalités de base de mon programme (c'est pourquoi il s'agit d'un package recommandé)

Ainsi, l'utilisateur ne choisit pas initialement d'installer le package recommandé (dans Ubuntu Software Center, vous pouvez choisir en cochant / décochant pour installer ou ne pas installer les packages recommandés), mais à l'avenir, lors de l'utilisation de mon application, il demandera la fonctionnalité correspondante.

Quelle est la meilleure façon de lui dire qu'un package supplémentaire doit être installé pour que cette fonctionnalité fonctionne? Quel programme puis-je utiliser pour installer ce package directement à partir de mon programme avec une boîte de dialogue indiquant comment se déroule le processus d'installation?

Je veux le faire via la méthode par défaut et, de préférence, une méthode indépendante de l'environnement de bureau Linux.

En bref, je veux un moyen d'installer un paquet à partir de mon programme ni en ouvrant Ubuntu Software Center (via une URL apt: //) ni en le faisant en arrière-plan.

Idéalement, ce serait une boîte de dialogue comme celle utilisée par Update Manager (ou, pour ceux qui s'en souviennent, par Synaptic Package Manager).

PS: Je préférerais quelque chose qui pourrait être implémenté en C ++!

hytromo
la source

Réponses:

9

Si vous utilisez python, python-aptdaemon-gtkc'est probablement la voie à suivre. Pour un bon exemple de la façon de procéder, consultez/usr/share/doc/python-aptdaemon.gtk3widgets/examples/gtk3-demo.py.gz

Vous obtenez de belles invites d'installation comme:

invite d'installation

Dans le cas de l'utilisation de C ++, vous pourriez utiliser l'interface AptDaemon D-Bus, mais je ne connais aucun exemple et vous n'obtiendrez pas les widgets gratuitement.

L'API D-Bus d'AptDaemon est documentée ici: http://packages.python.org/aptdaemon/dbus.html

Je ne trouve pas grand-chose sur la façon de tutoriels C ++ DBus sur le web, donc votre meilleur pari est probablement la documentation et les exemples dans le paquet libdbus-c ++ - docInstaller libdbus-c ++ - doc .

andrewsomething
la source
désolé, je n'utilise pas python, mais je l'aime comme solution. Toute alternative C ++ (je modifierai ma réponse de manière à inclure ce détail)?
hytromo
Hmm ... Vous pourriez utiliser l'interface AptDaemon D-Bus de C ++, je suppose, mais je ne connais aucun exemple et vous n'obtiendrez pas les widgets gratuitement.
andrewsomething
Agréable. Savez-vous où trouver de la documentation et des exemples d'utilisation de cette interface DBUS?
hytromo
Je n'ai pas vraiment besoin d'un tutoriel pour envoyer des messages via DBus en général. Je sais comment faire ça. J'ai juste besoin de savoir quels messages envoyer et où!
hytromo
5

Vous pouvez prendre exemple sur le lecteur multimédia totem lorsqu'il invite l'utilisateur à installer les codecs manquants, ou lorsque vous ouvrez les options de partage d'un répertoire dans nautilus via un clic droit, il vous invite à installer samba.

Je pense qu'ils utilisent le sessioninstallerpackage pour cela. Voir man session-installeret https://launchpad.net/sessioninstaller

Vous pouvez également utiliser la commande xdg-open apt://package: elle ouvrira le gestionnaire de packages par défaut avec la possibilité d'installer votre package (Ubuntu Software Center dans les versions récentes).

Marc M
la source
Veuillez étendre votre réponse et inclure plus de détails sur la façon de travailler avec le programme d'installation de session. Quant à la solution xdg-open, j'ai clairement mentionné que je ne veux pas qu'ils s'ouvrent dans USC, mais, comme vous l'avez dit, à installer avec une boîte de dialogue indépendante, comme lors de l'installation de codecs en totem ou samba en nautilus.
hytromo
1

C'est une vieille question mais j'ai trouvé la réponse, qui est apturl.

Cela fonctionne comme suit:

apturl apt:packagename et c'est exactement ce dont j'ai besoin et ce que nautilus utilise!

Surtout, il est disponible pré-installé sur de nombreuses distributions Linux :)

hytromo
la source