Launching your application¶
Command line¶
Most applications on Linux can be launched from the command line, even if they
don’t show output in the terminal. To allow this, you need an executable file in any
of the directories listed in the PATH
environment variable.
These will often end in bin
, such as /usr/local/bin
.
Executable files
On Unix, an executable file is one with the ‘execute bit’ set in its permissions. You can make a file executable with this command:
chmod +x path/to/file
The file should be either a compiled ‘binary’, or a text script. Scripts need to start with a ‘shebang’, a line that identifies the interpreter to run the script with. For example:
#!/usr/bin/python3
The command is the filename. By convention, it should be lower case. If you
want to use more than one word, separate them with hyphens, e.g.
chromium-browser
.
Desktop launcher¶
To add your application to the desktop launcher or applications menu, you need
a desktop entry file, with a .desktop
extension. It contains something like
this:
[Desktop Entry]
Version=1.0
Type=Application
# The name will be displayed
Name=Inkscape
# Translations are possible: they're used depending on the system locale
Name[hi]=इंकस्केप
# See the icon section for how this is looked up.
Icon=inkscape
# The command to launch your application. %F is for file paths to open.
Exec=inkscape %F
# File types it can open; see file associations.
MimeType=image/svg+xml;...
Your application’s desktop entry is also used for file association.
There are a number of other optional fields you can use. See the links below for more information.
These desktop files are placed in an applications
subdirectory of each
XDG data directory.
If you have to put it in place yourself, the normal locations
are:
- Per-user:
~/.local/share/applications
- System:
/usr/local/share/applications
File associations¶
To use your application for opening files from the file manager, specify the
details in your desktop file. In the Exec
field, make
sure your launch command includes a placeholder like %F
:
Exec=inkscape %F
%F
may be replaced by one or more file paths. Use lowercase %f
if it can
only handle one path per command. %U
and %u
are similar, but they pass
URLs. Local files have URLs starting file://
, but the platform might also
pass HTTP or FTP URLs to your application.
Then use the MimeType
field to specify what MIME types it handles:
MimeType=image/svg+xml;image/x-eps;
There may be other applications that support the same MIME type.
It’s normally up to the user to pick the default application for a file type,
but if you have a good reason to change it, you can use a mimeapps.list
file as described in the MIME associations specification.
If the file format you want to open isn’t already defined on the system, you’ll need to define a new MIME type for it.
Define a MIME type¶
A MIME type is meant to be a unique name for a file format, like image/png
or text/x-makefile
. For new MIME types, the recommended format is
application/vnd.org_name.app_name
, filling in the
organisation name and app or format name as appropriate (e.g. Libreoffice ODT
files are application/vnd.oasis.opendocument.text
). You can add +json
or +xml
to the end if your file format is based on one of these generic
data formats.
MIME types are added to the system with XML files like this:
<?xml version="1.0" encoding="UTF-8"?>
<mime-info xmlns="http://www.freedesktop.org/standards/shared-mime-info">
<mime-type type="application/vnd.acme.frobulate">
<comment>Frobulate file</comment>
<glob pattern="*.frobulate"/>
</mime-type>
</mime-info>
The <glob>
tag specifies a file extension for files with this MIME type.
Other fields can distinguish different file types sharing the same extension,
but it’s best to pick a unique extension. There’s no need to limit the extension
to three letters.
The filename of this XML file should start with the vendor name, e.g.
acme-frobulate.xml
. Call xdg-mime install acme-frobulate.xml
to install
it. This will copy it into a directory such as /usr/local/share/mime/packages
,
and rebuild the MIME database from all of these XML source files.