
Вопрос
Я хочу узнать, есть ли способ предоставить несколько вариантов иконок в файлах рабочего стола. Например, в файле рабочего стола для Android Studio у меня есть строка иконок:
Icon=/opt/android-studio/bin/studio.png
это работает нормально, НО проблема в том, что я хочу, чтобы значок был таким, какой предоставляет тема значков, которую я использую, а не был все время тем же старым "studio.png". Я знаю, что могу изменить это на что-то вроде:
Icon=androidstudio
и как вы знаете, он отлично работает с темами иконок, которые предоставляют иконку студии Android с таким именем, то есть "androidstudio". Проблема в том, что разные темы иконок предоставляют иконки с разными именами для студии Android, включая:
- com.google.AndroidStudio
- android-студия
- androidstudio
- студия
- и т. д.
Есть ли способ поместить все эти имена в файл рабочего стола, чтобы он мог использовать те, которые предоставляет тема значков?
Что я пробовал
Основываясь на том, что я видел в некоторых файлах рабочего стола, я попытался разделить различные значения (например, имена значков) точками с запятой, но это не сработало:
Icon=com.google.AndroidStudio;studio;androidstudio;
Что я уже прочитал:
решение1
То, как вы указываете, также работает. Вы указываете общее имя значка, например androidstudio
. Система сначала проверит, предоставляет ли ваша текущая тема такой значок, и если нет, возьмет значок резервной темы или будет использовать общий значок. Таким образом, нет возможности указать несколько альтернативных значков в файле .desktop
.
Обычно вы используете только одну тему за раз. Поэтому проще всего будет жестко закодировать значок, который вы хотите использовать, в локальной копии файла .desktop
вашего приложения. Для этого вам не нужно быть пользователем root. Такая локальная копия находится в .local/share/applications
системном .desktop
файле и переопределяет его.
Если по той или иной причине вы предпочитаете переключать темы и каждый раз иметь специфичный для темы значок для вашего приложения, то вы можете переименовать (или лучше скопировать) файл значка, чтобы соответствующие значки существовали во всех темах, которые вы хотите использовать. Вам нужно быть root, чтобы редактировать системную тему таким образом.
решение2
После того, как @vanadium сказал, что нет способа предоставить несколько иконок одновременно в файле рабочего стола и мне нужно либо жестко закодировать, либо переименовать, либо скопировать иконку, я подумал, почему бы не написать для этого скрипт. Следующий скрипт изменяет файл рабочего стола, чтобы установить иконку на ту, которую предоставляет тема иконок для студии Android:
#!/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"