これは質問 ランチャーに環境変数を含める方法 の拡張です。この質問では、アイコンではなく.desktop
ファイルのExec
部分に環境変数を使用する方法について説明します
例:
[Desktop Entry]
Name=My Application name
Comment=a comment
Exec=sh -c '$HOME/.bin/path/to/bin'
Icon= $HOME/.bin/path/to/icon
このランチャーは機能しますが、アイコンは表示されません。次のようなものは使えません
Icon=sh -c '$HOME/.bin/path/to/icon'
アイコンのために...代わりに何をすべきか?
正直なところ、ランチャーでアイコンを使用する最良の方法は、アイコンファイルがアイコン検索パスにあることを確認することです。 freedesktop.orgアイコンディレクトリスキーム および ベースディレクトリ定義 を参照すると、Ubuntuシステムの少なくとも次のディレクトリでアイコンを検索する必要があります。
$HOME/.icons
$HOME/.local/share/icons
/usr/local/share/icons
/usr/share/icons
/usr/share/pixmaps
そのため、独自のアイコンを使用する場合で、ルート権限を持っていない場合は、$HOME/.icons
または$HOME/.local/share/icons
のいずれかにアイコンをインストールします。後者を使用すると、$HOME/.local/share/icons/hicolor/48x48/apps
や$HOME/.local/share/icons/hicolor/256x256/apps
などのディレクトリの下で同じベース名を使用して、多重解像度アイコンでシステムアイコンのディレクトリ構造を模倣することもできます。
アイコンがこれらの検索可能なディレクトリのいずれかにある場合は、Icon=myapp
ファイルで.desktop
を使用できます。
次のようなものを試すことができます:
[Desktop Entry]
Type=Application
Name=MyApp
Exec=sh -c "mv %k %k-bak && sed -e "s,^Icon=.*,Icon=$HOME/.bin/path/to/icon.png,g" %k-bak > %k && chmod +x %k; rm %k-bak"
Icon=???
これにより、.desktopファイルの実行後に相対アイコンパスが追加されます。
いくつかの詳細:
%k
は、.desktopファイルのパスを表します
mv %k %k-bak
はバックアップファイルを作成します
sed -e "s,^Icon=.*,Icon=$HOME/.bin/path/to/icon.png,g" ...
は、古いアイコンパスを現在の$ HOME ...パス(「^」->開始行、実際にはimportで、コマンドselfを置き換えないため)で置き換え、新しい.desktopファイルを作成します
chmod +x %k
新しい.desktopファイルを実行可能にする
rm %k-bak
古いバックアップファイルを削除します
アイコンのパスが変更された後または前に、独自のコマンドを追加できます。
https://stackoverflow.com/a/3464561 および https://askubuntu.com/a/345123/265974 に触発された