当不同的图标主题对同一应用程序使用不同的名称时,在桌面文件中使用的图标名称

当不同的图标主题对同一应用程序使用不同的名称时,在桌面文件中使用的图标名称

问题

我想知道是否有办法在桌面文件中提供多个图标选择。例如,在我为 Android Studio 创建的桌面文件中,图标行如下:

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

它工作正常,但问题是我希望图标是我使用的图标主题提供的任何图标,而不是一直都是相同的旧“studio.png”。我知道我可以将其更改为类似以下内容:

Icon=androidstudio

并且如您所知,它可以与提供名为“androidstudio”的 android studio 图标的图标主题配合使用。问题是不同的图标主题为 android studio 提供了不同名称的图标,包括:

  • 谷歌AndroidStudio
  • Android Studio 简介
  • 安卓工作室
  • 工作室
  • ETC。

有没有办法将所有这些名称放入桌面文件中,以便它可以使用图标主题提供的任何名称?


我尝试过的方法

根据我在一些桌面文件中看到的内容,我尝试用分号分隔不同的值(即图标名称),但没有成功:

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

我已经读过的内容:

答案1

您指示的方式也是其工作方式。您提供一个通用图标名称,例如。系统将首先查看您当前主题是否提供此类图标,如果没有,则采用后备主题的图标或使用通用图标。因此,没有规定在一个文件androidstudio中指示多个替代图标。.desktop

通常情况下,您一次只使用一个主题。因此,最简单的方法是将要使用的图标硬编码到.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”并按回车键:

alias u="$scripts/android_studio_icon.sh"

相关内容