Zainstaluj „zalecany” pakiet, gdy użytkownik poprosi o odpowiednie działanie

10

Powiedzmy, że buduję aplikację do pakietu DEB, który ma zalecaną zależność od pakietu, nazwijmy go pakiet1.

Tak więc pakiet 1, jeśli jest zainstalowany, może zapewnić dodatkową funkcjonalność mojemu programowi, ale nie jest bezpośrednio związany z podstawową funkcjonalnością mojego programu (dlatego jest to zalecany pakiet)

Tak więc użytkownik nie wybiera początkowo instalacji zalecanego pakietu (w Centrum oprogramowania Ubuntu możesz wybrać, zaznaczając / odznaczając, aby zainstalować lub nie instalując zalecanych pakietów), ale w przyszłości, podczas korzystania z mojej aplikacji, poprosi o odpowiednia funkcjonalność.

Jak najlepiej powiedzieć mu, że aby ta funkcja działała, należy zainstalować dodatkowy pakiet? Jakiego programu mogę użyć, aby zainstalować ten pakiet bezpośrednio z mojego programu z oknem dialogowym wskazującym, jak przebiega proces instalacji?

Chcę to zrobić w sposób domyślny, a najlepiej w sposób niezależny od środowiska Linux Desktop Environment.

Krótko mówiąc, chcę sposobu na zainstalowanie pakietu z mojego programu, nie otwierając Centrum Oprogramowania Ubuntu (za pośrednictwem adresu URL apt: //) ani nie robiąc go w tle.

Idealnie byłoby to okno dialogowe używane przez Menedżera aktualizacji (lub, dla tych, którzy pamiętają, z Menedżera pakietów Synaptic).

PS: Wolałbym coś, co można zaimplementować za pomocą C ++!

hytromo
źródło

Odpowiedzi:

9

Jeśli używasz Pythona, python-aptdaemon-gtkprawdopodobnie jest to właściwa droga. Dobry przykład jak to zrobić, patrz/usr/share/doc/python-aptdaemon.gtk3widgets/examples/gtk3-demo.py.gz

Dostajesz miłe monity instalacyjne, takie jak:

monit o instalację

W przypadku korzystania z C ++ możesz użyć interfejsu D-Bus AptDaemon, ale nie znam żadnych przykładów i nie dostaniesz widżetów za darmo.

Interfejs API D-Bus AptDaemon jest udokumentowany tutaj: http://packages.python.org/aptdaemon/dbus.html

Nie mogę znaleźć wiele na drodze do samouczków C ++ DBus w Internecie, więc najlepszym rozwiązaniem jest prawdopodobnie dokumentacja i przykłady w pakiecie libdbus-c ++ - docZainstaluj libdbus-c ++ - doc .

andrews coś
źródło
przepraszam, nie używam pytona, ale podoba mi się to jako rozwiązanie. Jakaś alternatywa dla C ++ (zmienię odpowiedź, aby uwzględnić ten szczegół)?
hytromo
Hmm ... Mógłbyś skorzystać z interfejsu AptDaemon D-Bus z C ++, ale chyba nie znam żadnych przykładów i nie dostaniesz widżetów za darmo.
andrewsomething
Miły. Czy wiesz, gdzie mogę znaleźć dokumentację i przykłady korzystania z tego interfejsu DBUS?
hytromo
W zasadzie nie potrzebuję samouczka do wysyłania wiadomości za pośrednictwem DBus. Wiem jak to zrobić. Muszę tylko wiedzieć, jakie wiadomości wysłać i gdzie!
hytromo
5

Możesz wziąć przykład z totemowego odtwarzacza multimedialnego, gdy monituje on użytkownika o zainstalowanie brakujących kodeków lub gdy otworzysz opcje udostępniania katalogu w nautilus za pomocą kliknięcia prawym przyciskiem myszy, wyświetli monit o zainstalowanie samby.

Myślę, że używają do tego sessioninstallerpakietu. Zobacz man session-installeri https://launchpad.net/sessioninstaller

Możesz także użyć polecenia xdg-open apt://package: otworzy domyślny menedżer pakietów z możliwością zainstalowania pakietu (centrum oprogramowania ubuntu w ostatnich wydaniach).

Marc M.
źródło
Rozszerz swoją odpowiedź i dołącz więcej szczegółów na temat pracy z instalatorem sesji. Jeśli chodzi o rozwiązanie xdg-open, wyraźnie wspomniałem, że nie chcę, aby otwierały się w USC, ale, jak powiedziałeś, instalują się w niezależnym oknie dialogowym, na przykład podczas instalowania kodeków w totemie lub samby w nautilusie.
hytromo
1

To stare pytanie, ale znalazłem odpowiedź apturl.

Działa w następujący sposób:

apturl apt:packagename i właśnie tego potrzebuję i czego używa nautilus!

Co ważne, jest dostępny fabrycznie zainstalowany na wielu dystrybucjach Linuksa :)

hytromo
źródło