Доставка значка приложения Linux без установщика/менеджера пакетов

Доставка значка приложения Linux без установщика/менеджера пакетов

Предыстория:

Я хочу:

  1. Предоставлять приложение в виде простого TAR-файла, который пользователи извлекают и запускают.
  2. Чтобы у этого приложения был правильный значок.

Нет менеджера пакетов, нет sudo, нет скрипта установки.

Я вижу изстандартныйиразличные статьичто иконки приложений требуют .desktopфайл, который требует абсолютные пути к исполняемому файлу (тьфу) и иконке приложения. Я также вижу, что Ubuntu Unity (возможно, другие) поддерживает .desktopфайлы в~/.local/share/applications

Windows поддерживает это, встраивая иконки в исполняемые файлы. Mac OS X имеет относительную структуру каталогов для приложений, которая включает иконку.

«Хаккерское» решение:

Мое «хакерское» решение — при запуске приложения определить, myApp.desktopсуществует ли файл в ~/.local/share/applications/, и если нет, записать его (включая полный абсолютный путь к исполняемому файлу и значок), запустить новый процесс myApp и выйти.

Надеюсь, новый процесс myApp подхватит значок приложения.иногдаоно делает.

Проблема:

Проблема в том, что мне нужно sleep 2секунд, прежде чем запустить новый процесс. Если я это сделаю, значок будет выбран. Если я этого не сделаю, значка для моего приложения не будет.

Я пробовал перезагружать кэш иконок GTK вместо перехода в режим сна (с помощью gtk-update-icon-cache /usr/share/icons/hicolor), но это не помогло.

Кто-нибудь знает, как избежать этой задержки и гарантировать, что вновь записанный .desktopфайл будет загружен? (Я очищаю и закрываю файл.) Или есть идея получше моего хакерского решения?

Обновлять:Интересно, тестирование простого скрипта, который записывает .desktopфайл (вручную или с помощьюxdg-desktop-меню) и запускает приложение, ему также нужна задержка в 2 секунды, иначе значок не появится. Увлекательно.

решение1

Использоватьgtk_window_set_iconили аналогичный (есть вариант _from_file и интеграция с Glade).

Без root-прав, я думаю, у вас нет доступа к кэшу иконок, а своевременная загрузка файла рабочего стола, как вы обнаружили, не является надежным методом.

Связанный контент