Как я могу найти расположение иконки запуска в использовании?
У меня есть лаунчер на рабочем столе, и я хочу добавить еще один вручную с тем же значком.
Когда я перехожу к настройкам существующего модуля запуска и щелкаю по значку, я перехожу не в папку, где хранится значок, а просто в мою домашнюю папку.
Как я могу узнать, где находится значок запуска в моей системе?
4 ответа
В большинстве случаев значок будет выбираться из текущей темы значков, а не называться абсолютным путем.
- Открыть Гедит
- Перетащите панель запуска в окно Gedit.
Ищите
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;