Instal paket 'disarankan' ketika pengguna meminta tindakan yang sesuai

10

Katakanlah saya sedang membangun aplikasi ke paket DEB, yang telah direkomendasikan sebagai paket dependensi, sebut saja package1.

Jadi, package1, jika diinstal, dapat memberikan fungsionalitas tambahan untuk program saya, tetapi tidak terkait langsung dengan fungsionalitas dasar program saya (itu sebabnya ini adalah paket yang disarankan)

Jadi, pada awalnya pengguna tidak memilih untuk menginstal paket yang direkomendasikan (di Pusat Perangkat Lunak Ubuntu Anda dapat memilih dengan mencentang / membatalkan centang untuk menginstal atau tidak menginstal paket yang disarankan), tetapi di masa depan, saat menggunakan aplikasi saya, ia meminta fungsi yang sesuai.

Apa cara terbaik untuk memberitahunya bahwa paket tambahan harus diinstal agar fungsi ini berfungsi? Program apa yang dapat saya gunakan untuk menginstal paket ini langsung dari program saya dengan dialog yang menunjukkan bagaimana proses instalasi berjalan?

Saya ingin melakukan ini melalui cara default, dan, lebih disukai cara yang independen terhadap Lingkungan Desktop Linux.

Singkatnya, saya ingin cara untuk menginstal paket dari program saya baik dengan membuka Pusat Perangkat Lunak Ubuntu (melalui URL apt: //) maupun dengan melakukannya di latar belakang.

Idealnya, itu akan menjadi dialog seperti yang digunakan oleh Update Manager (atau, untuk yang ingat, dari Synaptic Package Manager).

PS: Saya lebih suka sesuatu yang bisa diimplementasikan menggunakan C ++!

hytromo
sumber

Jawaban:

9

Jika Anda menggunakan python, python-aptdaemon-gtkmungkin cara untuk melakukannya. Untuk contoh yang baik tentang bagaimana melakukan ini, lihat/usr/share/doc/python-aptdaemon.gtk3widgets/examples/gtk3-demo.py.gz

Anda mendapatkan petunjuk penginstalan yang bagus seperti:

instal prompt

Dalam hal menggunakan C ++, Anda bisa menggunakan antarmuka D-Bus AptDaemon, tapi saya tidak tahu contohnya dan Anda tidak akan mendapatkan widget secara gratis.

API D-Bus dari AptDaemon didokumentasikan di sini: http://packages.python.org/aptdaemon/dbus.html

Saya tidak dapat menemukan banyak tutorial C ++ DBus di web, jadi taruhan terbaik Anda mungkin adalah dokumentasi dan contoh dalam paket libdbus-c ++ - docInstal libdbus-c ++ - doc .

andrewsomething
sumber
maaf, saya tidak menggunakan python, tapi saya suka itu sebagai solusi. Adakah alternatif C ++ (saya akan mengedit jawaban saya untuk memasukkan perincian ini)?
hytromo
Hmm ... Anda bisa menggunakan antarmuka D-Bus AptDaemon dari C ++ saya rasa, tapi saya tidak tahu contohnya dan Anda tidak akan mendapatkan widget secara gratis.
andrewsomething
Bagus. Apakah Anda tahu di mana saya dapat menemukan dokumentasi dan contoh penggunaan antarmuka DBUS ini?
hytromo
Saya tidak benar-benar membutuhkan tutorial untuk mengirim pesan melalui DBus secara umum. Saya tahu bagaimana melakukan ini. Saya hanya perlu tahu pesan apa yang harus dikirim dan ke mana!
hytromo
5

Anda dapat mengambil contoh pada media player totem ketika meminta pengguna untuk menginstal codec yang hilang, atau ketika Anda membuka opsi berbagi direktori di nautilus melalui klik kanan, itu meminta untuk menginstal samba.

Saya pikir mereka menggunakan sessioninstallerpaket untuk melakukan itu. Lihat man session-installer, dan https://launchpad.net/sessioninstaller

Anda juga dapat menggunakan perintah xdg-open apt://package: itu akan membuka manajer paket default dengan kemungkinan untuk menginstal paket Anda (pusat perangkat lunak ubuntu dalam rilis terbaru).

Marc M.
sumber
Harap rentangkan jawaban Anda dan sertakan lebih detail tentang cara bekerja dengan installer-sesi. Adapun solusi xdg-open, saya jelas menyebutkan bahwa saya tidak ingin mereka terbuka di USC, tetapi, seperti yang Anda katakan, untuk menginstal dengan dialog independen, seperti ketika menginstal codec di totem atau samba di nautilus.
hytromo
1

Ini adalah pertanyaan lama tapi saya sudah menemukan jawabannya apturl.

Ia bekerja sebagai berikut:

apturl apt:packagename dan itu persis apa yang saya butuhkan dan apa yang digunakan nautilus!

Yang penting, ini tersedia pra-instal di banyak distro linux :)

hytromo
sumber