Встановіть "рекомендований" пакет, коли користувач попросить відповідні дії


10

Скажімо, я будую додаток до пакету DEB, який має як рекомендовану залежність пакет, давайте назвемо його пакетом1.

Таким чином, пакет1, якщо він встановлений, може надавати додаткові функціональні можливості моїй програмі, але безпосередньо не пов'язані з основним функціоналом моєї програми (саме тому це рекомендований пакет)

Отже, користувач не вибирає спочатку встановлювати рекомендований пакет (у програмі Ubuntu Software Center ви можете вибрати, поставивши галочку / знявши позначку для встановлення або не встановити рекомендовані пакети), але в майбутньому, використовуючи мій додаток, він запитує відповідна функціональність.

Який найкращий спосіб сказати йому, що для того, щоб ця функціональність працювала, необхідно встановити додатковий пакет? Яку програму я можу використовувати, щоб встановити цей пакет безпосередньо зі своєї програми з діалоговим вікном із зазначенням того, як відбувається процес встановлення?

Я хочу це зробити за замовчуванням, і, бажано, способом, незалежним від Linux Desktop Environment.

Коротше кажучи, я хочу спосіб встановити пакет зі своєї програми ні відкриттям програмного центру Ubuntu (через apt: // URL), ні тим, як робити його у фоновому режимі.

В ідеалі це було б діалогове вікно, як те, яке використовується диспетчером оновлень (або, для тих, що запам'ятовуються, у Synaptic Package Manager).

PS: Я вважаю за краще щось, що можна реалізувати за допомогою C ++!

Відповіді:


9

Якщо ви використовуєте python - python-aptdaemon-gtkце, мабуть, шлях. Для хорошого прикладу, як це зробити, дивіться/usr/share/doc/python-aptdaemon.gtk3widgets/examples/gtk3-demo.py.gz

Ви отримуєте приємні підказки про встановлення, наприклад:

підказка встановлення

У випадку використання C ++ ви можете використовувати інтерфейс AptDaemon D-Bus, але я не знаю жодного прикладу, і ви не отримаєте віджети безкоштовно.

API D-Bus AptDaemon задокументований тут: http://packages.python.org/aptdaemon/dbus.html

Я не можу багато знайти в дорозі навчальних посібників C ++ DBus в Інтернеті, тож найкраща ставка - це, мабуть, документація та приклади в пакеті libdbus-c ++ - docВстановіть libdbus-c ++ - doc .


вибачте, я не використовую python, але мені це подобається як рішення. Будь-яка альтернатива C ++ (я відредагую свою відповідь так, щоб включити цю деталь)?
hytromo

Хм ... Ви можете використовувати інтерфейс AptDaemon D-Bus з C ++, я думаю, але я не знаю жодного прикладу, і ви не отримаєте віджети безкоштовно.
andrewsomething

Приємно. Чи знаєте ви, де я можу знайти документацію та приклади використання цього інтерфейсу DBUS?
hytromo

Мені не дуже потрібен підручник для надсилання повідомлень через DBus взагалі. Я знаю, як це зробити. Мені просто потрібно знати, які повідомлення надсилати та куди!
hytromo

5

Ви можете взяти приклад на тотемний медіаплеєр, коли він пропонує користувачеві встановити відсутні кодеки або коли ви відкриєте параметри спільного доступу до каталогу в nautilus правою кнопкою миші, він запропонує встановити samba.

Я думаю, що вони використовують sessioninstallerпакет для цього. Дивіться man session-installerта https://launchpad.net/sessioninstaller

Ви також можете скористатися командою xdg-open apt://package: вона відкриє менеджер пакунків за замовчуванням з можливістю встановлення вашого пакета (центр програмного забезпечення ubuntu в останніх випусках).


Будь ласка, розгорніть свою відповідь та включіть докладнішу інформацію про роботу з інсталятором сесії. Що стосується рішення xdg-open, я чітко зазначив, що не хочу, щоб вони відкривалися в USC, але, як ви вже сказали, встановлювати з незалежним діалоговим вікном, як, наприклад, при встановленні кодеків у тотемі чи самбі в nautilus.
hytromo

1

Це старе питання, але я знайшов відповідь, яка є apturl.

Він працює наступним чином:

apturl apt:packagename і це саме те, що мені потрібно і що використовує nautilus!

Що важливо, він доступний заздалегідь встановленим на багатьох Linux-дистрибуторах :)

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.