Как я могу найти расположение иконки запуска в использовании?

У меня есть лаунчер на рабочем столе, и я хочу добавить еще один вручную с тем же значком.

Когда я перехожу к настройкам существующего модуля запуска и щелкаю по значку, я перехожу не в папку, где хранится значок, а просто в мою домашнюю папку.

Как я могу узнать, где находится значок запуска в моей системе?

4 ответа

Решение

В большинстве случаев значок будет выбираться из текущей темы значков, а не называться абсолютным путем.

  1. Открыть Гедит
  2. Перетащите панель запуска в окно Gedit.
  3. Ищите Icon определение:

    Icon=gnome-panel-launcher

Затем вы можете найти значок где-то в /usr/share/iconsв зависимости от вашей темы.

Вот быстрый скрипт на python, который найдет для вас правильный путь к значку:

import gtk

print "enter the icon name (case sensitive):"
icon_name = raw_input(">>> ")
icon_theme = gtk.icon_theme_get_default()
icon = icon_theme.lookup_icon(icon_name, 48, 0)
if icon:
    print icon.get_filename()
else:
    print "not found"

Сохрани это где-нибудь и беги python /path/to/script.py,

Это будет выглядеть так:

stefano@lenovo:~$ python test.py 
enter the icon name (case sensitive):
>>> gtk-execute
/usr/share/icons/Humanity/actions/48/gtk-execute.svg

Кроме того, вы можете просто покопаться в /usr/share/icons пока вы не найдете значок, который вы ищете.


Гораздо проще: вы можете просто скопировать и вставить программу запуска и изменить имя и команду


РЕДАКТИРОВАТЬ 2018

Обновленная версия скрипта выше:

#!/usr/bin/env python3
import gi
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk

icon_name = input("Icon name (case sensitive): ")
icon_theme = Gtk.IconTheme.get_default()
icon = icon_theme.lookup_icon(icon_name, 48, 0)
if icon:
    print(icon.get_filename())
else:
    print("not found")

Немного больше информации.

Обычные средства запуска - это действительно файлы.desktop в / usr / share / Applications /.

Например: /usr/share/applications/usb-creator-gtk.desktop

