How to find `.desktop` file location for a particular application
EDIT: This is not a duplicate as this question is the reverse of what the other question is asking. Here we know what is the application and we want to find its .desktop
file that can be located in non standard places also. While the other question is about where the .desktop
files can be placed.
I want to open images from an FTP server in the default image viewer rather than in the browser, so I wanted to know the path of default image viewer desktop file in Ubuntu. I tried the following:
cd -- /usr/share/applications
/usr/share/applications
$ find . -name '*.desktop' | grep image
./gnome-disk-image-mounter.desktop
./gnome-disk-image-writer.desktop
$ find . -name '*.desktop' | grep view
./calibre-ebook-viewer.desktop
./calibre-lrfviewer.desktop
./evince-previewer.desktop
./shotwell-viewer.desktop
./okularApplication_ghostview.desktop
./gcr-viewer.desktop
./gnome-info-overview-panel.desktop
./org.gnome.font-viewer.desktop
./paraview.desktop
But I still couldn't find it. Are there any other locations where the desktop files are stored?
Solution 1:
A much faster and more universal search is with locate
command:
$ locate *image*desktop
/usr/share/app-install/desktop/gimagereader:gimagereader-gtk.desktop
/usr/share/app-install/desktop/gnome-disk-utility:gnome-disk-image-mounter.desktop
/usr/share/app-install/desktop/gnome-disk-utility:gnome-disk-image-writer.desktop
/usr/share/app-install/desktop/imagej:imagej.desktop
/usr/share/app-install/desktop/imagemagick-6.q16:display-im6.q16.desktop
/usr/share/app-install/desktop/imagemagick:display-im6.desktop
/usr/share/app-install/desktop/imagevis3d:imagevis3d.desktop
/usr/share/app-install/desktop/kimagemapeditor:kde4__kimagemapeditor.desktop
/usr/share/app-install/desktop/simple-image-reducer:simple-image-reducer.desktop
/usr/share/app-install/desktop/trimage:trimage.desktop
/usr/share/applications/gnome-disk-image-mounter.desktop
/usr/share/applications/gnome-disk-image-writer.desktop
/usr/share/applications/screensavers/tessellimage.desktop
locate
can search millions of files in a few seconds where it would take find
many many minutes:
$ time find / -name '*image*.desktop'
real 0m52.563s
user 0m6.271s
sys 0m9.002s
$ time locate *image*desktop
real 0m0.705s
user 0m0.693s
sys 0m0.012s
Notice how grep
was eliminated from original method and find
command was ammended.
The disadvantage of locate
is the database is updated daily. If you just installed the application you are searching for today, you will first need to run:
sudo updatedb
Solution 2:
The name of the desktop
file alone may not reveal sufficient information. The fundamental approach is to search the content of all .desktop
files of the system to find the relevant one(s).
For example, the image viewer is displayed as Image Viewer
in the Applications overview. Gnome Shell obtained that label from the .desktop
file. To find the .desktop
file (or files) that contains this string, execute
find / -name '*.desktop' -exec grep -H 'Image Viewer' {} \; 2>/dev/null
This uses find
to find all .desktop
files on the system. For each of the found files, grep
is invoked, which searches for a string in the file, in this example Image Viewer
. The 2>/dev/null
suppresses the permission errors you inevitably get searching the root drive without root permissions.