# Default applications

Related articles

- Desktop environment
- Window manager

Default applications can be set for use with particular file types (e.g. the Firefox web browser for `HTML` files). Where undertaken, files may be opened and/or edited with the desired application much faster and more conveniently. There are also numerous methods to configure default applications in Linux. This page will explain the most common methods: File Managers, MIME types, and environment variables.

## Using File Managers

Tip: This is the recommended method for less experienced users

Most file managers will allow for specific applications to be set as the defaults for various file types. New defaults may also be set at any time. For example, to set a default application using thunar, the native file manager for XFCE:

- `right-click` the file-type desired
- Select `Open with another application`
- Select the desired application
- Ensure that the `Use as default for this kind of file` check-box is ticked
- Click the `Open` button.

The general process will be very similar for most other popular file managers, including PCManFM and spacefm.

## Using the Gnome Control Center

Tip: Another easy method for less experienced users

If it's installed, run `gnome-control-center`, open `System` > `Details` > `Default Applications`.

## 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, `gimp.desktop` states `MimeType=image/bmp;image/gif;...`.

freedesktop.org recommends how to specify default (preferred) applications for MIME-types in their Association between MIME types and applications standard. This involves writing into files called `mimeapps.list` which are looked up in the following order of paths:

Formal path | Usually defined as | Usage
--- | --- | ---
$XDG_CONFIG_HOME/$desktop-mimeapps.list | $HOME/.config/$desktop-mimeapps.list | user overrides, desktop-specific
$XDG_CONFIG_HOME/mimeapps.list | $HOME/.config/mimeapps.list | user overrides
$XDG_CONFIG_DIRS/$desktop-mimeapps.list | /etc/xdg/$desktop-mimeapps.list | sysadmin and vendor overrides, desktop-specific
$XDG_CONFIG_DIRS/mimeapps.list | /etc/xdg/mimeapps.list | sysadmin and vendor overrides
$XDG_DATA_HOME/applications/$desktop-mimeapps.list | $HOME/.local/share/applications/$desktop-mimeapps.list | for compatibility but now deprecated, desktop-specific
$XDG_DATA_HOME/applications/mimeapps.list | $HOME/.local/share/applications/mimeapps.list | for compatibility but now deprecated
$XDG_DATA_DIRS/applications/$desktop-mimeapps.list | /usr/local/share/applications/$desktop-mimeapps.list and /usr/share/applications/$desktop-mimeapps.list | distribution-provided defaults, desktop-specific
$XDG_DATA_DIRS/applications/mimeapps.list | /usr/local/share/applications/mimeapps.list and /usr/share/applications/mimeapps.list | distribution-provided defaults

In this table, $VARS are environment variables and $desktop is the name of the current desktop, in lowercase, for example: kde, gnome, xfce, etc.

The default application for a given MIME-type is specified by writing into the group `[Default Applications]` in the mimeapps.list file. In the following example, application default1.desktop (if it is installed) will be used for mimetype1, and otherwise default2.desktop (if it is installed and default1.desktop is not):

    [Default Applications]
    mimetype1=default1.desktop;default2.desktop

The applications are written as a semicolon-separated list of desktop file IDs.

In the absence of such an entry, the next mimeapps.list in the path hierarchy will be checked. Once all levels have been checked, if no entry could be found, then programs can pick any of the .desktop files associated with the MIME-type, taking into account added and removed associations as per these other groups which may be specified in mimeapps.list files:

    [Added Associations]
    mimetype1=foo1.desktop;foo2.desktop;foo3.desktop
    mimetype2=foo4.desktop
    [Removed Associations]
    mimetype1=foo5.desktop

The [Added Associations] group defines additional associations of applications with MIME-types, as if the .desktop file was listing this MIME-type in the first place. The [Removed Associations] group removes associations of applications with MIME-types, as if the .desktop file was NOT listing this MIME-type in the first place. The entries in [Default Applications] should also be considered to add an association between application and MIME-type in the same manner.

Notes:

- Arch Linux itself does not provide any system-wide preferences for associations, but other distributions and specific desktop environments may, via `mimeapps.list` and/or the older but deprecated `defaults.list` files.
- As the standards for setting default applications have been recently changed, not all programs will comply with them yet. Indeed, the programs provided by freedesktop.org's xdg-utils package do not fully follow their own standards!
- Your choice of desktop environment, or none, will also affect how your default applications are stored.
- When the program `update-desktop-database` is run (usually as root during the un/installation of a package) it normally updates files called `mimeinfo.cache` in the /usr/local/share/applications and /usr/share/applications directories. These files keep track of which MIME-types are associated with which .desktop files overall. This file should not be edited by the user.

### gnome-defaults-list

gnome-defaults-list is available from the AUR, and contains a list of file-types and programs specific to the GNOME desktop. The list is installed to `/etc/gnome/defaults.list`.

Open this file with a text editor. Here you can replace a given application with the name of the program of your choice. For example, the media-player `totem` can be replaced with another, such as `vlc`. Save the file to `~/.local/share/applications/defaults.list`.

### perl-file-mimeinfo

perl-file-mimeinfo is available from the official repositories. It can be invoked by using the following command:

    $ mimeopen -d /path/to/file

You are asked which application to use when opening `/path/to/file`:

    Please choose a default application for files of type text/plain
           1) notepad  (wine-extension-txt)
           2) Leafpad  (leafpad)
           3) OpenOffice.org Writer  (writer)
           4) gVim  (gvim)
           5) Other...

Your answer becomes the default handler for that type of file. Mimeopen is installed as `/usr/bin/perlbin/vendor/mimetype`.

### xdg-open

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 `~/.local/share/mime/packages/application-x-foobar.xml`:

    $ 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.xml` and 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.desktop` to 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 applications and mime database with:

    $ update-desktop-database ~/.local/share/applications
    $ 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

The `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 `OnlyShowIn`.

## Using environment variables

Most non-graphical programs use Environment variables, such as `EDITOR` or `BROWSER`. These can be set in your terminal's autostart file (e.g. `~/.bashrc`):

    ~/.bashrc

    export EDITOR="nano"
    export BROWSER="firefox"

## Troubleshooting

### Applications don't appear in the Open With... context menu (of a file manager)

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.

Category:

- Desktop environments