How to change what external program calibre uses to open files

Here are two (mine) related questions:

Abbreviated solution is here:

Calibre uses QDesktopServices.openUrl(qurl) method, that uses xdg-utils under the hood to open files.

IMO xdg-utils is a stinking mess of fragile bash scripts, that ... behaves erratically at best.

To set what program is used to launch a certain file you'll need to:

  1. Find mimetype of this file, this can be done by:
  xdg-mime query filetype <filename>

This will print out mimetype of that file, for example ``application/pdf``.
  1. Then you'll need to find a desktop file associated with application you want to use. In debian desktop files are in /usr/share/applications.

    In case of pdf file I wanted to open it using evince that has desktop.file named evince.desktop.

  2. Associate desktop file with mimetype, using command: xdg-mime default evince.desktop application/pdf.

  3. Verify it works using xdg-open. Now try to open this file using xdg-open, if it opens in a proper application it should open in proper application in calibre.