How can I get a list of applications that are capable to open a specific filetype / MIME-type? I'm searching for a desktop-environment independent solution on Linux.
I found the possibilty to get the MIME type for a file.:
~> xdg-mime query filetype test.svg
image/svg+xml
Then I could query for the default application for that MIME type.:
~> xdg-mime query default image/svg+xml
eog.desktop
Is there also a solution to get a list of programs (not default) that I can use for that file?
For example on a GNOME desktop, if I choose open with another application for *.json file, I can see three (Atom, Gedit, Builder) applications that are recommended for opening the file.:
If I choose, show all applications, I can also see a further associated application (LibreOffice Writer).:
I found the file /home/user/.config/mimeapps.list which has content like:
[Added Associations]
text/html=atom.desktop;firefox.desktop;midori.desktop;org.gnome.gedit.desktop;brackets.desktop;
application/javascript=atom.desktop;org.gnome.Builder.desktop;org.gnome.gedit.desktop;
and also has associated applications for a mime type, but I can not find a global mimeapps.list file which is mentioned in the Arch Linux wiki.


What GNOME most likely does is parsing all .desktop files and looking for these that declare support for requested MIME type. This is the only certain way of solving your problem. With proper parsing libraries in place and lower-level language, this should be relatively fast operation. Additionally, they may put some cache files to speed things up further.
But if "certain" is not required and "probably" is good enough for you, then all MIME types and .desktop files associated with them are stored in
mimeinfo.cachefiles. I am not sure what is the actual guarantee of that file and maybe I am using it the wrong way, but following function seems to work just fineOn my system, running that code generates following output:
As you can see, some applications provide more than one desktop file (
smplayer.desktopandsmplayer_enqueue.desktop). These functional duplicates could be removed, but that isn't trivial.But please note that some desktops ignore XDG altogether. If you want really cross-desktop way, you should put
mailcapfiles somewhere in the mix. I strongly believe that GNOME actually ignores it.