Instale un paquete 'recomendado' cuando el usuario solicite la acción correspondiente


10

Digamos que estoy creando una aplicación para un paquete DEB, que tiene como dependencia recomendada un paquete, llamémoslo paquete1.

Entonces, el paquete 1, si está instalado, puede proporcionar funcionalidad adicional a mi programa, pero no está directamente relacionado con la funcionalidad básica de mi programa (es por eso que es un paquete recomendado)

Entonces, el usuario no elige inicialmente instalar el paquete recomendado (en el Centro de software de Ubuntu puede elegir marcando / desmarcando para instalar o no instalar los paquetes recomendados), pero en el futuro, mientras usa mi aplicación, solicita La funcionalidad correspondiente.

¿Cuál es la mejor manera de decirle que se debe instalar un paquete adicional para que esta funcionalidad funcione? ¿Qué programa puedo usar para instalar este paquete directamente desde mi programa con un cuadro de diálogo que indica cómo va el proceso de instalación?

Quiero hacer esto a través de la forma predeterminada y, preferiblemente, de manera independiente del entorno de escritorio Linux.

En resumen, quiero una forma de instalar un paquete desde mi programa, no abriendo Ubuntu Software Center (a través de un apt: // URL) ni haciéndolo en segundo plano.

Idealmente, sería un cuadro de diálogo como el que usa el Administrador de actualizaciones (o, para los que lo recuerden, del Administrador de paquetes Synaptic).

PD: ¡Preferiría algo que se pudiera implementar usando C ++!

Respuestas:


9

Si está utilizando Python, python-aptdaemon-gtkes probablemente el camino a seguir. Para un buen ejemplo de cómo hacer esto, mira/usr/share/doc/python-aptdaemon.gtk3widgets/examples/gtk3-demo.py.gz

Obtiene mensajes de instalación agradables como:

instalar aviso

En el caso de usar C ++, podría usar la interfaz AptDaemon D-Bus, pero no conozco ningún ejemplo y no obtendría los widgets de forma gratuita.

La API D-Bus de AptDaemon se documenta aquí: http://packages.python.org/aptdaemon/dbus.html

No puedo encontrar mucho en el camino de los tutoriales de C ++ DBus en la web, por lo que su mejor opción es probablemente la documentación y ejemplos en el paquete libdbus-c ++ - docInstalar libdbus-c ++ - doc .


lo siento, no estoy usando python, pero me gusta como solución. ¿Alguna alternativa a C ++ (editaré mi respuesta para incluir este detalle)?
hytromo

Hmm ... Supongo que podrías usar la interfaz AptDaemon D-Bus de C ++, pero no conozco ningún ejemplo y no obtendrías los widgets de forma gratuita.
andrewsomething

Agradable. ¿Sabes dónde puedo encontrar documentación y ejemplos del uso de esta interfaz DBUS?
hytromo

Realmente no necesito un tutorial para enviar mensajes a través de DBus en general. Yo sé cómo hacer esto. ¡Solo necesito saber qué mensajes enviar y dónde!
hytromo

5

Puede tomar un ejemplo en el reproductor multimedia de tótem cuando le pide al usuario que instale códecs faltantes, o cuando abre las opciones de compartir un directorio en nautilus haciendo clic derecho, le pide que instale samba.

Creo que usan el sessioninstallerpaquete para hacer eso. Ver man session-installery https://launchpad.net/sessioninstaller

También puede usar el comando xdg-open apt://package: abrirá el administrador de paquetes predeterminado con la posibilidad de instalar su paquete (centro de software ubuntu en versiones recientes).


Extienda su respuesta e incluya más detalles sobre cómo trabajar con el instalador de sesión. En cuanto a la solución xdg-open, mencioné claramente que no quiero que se abran en USC, pero, como dijiste, que se instalen con un diálogo independiente, como al instalar códecs en tótem o samba en nautilus.
hytromo

1

Esta es una vieja pregunta, pero he encontrado la respuesta, que es apturl.

Funciona de la siguiente manera:

apturl apt:packagename ¡y es exactamente lo que necesito y lo que utiliza nautilus!

Es importante destacar que está disponible preinstalado en muchas distribuciones de Linux :)

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.