问题
我想知道是否有办法在桌面文件中提供多个图标选择。例如,在我为 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"