Desktop file
In order for your application to show up in menus and/or be automatically associated with MIME types in file browsers, you need to provide a .desktop
file like follows:
[Desktop Entry]
Type=Application
Exec=your-app %u
TryExec=your-app
MimeType=application/x-your-mime-type;
Icon=some-icon
X-DocPath=yourapp/index.html
Terminal=false
Name=Your App
GenericName=Some Generic Name
Comment=Short Description Of Your App
Categories=Qt;KDE;
Take a look at the .desktop Freedesktop Spec to find out more about the key/value pairs above.
The Name
, Type
, and Exec
fields are essential. Name
is self explanatory. Type=Application
defines your application as a program that shows up on the menu. Exec
is the command used to run your application.
The command passed to TryExec
is used to test to see if the application is actually installed on the system. That is to say, if a command cannot be accessed from the $PATH
(usually the case when the user creates their own custom .desktop
files and uninstalls the application), the entry will not show up on the menu.
Icon
can use the path to an icon shipped with your application or a file name available in the system. Terminal=false
states your application doesn't need to be run in a terminal before it is executed, and it is commonly used for GUI applications.
It's important to pick a good set of Categories
to make your application discoverable. If this is left blank, your application will be put into a category called "Lost N Found". The list of categories is separated by colons ;
.
The MimeType
field describes the MIME types used by your application, meaning it will influence whether your app will show up as an available option to open or run a certain file. For example, a plain text editor would use plain/text
to show up when right clicking a text file and selecting "Open With", and an email application could use x-scheme-handler/mailto
to respond to mailto:/
URIs. The list of MIME types is separated by colons ;
, and you can find a comprehensive list of MIME types used on Linux over the shared-mime-info repository.
Translations
Like you can see on the example .desktop
file, only an English version is available. To translate it to more languages, you can add a [lang] suffix to the keys you want to translate. A comprehensive list of suffixes is available here. For example:
Name=Your Application
Name[fr]=Ton application
...
GenericName=Some Generic Name
GenericName[fr]=Un nom générique
If you are using KDE infrastructure, you should not translate your .desktop
file yourself. We have a bot named "Scripty" that extracts the text from .desktop
files into .po
(gettext) files, which are then sent to KDE translators. In turn, once the translators have done their work, Scripty fetches the translated text back and inserts it into the .desktop
file.
Install the .desktop file
In your CMakeLists.txt
, you can add the following lines to install your .desktop
file:
install(FILES org.example.my-app.desktop DESTINATION ${KDE_INSTALL_APPDIR})