Cài đặt gói 'được đề xuất' khi người dùng yêu cầu hành động tương ứng


10

Giả sử tôi đang xây dựng một ứng dụng cho gói DEB, gói phụ thuộc như được đề xuất, hãy gọi nó là gói1.

Vì vậy, gói1, nếu được cài đặt, có thể cung cấp thêm chức năng cho chương trình của tôi, nhưng không liên quan trực tiếp đến chức năng cơ bản của chương trình của tôi (đó là lý do tại sao đó là gói được đề xuất)

Vì vậy, người dùng ban đầu không chọn cài đặt gói được đề xuất (trong Trung tâm phần mềm Ubuntu, bạn có thể chọn bằng cách đánh dấu / bỏ chọn để cài đặt hoặc không cài đặt các gói được đề xuất), nhưng trong tương lai, trong khi sử dụng ứng dụng của tôi, nó sẽ yêu cầu các chức năng tương ứng.

Cách tốt nhất để nói với anh ta rằng một gói bổ sung phải được cài đặt để chức năng này hoạt động là gì? Tôi có thể sử dụng chương trình nào để cài đặt gói này trực tiếp từ chương trình của mình với hộp thoại cho biết quá trình cài đặt đang diễn ra như thế nào?

Tôi muốn làm điều này thông qua cách mặc định và tốt nhất là một cách độc lập với Môi trường máy tính để bàn Linux.

Nói tóm lại, tôi muốn có cách cài đặt gói từ chương trình của mình bằng cách mở Trung tâm phần mềm Ubuntu (thông qua một apt: // URL) cũng như bằng cách thực hiện nó ở chế độ nền.

Lý tưởng nhất, nó sẽ là một hộp thoại giống như hộp thoại được Trình quản lý cập nhật sử dụng (hoặc, cho những người nhớ, từ Trình quản lý gói Synaptic).

PS: Tôi thích cái gì đó có thể được thực hiện bằng C ++!

Câu trả lời:


9

Nếu bạn đang sử dụng python, python-aptdaemon-gtkcó lẽ là cách để đi. Để có một ví dụ tốt về cách làm điều này, hãy nhìn vào/usr/share/doc/python-aptdaemon.gtk3widgets/examples/gtk3-demo.py.gz

Bạn nhận được lời nhắc cài đặt đẹp như:

nhắc cài đặt

Trong trường hợp sử dụng C ++, bạn có thể sử dụng giao diện D-Bus AptDaemon, nhưng tôi không biết bất kỳ ví dụ nào và bạn sẽ không nhận được các tiện ích miễn phí.

API D-Bus của AptDaemon được ghi lại ở đây: http://packages.python.org/aptdaemon/dbus.html

Tôi không thể tìm thấy nhiều hướng dẫn về C ++ DBus trên web, vì vậy đặt cược tốt nhất của bạn có lẽ là tài liệu và ví dụ trong gói libdbus-c ++ - docCài đặt libdbus-c ++ - doc .


xin lỗi, tôi không sử dụng python, nhưng tôi thích nó như một giải pháp. Bất kỳ thay thế C ++ nào (tôi sẽ chỉnh sửa câu trả lời của mình để đưa vào chi tiết này)?
hytromo

Hmm ... Bạn có thể sử dụng giao diện D-Bus AptDaemon từ C ++, tôi cho rằng, nhưng tôi không biết bất kỳ ví dụ nào và bạn sẽ không nhận được các vật dụng miễn phí.
andrews Something

Đẹp. Bạn có biết nơi tôi có thể tìm tài liệu và ví dụ về việc sử dụng giao diện DBUS này không?
hytromo

Tôi thực sự không cần một hướng dẫn để gửi tin nhắn qua DBus nói chung. Tôi biết làm thế nào để làm điều này. Tôi chỉ cần biết những tin nhắn để gửi và ở đâu!
hytromo

5

Bạn có thể lấy ví dụ trên trình phát đa phương tiện totem khi nó nhắc người dùng cài đặt codec bị thiếu hoặc khi bạn mở tùy chọn chia sẻ của một thư mục trong nautilus thông qua nhấp chuột phải, nó sẽ nhắc cài đặt samba.

Tôi nghĩ rằng họ sử dụng các sessioninstallergói để làm điều đó. Xem man session-installerhttps://launchpad.net/sessioninstaller

Bạn cũng có thể sử dụng lệnh xdg-open apt://package: nó sẽ mở trình quản lý gói mặc định với khả năng cài đặt gói của bạn (trung tâm phần mềm Ubuntu trong các bản phát hành gần đây).


Vui lòng mở rộng câu trả lời của bạn và bao gồm thêm chi tiết về cách làm việc với trình cài đặt phiên. Đối với giải pháp mở xdg, tôi đã đề cập rõ ràng rằng tôi không muốn chúng mở ở USC, nhưng, như bạn đã nói, cài đặt với một hộp thoại độc lập, như khi cài đặt codec trong totem hoặc samba trong nautilus.
hytromo

1

Đây là một câu hỏi cũ nhưng tôi đã tìm thấy câu trả lời apturl.

Nó hoạt động như sau:

apturl apt:packagename và nó chính xác là những gì tôi cần và những gì nautilus sử dụng!

Điều quan trọng, nó có sẵn được cài đặt sẵn trên nhiều bản phân phối linux :)

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.