さらに調査を行った結果、私の知る限り、デスクトップ エントリ ファイル内のアイコンに相対パスを指定することはできないようです。
私が使用した回避策は、launcher.sh スクリプトの最後に次のコードを追加することでした:
mv myapp.desktop myapp.desktop-bak
sed -e "s,Icon=.*,Icon=$PWD/app.svg,g" myapp.desktop-bak > myapp.desktop
rm myapp.desktop-bak
これにより、ランチャー スクリプトが実行されるたびにアイコンのパスが更新されます。また、.desktop ファイルがランチャー スクリプトを指しているため、.desktop ファイルをクリックするとアイコンが効果的に更新されます。
08
を使用できることはわかっています または -i オプションを使用して上記のコードを短縮しますが、使用したソリューションの方が信頼性が高いことを読みました。誰かがそれについてさらに情報を持っている場合は、コメントを投稿してください.
FreeDesktop 仕様が相対パスを許可していないのは事実です:
<ブロック引用>標準キー
18
ファイルマネージャやメニューなどに表示するアイコン。名前が絶対パスの場合、指定されたファイルが使用されます。名前が絶対パスでない場合、アイコン テーマの仕様に記述されているアルゴリズムを使用してアイコンが検索されます。
[ . . . ]
タイプ 25
の値 アイコンの名前です。これらは、絶対パス、または Icon ThemeSpecification で説明されているアルゴリズムを使用して配置されたアイコンの記号名です。このような値はユーザーが表示できず、UTF-8 でエンコードされます。
おそらくメニューやパネル ランチャーでは機能しないでしょうが、この回避策で十分です。 script,実際にアイコンをインストールしてみませんか?2 行で実行できます:
cp app.svg ~/.local/share/icons/hicolor/48x48/apps/
cp app.svg ~/.local/share/icons/hicolor/scalable/apps/
Icon=app
デスクトップファイル (48
ファイル拡張子のない単なるファイル名です)。
これは、絶対パスを持たないアイコンを見つけるための意図されたメカニズムであり、アイコンがメニューやカスタム ランチャーに確実に表示されるようにします。仕様には次のように記載されています:
<ブロック引用>あなたはアプリケーションの作成者であり、KDE および Gnome メニューで動作するようにアプリケーション アイコンをインストールしたいと考えています。最低限、hicolor テーマに 48x48 のアイコンをインストールする必要があります。これは、PNG ファイルを $prefix/share/icons/hicolor/48x48/apps にインストールすることを意味します。オプションで、さまざまなサイズのアイコンをインストールできます。たとえば、$prefix/share/icons/hicolor/scalable/apps に svg アイコンをインストールすると、ほとんどのデスクトップにすべてのサイズで機能する 1 つのアイコンが表示されます。
これを行う 1 つの方法は、52
を使用することです。 コマンド、例:
$ xdg-icon-resource install --novendor --context apps --size 48 example-app.png
ただし、65
は SVG 画像をサポートしていませんが、実際にはこれは同じことを実現します:
$ cp example-app.svg ~/.local/share/icons/hicolor/48x48/apps/
$ cp example-app.svg ~/.local/share/icons/hicolor/scalable/apps/
(これはタイプミスではありません:SVG ファイルを 77
に入れます フォルダとメニューとパネルは完全に満足します.)
メニューについては、インストール後にアイコン キャッシュを更新することをお勧めします。
$ update-icon-caches ~/.local/share/icons
次に、単に 84
を与えることができます 97
として このように:
Icon=example-app
これは相対パスではありませんが、絶対パスを使用しなければならないという問題を解決し、デスクトップ ファイルを別の場所に移動しても壊れません。
参考までに、相対パスのサポートについては、2008 年 9 月に FreeDesktop メーリング リストで議論されました:
<ブロック引用>Magnus Bergmark magnus.bergmark at gmail.com
火曜日 9 月 23 日 01:01:32 PDT 2008
[ . . . ]
何らかの方法で相対パスの使用も許可することを提案します.
ユースケース
<オール>私は多くの .directory ファイルを使用して、映画を含むディレクトリに映画のポスターをアイコンとして持たせています。この動作は、コミック、音楽 (アルバム アート)、写真など、あらゆる形式のメディアに適用できます。
ベンダーは、再配布するソフトウェアにアイコンをバンドルして、.desktop ファイルと一緒に使用することを希望する場合があります。このファイルはデスクトップ メニューには表示されないため、アプリケーション ディレクトリに配置されます。
https://lists.freedesktop.org/archives/xdg/2008-September/009940.html
この提案に対して私が見つけることができた唯一の反論はここにあります:
<ブロック引用>標準のアプリケーション ディレクトリに配置することを意図していない .desktop ファイルは、ほとんど役に立ちません。おそらく、ソフトウェア バンドルの提案と実装のいくつかを見て、代わりにそれらを使用して作業する必要があります。もう 1 つのオプションは、.desktop ファイルとアイコンを適切な場所にインストールするための xdg utils スクリプトです。アンインストールされたアプリケーションも、アイコン テーマとアイコン ネーミングの仕様に従わないことを意図しているとしか思えません。そして、ディレクトリのアイコンを本当に便利なものとして設定することはありません。 elf バイナリには win32 バイナリのようにリソースがありませんが、実際の実行可能ファイルのアイコンを設定する方がはるかに便利です。
https://lists.freedesktop.org/archives/xdg/2008-September/009962.html
関連する質問:
- https://askubuntu.com/questions/277190/how-to-package-an-application-icon-properly
- https://unix.stackexchange.com/questions/404955/is-there-a-home-directory-location-for-overriding-icons
- https://unix.stackexchange.com/questions/428992/why-do-freedesktop-desktop-files-not-allow-relative-paths
- https://unix.stackexchange.com/questions/585997/assign-an-icon-to-a-custom-mimetype
関連リンク:
- https://gitlab.freedesktop.org/xdg/xdg-utils/-/issues/82
- https://bugs.kde.org/show_bug.cgi?id=68507
- https://bugs.kde.org/show_bug.cgi?id=73463
- https://lists.freedesktop.org/archives/xdg/2008-September/009940.html
- https://lists.freedesktop.org/archives/xdg/2011-April/011883.html
- https://specifications.freedesktop.org/icon-naming-spec/icon-naming-spec-latest.html