Instale um pacote 'recomendado' quando o usuário solicitar a ação correspondente


10

Digamos que estou construindo um aplicativo para um pacote DEB, que tem como dependência recomendada um pacote, vamos chamá-lo de pacote1.

Portanto, o package1, se instalado, pode fornecer funcionalidade extra ao meu programa, mas não diretamente relacionado à funcionalidade básica do meu programa (é por isso que é um pacote recomendado)

Portanto, o usuário não escolhe inicialmente instalar o pacote recomendado (no Ubuntu Software Center, você pode escolher marcando / desmarcando para instalar ou não instalar os pacotes recomendados), mas no futuro, enquanto estiver usando meu aplicativo, ele solicita a funcionalidade correspondente.

Qual é a melhor maneira de dizer a ele que um pacote extra deve ser instalado para que essa funcionalidade funcione? Qual programa posso usar para instalar este pacote diretamente do meu programa com uma caixa de diálogo indicando como está o processo de instalação?

Quero fazer isso da maneira padrão e, de preferência, da maneira que seja independente do Linux Desktop Environment.

Em resumo, eu quero uma maneira de instalar um pacote do meu programa nem abrindo o Ubuntu Software Center (via uma URL apt: //) nem fazendo isso em segundo plano.

Idealmente, seria uma caixa de diálogo como a que é usada pelo Update Manager (ou, para aqueles que se lembram, pelo Synaptic Package Manager).

PS: Eu preferiria algo que pudesse ser implementado usando C ++!

Respostas:


9

Se você estiver usando python, python-aptdaemon-gtkprovavelmente é o caminho a percorrer. Para um bom exemplo de como fazer isso, veja/usr/share/doc/python-aptdaemon.gtk3widgets/examples/gtk3-demo.py.gz

Você recebe boas instruções de instalação, como:

prompt de instalação

No caso de usar C ++, você poderia usar a interface D-Bus do AptDaemon, mas eu não conheço nenhum exemplo e você não obteria os widgets gratuitamente.

A API D-Bus do AptDaemon está documentada aqui: http://packages.python.org/aptdaemon/dbus.html

Como não encontro muita coisa sobre os tutoriais de C ++ DBus na Web, sua melhor aposta é provavelmente a documentação e os exemplos no pacote libdbus-c ++ - docInstalar libdbus-c ++ - doc .


desculpe, eu não estou usando python, mas eu gosto como uma solução. Alguma alternativa em C ++ (vou editar minha resposta para incluir esse detalhe)?
Hytromo 15/08

Hum ... Você poderia usar a interface AptDaemon D-Bus do C ++, suponho, mas não conheço nenhum exemplo e você não obteria os widgets gratuitamente.
andrewsomething

Agradável. Você sabe onde posso encontrar documentação e exemplos de uso dessa interface DBUS?
Hytromo 16/08/2012

Eu realmente não preciso de um tutorial para enviar mensagens via DBus em geral. Eu sei como fazer isso. Eu só preciso saber quais mensagens enviar e para onde!
Hytromo 16/08/2012

5

Você pode dar um exemplo no totem media player quando solicita que o usuário instale codecs ausentes ou quando você abre as opções de compartilhamento de um diretório no nautilus com o botão direito, ele solicita a instalação do samba.

Eu acho que eles usam o sessioninstallerpacote para fazer isso. Consulte man session-installere https://launchpad.net/sessioninstaller

Você também pode usar o comando xdg-open apt://package: ele abrirá o gerenciador de pacotes padrão com a possibilidade de instalar o seu pacote (ubuntu software center em versões recentes).


Estenda sua resposta e inclua mais detalhes sobre como trabalhar com o instalador da sessão. Quanto à solução xdg-open, mencionei claramente que não quero que eles abram no USC, mas, como você disse, para instalar com uma caixa de diálogo independente, como ao instalar codecs no totem ou samba no nautilus.
Hytromo 14/08/2012

1

Esta é uma pergunta antiga, mas eu encontrei a resposta, que é apturl.

Funciona da seguinte maneira:

apturl apt:packagename e é exatamente o que eu preciso e o que o nautilus usa!

É importante ressaltar que ele está disponível pré-instalado em muitas distribuições linux :)

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.