Имя значка, используемое в файле рабочего стола, когда разные темы значков используют разные имена для одного и того же приложения

Имя значка, используемое в файле рабочего стола, когда разные темы значков используют разные имена для одного и того же приложения

Вопрос

Я хочу узнать, есть ли способ предоставить несколько вариантов иконок в файлах рабочего стола. Например, в файле рабочего стола для 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"

Связанный контент