Ubuntu – How is it determined which application is to open a file of specific mime-type

file associationfilesmime-type

I saw the following question, but I can't comment yet. So I decided to create a separate one.

I have both transmission and deluge installed. And I have no association for application/x-bittorrent mime type, based on contents of /usr/share/gnome/applications/defaults.list and ~/.local/share/applications/mimeapps.list. But it seems .torrent extension has association and it's transmission. That is when I double-click a .torrent file, transmission is opened. The same goes for when I open it in chromium.

The question is how come it is transmission? Why not deluge? Both have this mime type in their .desktop files. Are the associations stored somewhere else?

UPD

$ egrep bittorrent /usr/share/applications/mimeapps.list
egrep: /usr/share/applications/mimeapps.list: No such file or directory
$ egrep bittorrent /usr/share/applications/mimeinfo.cache
application/x-bittorrent=transmission-gtk.desktop;deluge.desktop;
$ egrep bittorrent /usr/share/applications/defaults.list

$ egrep bittorrent /home/yuri/.local/share/applications/mimeapps.list
$ egrep bittorrent /home/yuri/.local/share/applications/defaults.list
egrep: /home/yuri/.local/share/applications/defaults.list: No such file or directory

The default is transmission. Changing order in /usr/share/applications/mimeinfo.cache changes the default application. Probably one shouldn't rely on this behavior.

Best Answer

There are two ways a MIME type and a .desktop file are associated.

Method 1

The first way is through *.list MIME config files (many exist on the system, see below). For example, a typical entry in ~/.local/share/applications/mimeapps.list might be:

[Default Applications]
application/x-bittorrent=transmission.desktop;deluge.desktop

This means that the preferred application is transmission, if it cannot be found, then the second choice is deluge.

Method 2

The second way is through the .desktop file itself. The application advertises which MIME types it can open. For example, in transmission-gtk.desktop, we have the following line

MimeType=application/x-bittorrent;x-scheme-handler/magnet;

which indicates that this program can handle those two MIME types.

Which Application To Use?

The association between MIME types and Applications is defined by the freedesktop.org standards. Here are the steps taken when determining which application (i.e. which .desktop file) to launch for a given MIME type.

Step 1: Look for an association in the MIME config files. The lookup order is as follows:

$XDG_CONFIG_HOME/$desktop-mimeapps.list    
$XDG_CONFIG_HOME/mimeapps.list    
$XDG_CONFIG_DIRS/$desktop-mimeapps.list    
$XDG_CONFIG_DIRS/mimeapps.list    
$XDG_DATA_HOME/applications/$desktop-mimeapps.list    
$XDG_DATA_HOME/applications/mimeapps.list    
$XDG_DATA_DIRS/applications/$desktop-mimeapps.list   
$XDG_DATA_DIRS/applications/mimeapps.list

Step 2: Once all levels have been checked, if no entry could be found, the implementations can pick any of the .desktop files associated with the MIME type, taking into account added and removed associations (which exist in the MIME config files).

Although you do not have any MIME config files, the reason that transmission is being used is because of Step 2 as defined by the standard. Check your transmission-gtk.desktop file to see whether it advertises its ability to open torrents.

I suggest reading the linked document for a full understanding.