Installa un pacchetto "consigliato" quando l'utente richiede un'azione corrispondente


10

Diciamo che sto creando un'applicazione per un pacchetto DEB, che ha come dipendenza un pacchetto, chiamiamolo pacchetto1.

Quindi, il pacchetto 1, se installato, può fornire funzionalità extra al mio programma, ma non direttamente correlato alla funzionalità di base del mio programma (ecco perché è un pacchetto consigliato)

Quindi, l'utente non sceglie inizialmente di installare il pacchetto consigliato (in Ubuntu Software Center è possibile selezionare spuntando / deselezionando per installare o non installare i pacchetti consigliati), ma in futuro, durante l'utilizzo della mia applicazione, verrà richiesto la corrispondente funzionalità.

Qual è il modo migliore per dirgli che è necessario installare un pacchetto aggiuntivo affinché questa funzionalità funzioni? Quale programma posso usare per installare questo pacchetto direttamente dal mio programma con una finestra di dialogo che indica come procede il processo di installazione?

Voglio farlo tramite il modo predefinito e, preferibilmente, un modo indipendente dall'ambiente desktop Linux.

In breve, voglio un modo per installare un pacchetto dal mio programma né aprendo Ubuntu Software Center (tramite un URL apt: //) né eseguendolo in background.

Idealmente, sarebbe una finestra di dialogo come quella utilizzata da Update Manager (o, per quelli che ricordano, da Synaptic Package Manager).

PS: Preferirei qualcosa che potrebbe essere implementato usando C ++!

Risposte:


9

Se stai usando Python, python-aptdaemon-gtkè probabilmente la strada da percorrere. Per un buon esempio di come farlo, guarda/usr/share/doc/python-aptdaemon.gtk3widgets/examples/gtk3-demo.py.gz

Ricevi istruzioni di installazione come:

prompt di installazione

Nel caso di utilizzo di C ++, potresti usare l'interfaccia D-Bus di AptDaemon, ma non conosco alcun esempio e non otterrai i widget gratuitamente.

L'API D-Bus di AptDaemon è documentata qui: http://packages.python.org/aptdaemon/dbus.html

Non riesco a trovare molto in termini di tutorial C ++ DBus sul web, quindi la soluzione migliore è probabilmente la documentazione e gli esempi nel pacchetto libdbus-c ++ - docInstalla libdbus-c ++ - doc .


scusa, non sto usando Python, ma mi piace come soluzione. Qualche alternativa al C ++ (modificherò la mia risposta in modo da includere questo dettaglio)?
hytromo,

Hmm ... Potrei usare l'interfaccia D-Bus di AptDaemon da C ++, suppongo, ma non conosco alcun esempio e non otterresti i widget gratuitamente.
andrewsomething

Bello. Sai dove posso trovare documentazione ed esempi sull'uso di questa interfaccia DBUS?
hytromo,

Non ho davvero bisogno di un tutorial per l'invio di messaggi tramite DBus in generale. So come farlo. Devo solo sapere quali messaggi inviare e dove!
hytromo,

5

Si potrebbe fare un esempio sul lettore multimediale totem quando viene richiesto all'utente di installare i codec mancanti o quando si aprono le opzioni di condivisione di una directory in nautilus con il tasto destro del mouse, viene richiesto di installare samba.

Penso che usano il sessioninstallerpacchetto per farlo. Vedi man session-installer, e https://launchpad.net/sessioninstaller

Puoi anche usare il comando xdg-open apt://package: aprirà il gestore pacchetti predefinito con la possibilità di installare il tuo pacchetto (ubuntu software center nelle ultime versioni).


Estendi la tua risposta e includi maggiori dettagli su come lavorare con il programma di installazione della sessione. Per quanto riguarda la soluzione xdg-open, ho detto chiaramente che non voglio che si aprano in USC, ma, come hai detto, che si installino con una finestra di dialogo indipendente, come quando si installano i codec in totem o samba in nautilus.
hytromo,

1

Questa è una vecchia domanda ma ho trovato la risposta, che è apturl.

Funziona come segue:

apturl apt:packagename ed è esattamente ciò di cui ho bisogno e che cosa utilizza nautilus!

È importante sottolineare che è disponibile preinstallato su molte distribuzioni Linux :)

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.