インストーラー/パッケージマネージャーなしで 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新しいプロセスを起動する前に 1 秒待たなければならないことです。そうすると、アイコンが選択されます。そうしないと、アプリのアイコンが表示されません。

スリープする代わりに GTK アイコン キャッシュを再ロードしてみましたが ( を使用gtk-update-icon-cache /usr/share/icons/hicolor)、うまくいきませんでした。

この遅延を回避し、新しく書き込まれた.desktopファイルが確実に取得されるようにする方法を知っている人はいますか? (ファイルをフラッシュして閉じています。) または、私のハック的な解決策よりも良いアイデアがありますか?

アップデート:興味深いことに、ファイルを書き込む単純なスクリプトをテストします.desktop(手動またはxdg デスクトップ メニュー) を入力してアプリケーションを起動する場合も、2 秒の遅延が必要で、そうしないとアイコンが表示されません。興味深いですね。

答え1

使用gtk_window_set_iconまたは類似のもの(_from_file バリアントと Glade 統合があります)。

ルート権限がないと、アイコン キャッシュにアクセスできないと思います。また、デスクトップ ファイルをタイムリーに読み込むことは、ご存じのとおり、信頼できる方法ではないようです。

関連情報