How can I find the location of an icon of a launcher in use?

I have a launcher on my desktop and want to add another one manually with the same icon.

When I go to the preferences of the existing launcher and click the icon, it doesn't take me to the folder where the icon is stored but just to my home folder.

How can I find out where the used icon of the launcher is located in my system?


Solution 1:

Most of the time, the icon will be chosen from your current icon theme, rather than being referred to as an absolute path.

  1. Open Gedit

  2. Drag the launcher into the Gedit window

  3. Look for the Icon definition:

    Icon=gnome-panel-launcher

You can then find the icon somewhere in /usr/share/icons, depending on your theme.

Here's a quick python script that finds the correct icon path for you:

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"

Save it somewhere and run python /path/to/script.py.

It'll look like this:

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

Alternatively, you can just rummage around in /usr/share/icons until you find the icon you're looking for.


Much easier: you can just copy and paste the launcher and change the name and command


EDIT 2018

Updated version of the script above:

#!/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")

Solution 2:

This is based from Stefano Palazzo's answer here.

#!/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")

Save the above into a file and run it with python3 /path/to/file.

Differences between Stefano Palazzo's original script are that:

  • This find all resolutions of the icon (not just 48)
  • Uses gi.repository instead of Gtk
  • Uses Python 3 instead of 2
  • Slightly tweaked in other ways

Solution 3:

A little more info.

Normal launchers are really .desktop files in /usr/share/applications/.

For example: /usr/share/applications/usb-creator-gtk.desktop

(See https://specifications.freedesktop.org/desktop-entry-spec/desktop-entry-spec-latest.html)

Each desktop file has a line that specifies the icon, for example:

Icon=usb-creator-gtk

When there is no path (and file extension) (as in this case), it means the icon is found (somewhere) in /usr/share/icons/ and the one used at run-time depends on the current theme and in some cases the display context (size).

Knowing the icon name (without extension) from the desktop file, one can find it/them as follows:

$ 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