異なるアイコンテーマで同じアプリケーションに異なる名前を使用する場合にデスクトップファイルで使用するアイコン名

異なるアイコンテーマで同じアプリケーションに異なる名前を使用する場合にデスクトップファイルで使用するアイコン名

質問

デスクトップ ファイルで複数のアイコンの選択肢を提供する方法があるかどうか知りたいです。たとえば、Android Studio のデスクトップ ファイルでは、アイコンの行は次のようになります。

Icon=/opt/android-studio/bin/studio.png

問題なく動作しますが、問題は、アイコンをいつも同じ「studio.png」にするのではなく、使用しているアイコン テーマが提供するものにしたいということです。これを次のように変更できることはわかっています。

Icon=androidstudio

ご存知のとおり、Android Studio アイコンをその名前 (つまり「androidstudio」) で提供するアイコン テーマでは問題なく動作します。問題は、次のような異なるアイコン テーマが Android Studio に対して異なる名前のアイコンを提供することです。

  • com.google.AndroidStudio
  • アンドロイドスタジオ
  • アンドロイドスタジオ
  • スタジオ

これらすべての名前をデスクトップ ファイルに入れて、アイコン テーマが提供するものを使用できるようにする方法はありますか?


私が試したこと

いくつかのデスクトップ ファイルで見た内容に基づいて、異なる値 (アイコン名など) をセミコロンで区切ろうとしましたが、うまくいきませんでした。

Icon=com.google.AndroidStudio;studio;androidstudio;

すでに読んだもの:

答え1

指定方法は、動作方法でもあります。 などの汎用アイコン名を指定します。androidstudioシステムはまず、現在のテーマがそのようなアイコンを提供しているかどうかを確認し、提供されていない場合は、フォールバック テーマのアイコンを取得するか、汎用アイコンを使用します。そのため、ファイル内に複数の代替アイコンを指定する機能はありません.desktop

通常、一度に使用するテーマは 1 つだけです。したがって、最も簡単な方法は、使用するアイコンを.desktopアプリケーションのファイルのローカル コピーにハード コードすることです。このために root になる必要はありません。このようなローカル コピーはシステム全体のファイルに存在し.local/share/applications、システム全体の.desktopファイルを上書きします。

何らかの理由でテーマを切り替えて、そのたびにアプリケーションにテーマ固有のアイコンを使用したい場合は、アイコン ファイルの名前を変更 (またはコピー) して、使用するすべてのテーマに一致するアイコンが存在するようにします。この方法でシステム全体のテーマを編集するには、root である必要があります。

答え2

@vanadium が、デスクトップ ファイルに同時に複数のアイコンを提供する方法はなく、アイコンをハードコードするか、名前を変更するか、またはコピーする必要があると言ったので、そのためのスクリプトを書いてみようと思いました。次のスクリプトは、デスクトップ ファイルを変更して、Android Studio にアイコン テーマが提供しているものにアイコンを設定します。

#!/bin/bash

# note 1) run this script when you want to change the icon
# note 2) pass 0 to this script (./script_name 0) to use the studio.png
#   if you want that for some reason
# note 3) before using this script, be sure to edit desktop_file and default_icon variables
# note 4) before using this script, edit the switch (the keyword is 'case' in the script),
#   based on the icon themes you have

# tip: for easier use, go to ~/.bash_aliases and define an alias

desktop_file=~/.local/share/applications/jetbrains-studio.desktop
default_icon=/opt/android-studio/bin/studio.png

function print_use() { echo "Use: $0 0[optional]"; }
function print_done() { echo "android studio icon has changed. enjoy :)"; }

if [[ ! -f $desktop_file ]]; then
    echo "$0: desktop file does not exist. you need to edit this script."
    exit 1
fi

# check and act based on arguments passed to script
if [[ $# -gt 1 ]]; then
    print_use
    exit 1
elif [[ $# -eq 1 ]]; then
    if [[ $1 -eq 0 ]]; then
        sed --in-place "s@^Icon=.*@Icon=$default_icon@" $desktop_file
        print_done
        exit 0
    else
        print_use
        exit 1
    fi
fi


# get the name of the icon theme in use
icon_theme=$(dconf read /org/gnome/desktop/interface/icon-theme)
echo "active icon theme: $icon_theme"
# trim starting and ending single quotes
icon_theme=${icon_theme:1:$((${#icon_theme}-2))}

# choose icon name based on the icon theme name
case $icon_theme in

    Vimix-* | Flat-Remix* | Deepin | Flattery | Gruvbox | Oranchelo | SURU-PLUS* | Korla)
        icon_name="androidstudio"
        ;;

    Tela-red | Uos | Xenlism-Storm)
        icon_name="android-studio"
        ;;

    *)
        echo "no icon found :( ... using the default icon"
        icon_name=$default_icon
        ;;
esac

sed --in-place "s@^Icon=.*@Icon=$icon_name@" $desktop_file
print_done

~/.bash_aliases に次のエイリアスを定義したので、アイコン テーマを変更するたびに、ターミナルで「u」と入力して Enter キーを押すだけで済みます。

alias u="$scripts/android_studio_icon.sh"

関連情報