Установите «рекомендуемый» пакет, когда пользователь запрашивает соответствующее действие

10

Допустим, я создаю приложение для пакета DEB, который имеет рекомендованную зависимость от пакета, назовем его package1.

Таким образом, пакет1, если он установлен, может предоставить дополнительную функциональность моей программе, но не имеет прямого отношения к основным функциям моей программы (поэтому это рекомендуемый пакет)

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

Как лучше всего сказать ему, что для работы этой функции необходимо установить дополнительный пакет? Какую программу я могу использовать, чтобы установить этот пакет прямо из моей программы с диалоговым окном, показывающим, как идет процесс установки?

Я хочу сделать это по умолчанию и, желательно, независимо от среды рабочего стола Linux.

Короче говоря, я хочу, чтобы способ установки пакета из моей программы не открывался Ubuntu Software Center (через URL apt: //) и не выполнялся в фоновом режиме.

В идеале это должен быть диалог, подобный тому, который используется диспетчером обновлений (или, для тех, которые помнят, из диспетчера пакетов Synaptic).

PS: Я бы предпочел что-то, что могло бы быть реализовано с использованием C ++!

hytromo
источник

Ответы:

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 .

andrewsomething
источник
извините, я не использую 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, но, как вы сказали, устанавливался с независимым диалогом, как при установке кодеков в totem или samba в nautilus.
Hytromo
1

Это старый вопрос, но я нашел ответ, который есть apturl.

Это работает следующим образом:

apturl apt:packagename и это именно то, что мне нужно, и что использует наутилус!

Важно отметить, что он предустановлен на многих дистрибутивах Linux :)

hytromo
источник