There are numerous places to configure default applications on Linux. This page will explain the most used ones: using MIME types and using environment variables.
Using MIME types and desktop entries
The modern method to start applications is using Desktop Entries. This way, programs can advertise which kind of files (to be exact: what MIME types) they can open. For instance,
A list of MIME type and corresponding default application is stored in
$XDG_DATA_HOME/applications/mimeapps.list (for a single user;
$XDG_DATA_HOME defaults to
/usr/share/applications/defaults.list (system wide). This list can be edited by using xdg-mime.
This file looks like this:
[Default Applications] mimetype=desktopfile1;desktopfile2;...;desktopfileN
[Default Applications] text/html=firefox.desktop;chromium.desktop
A distribution could also ship a
/usr/share/applications/mimeapps.list to provide system-wide defaults, but Arch Linux does not do this. To override these system-wide defaults, one can add [Added Associations] section is used to specify preferred (default) applications in decreasing order of preference for the specified MIME type. The [Removed Associations] section is used to explicitly remove any previously inherited associations.
xdg-open is a desktop-independent tool for starting default applications. Many applications invoke the
xdg-open command internally. xdg-open uses xdg-mime to query
~/.local/share/applications/mimeapps.list (among other things; if you use a mainstream DE like GNOME, KDE or LXDE, xdg-open might try using their specific tools before xdg-mime) to find the MIME type of the file that is to be opened and the default application associated with that MIME type.
See xdg-open for more information.
Custom file associations
The following method creates a custom mime type and file association manually. This is useful if your desktop does not have a mime type/file association editor installed. In this example, a fictional multimedia application 'foobar' will be associated with all
*.foo files. This will only affect the current user.
- First, create the file
$ mkdir -p ~/.local/share/mime/packages $ cd ~/.local/share/mime/packages $ touch application-x-foobar.xml
- Then edit
~/.local/share/mime/packages/application-x-foobar.xmland add this text:
<?xml version="1.0" encoding="UTF-8"?> <mime-info xmlns="http://www.freedesktop.org/standards/shared-mime-info"> <mime-type type="application/x-foobar"> <comment>foo file</comment> <icon name="application-x-foobar"/> <glob-deleteall/> <glob pattern="*.foo"/> </mime-type> </mime-info>
Note that you can use any icon, including one for another application.
- Next, edit or create the file
~/.local/share/applications/foobar.desktopto contain something like:
[Desktop Entry] Name=Foobar Exec=/usr/bin/foobar MimeType=application/x-foobar Icon=foobar Terminal=false Type=Application Categories=AudioVideo;Player;Video; Comment=
Note that Categories should be set appropriately for the application type (in this example, a multimedia app).
- Now update the mime database with:
$ update-mime-database ~/.local/share/mime
Programs that use mime types, such as file managers, should now open
*.foo files with foobar. (You may need to restart your file manager to see the change.)
Maintaining settings for multiple desktop environments
OnlyShowIn field of a .desktop file may be useful; see this page. I haven't tried setting this field yet; please update this wiki page if you have any info about using
Using environment variables
Most non-graphical programs use Environment Variables, such as
BROWSER. These can be set in your terminal's autostart file (e.g.
export EDITOR="nano" export BROWSER="firefox"
Sometimes, a certain application will not appear in the right-click Open With... dialog. To fix this problem, locate the
.desktop file in
/usr/share/applications, edit it as root, and add
%U to the end of the
Exec= line. For example, Kile currently has this problem; you need to edit
/usr/share/applications/kde4/kile.desktop and change the line reading
Exec=kile to read
Exec=kile %U. Also, please file a bug against the upstream project if you notice this problem.
You may also have to edit the
MimeType list in the
.desktop file if you install extensions that allow an application to handle additional MIME types.