(См. http://standards.freedesktop.org/desktop-entry-spec/desktop-entry-spec-latest.html).

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

Icon=usb-creator-gtk

Когда нет пути (и расширения файла) (как в этом случае), это означает, что значок находится (где-то) в / usr / share / icons /, а тот, который используется во время выполнения, зависит от текущей темы и в некоторых случаи отображения контекста (размер).

Зная имя иконки (без расширения) из файла рабочего стола, можно найти его / их следующим образом:

$ find . -name "usb-creator-gtk*"
./hicolor/scalable/apps/usb-creator-gtk.svg
./Humanity/apps/32/usb-creator-gtk.svg
./Humanity/apps/16/usb-creator-gtk.svg
./Humanity/apps/22/usb-creator-gtk.svg
./Humanity/apps/24/usb-creator-gtk.svg
./Humanity/apps/64/usb-creator-gtk.svg
./Humanity/apps/48/usb-creator-gtk.svg

Это основано на ответе Stefano Palazzo здесь.

#!/usr/bin/env python3

from gi.repository import Gtk

icon_name = input("Icon name (case sensitive): ")
if icon_name:
    theme = Gtk.IconTheme.get_default()
    found_icons = set()
    for res in range(0, 512, 2):
        icon = theme.lookup_icon(icon_name, res, 0)
        if icon:
            found_icons.add(icon.get_filename())

    if found_icons:
        print("\n".join(found_icons))
    else:
        print(icon_name, "was not found")

Сохраните вышеупомянутое в файл и запустите его с python3 /path/to/file,

Различия между оригинальным сценарием Stefano Palazzo заключаются в том, что:

  • Это найти все разрешения значка (не только 48)
  • Пользы gi.repository вместо Gtk
  • Использует Python 3 вместо 2
  • Слегка подправлены другими способами

Добавил это в качестве бонуса к вопросу на unix.stackexchange и понял, что, вероятно, было бы неплохо поделиться здесь, в исходной ветке... так что

Вот еще одна модифицированная версия, которая сочетает в себе некоторые элементы версии Стефано Палаццо 2018 года и версии Кири, а также мои собственные изменения (некоторые комментарии в верхней части сценария).

      #!/usr/bin/env python3
 
# ==========================================================================================
# This script is for looking up an icon file path based on the icon name from a *.desktop file.
# Parts of it are based on snippets provided by Stefano Palazzo and kiri on askubuntu.com
#   https://askubuntu.com/questions/52430/how-can-i-find-the-location-of-an-icon-of-a-launcher-in-use
# ==========================================================================================
# The original version(s) simply prompted the user for the icon name.
# However, I have modified this version in the following ways:
#   1. Added ability to pass specific size as arg (e.g. --size=22 or --size=48, etc)
#   2. Added ability to pass icon names as arg (any other arg besides --size)
#       Note: if --size is used with multiple icon names, then it is assummed
#             that all of the icons in the search will be for the same size
#   3. Like kiri's version, I removed the hard-coded size of 48x48 and default to all sizes
#   4. Unlike kiri's version, you can optionally still search for a specific size (using #1)
#   5. Performance improvements from kiri's version (he was checking every even number from
#       0 to 500 -- so 250 iterations. I base mine off the values that actually existing under
#       /etc/share/icons/hicolor - of which there were 17. So his is more flexible but
#       mine should be quicker and more forgiving in terms of HDD wear and tear)
# ==========================================================================================
 
import gi
import sys
import array as arr 
 
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk
 
def resolveIconPath( iconName, iconSize = -1 ):
    "This takes a freedesktop.org icon name and prints the GTK 3.0 resolved file location."
 
    iconTheme = Gtk.IconTheme.get_default()
    
    # if looking up a specific size
    if iconSize >= 16:
        msgTemplate = "iconname: \"" + iconName + "\" (size: " + str(iconSize) + "): "
        
        iconFile = iconTheme.lookup_icon(iconName, iconSize, 0)
        if iconFile:
            print(msgTemplate + iconFile.get_filename() + "\n")
        else:
            print("W:" + msgTemplate + " No matching path(s) found.\n")
    else:
        # otherwise, look up *all* sizes that can be found
        sep="===================================================================="
        msgTemplate = sep + "\niconname: \"" + iconName + "\":\n" + sep
        
        foundIconsList = list()
        for resolution in [16, 20, 22, 24, 28, 32, 36, 48, 64, 72, 96, 128, 192, 256, 480, 512, 1024]:
            iconFile = iconTheme.lookup_icon(iconName, resolution, 0)
            if iconFile:
                filePath=str(iconFile.get_filename())
                if not (filePath in foundIconsList):
                    foundIconsList.append(iconFile.get_filename())
 
        if foundIconsList:
            print(msgTemplate + "\n"+ "\n".join(foundIconsList)+ "\n")
        else:
            print("W: iconname: \"" + iconName + "\":  No matching path(s) found.\n")
        return
 
 
# get the total number of args passed (excluding first arg which is the script name)
argumentsLen = len(sys.argv) - 1
 
# define a list for storing all passed icon names
iconNamesList = []
 
# loop through passed args, if we have any and handle appropriately
showHelp=False
size=-1
if argumentsLen > 0:
    for i in range(1, len(sys.argv)):
        arg=str(sys.argv[i])
        #print(i, "arg: " + arg)
        if arg.startswith('--size=') or arg.startswith('-s=') or arg.startswith('-S='):
            tmpSize=(arg.split("=",2))[1]
            if len(tmpSize) > 0 and tmpSize.isnumeric():
                size=int(tmpSize)
            else:
                print("Invalid size '" + tmpSize + "'; Expected --size=xx where xx is a positive integer.")
        elif arg == '--help' or arg == '-h':
            print(str(sys.argv[0]) + " [OPTIONS] [ICON_NAME]\n")
            print("Takes a freedesktop.org/GNOME icon name, as commonly appears in a *.desktop file,")
            print("and performs a lookup to determine matching filesystem path(s). By default, this")
            print("path resolution is determined for all available icon sizes. However, a specific")
            print("size can be used by providing one of the options below.\n")
            print("OPTIONS:")
            print("  -s=n, --size=n   Restricts path resolution to icons matching a specific size.")
            print("                   The value n must be a positive integer correspending to icon size.")
            print("                   When using this option with multiple passed icon names, the size")
            print("                   restrictions are applied to *all* of the resolved icons. Querying")
            print("                   different sizes for different icons is only possible via the use of")
            print("                   multiple calls or by parsing the default output.\n")
            print("  -h, --help       Display this help page and exit.\n")
            exit()
        else:
            iconNamesList.append(arg)
 
# if no icon names were passed on command line, then prompt user
if len(iconNamesList) == 0:
    iconNamesList.append(input("Icon name (case sensitive): "))
 
#print("size: " + str(size))
#print("iconNamesList: ")
if len(iconNamesList) > 0:
    for iconName in iconNamesList:
        if size < 16:
            # find all sizes (on my system, 16x16 was the smallest size icons under hicolor)
            resolveIconPath(iconName)
        else:
            # use custom size
            resolveIconPath(iconName, size)

Применение:

      # view help
get-icon-path.py --help
 
# lookup all matching icons
get-icon-path.py firefox
 
# lookup all matching icons for a specific size (16x16)
get-icon-path.py --size=16 firefox
 
# lookup specific size for multiple icons in one command
get-icon-path.py --size=16 firefox gimp
 
# install to system for frequent usage
sudo cp get-icon-path.py /usr/bin/get-icon-path.py
sudo chown root:root /usr/bin/get-icon-path.py;
sudo chmod 755 /usr/bin/get-icon-path.py;
test ! -f /usr/bin/icon && ln -s /usr/bin/get-icon-path.py /usr/bin/icon;
Другие вопросы по тегам