5

On my Lubuntu (18.10), xdg-open launches VLC Player when the file is not associated to any applications.

$ xdg-mime query filetype jquery.js
application/javascript
$ xdg-mime query default application/javascript # no output
$ xdg-open jquery.js
Error: no "view" mailcap rules found for type "application/javascript"
Opening "/tmp/jquery.js" with VLC media player  (application/javascript)

On some files, it launches Calibre's E-book viewer (.rb for example).


EDIT I digged into xdg-open and found it executes following commands:

  1. Check filetype with xdg-mime query filename "$file" and xdg-mime query default $filetype
  2. run-mailcap --action=view "$file"
  3. mimeopen -L -n "$file"

The problem lies in mimeopen.

Then how can I change mimeopen to open any unknown files with featherpad, or specific app? In other words, I'd like to set default fallback application if mimeopen can not find any suitable apps.

4
  • 1) It looks like it's not a problem of MIME-type/application association. As you say, MIME types are recognized and a default application for them is not set. 2) Looking at /usr/bin/xdg-open: it looks like it's unable to detect your desktop environment. Knowing the output of echo $XDG_CURRENT_DESKTOP and echo $DESKTOP_SESSION might help. 2.1) It looks like it's running run-mailcap and then mimeopen, (in a way that won't show you an application chooser), instead of running the file manager (pcmanfm, right?).
    – fra-san
    Nov 10, 2018 at 12:34
  • Thanks! I digged into /usr/bin/xdg-open and confirmed that it executes mimeopen -L -n "$file". Now I'm checking mimeopen to find reasons why VLC is associated to these files.
    – user291449
    Nov 15, 2018 at 4:14
  • If your xdg-open is not executing open_lxde() you may want to try setting the environment variable XDG_CURRENT_DESKTOP=LXDE. This way xdg-open should try to call pcmanfm instead of mimeopen and, if you are lucky (I'm not on LXDE, cannot test reliably), the file manager could ask you how to open files that have no explicit application association set.
    – fra-san
    Nov 15, 2018 at 9:22
  • I'm using Lubuntu 18.10 and its DE is now LxQT. And in xdg-open, open_lxqt is just an alias of open_generic. I'll update my question based on our comments.
    – user291449
    Nov 15, 2018 at 12:29

2 Answers 2

5

mimeopen treats unknown files as text/plain or application/octet-stream.

To set default application, run mimeopen with -d option. Since I could not find option to specify mimetype, you need to create dummy files at first.

touch text.txt # for text/plain
mimeopen -d text.txt # and choose your favorite app

echo -e \\0 > data.dat # for application/octet-stream
mimeopen -d -M data.dat

or edit "~/.config/mimeapps.list".

[Default Applications]
text/plain=featherpad.desktop;  
application/octet-stream=firefox.desktop;

mimeopen, which is shiped with File-MimeInfo, tries to find applications with parent mimytypes. For example, if the filetype starts with "text/", it has "text/plain" as parent. And all filetype inherits "application/octet-stream".

On mimeopen in my environment, the most "suitable" app for octet-stream is VLC Player and for text/plain, it is Calibre's E-book Viewer. That's why some files are opened with these apps.

3
  • It seems to detect empty files as text/plain. Wouldn't it be better to set the default for application/octet-stream if that is the root of all mimetypes? At least I was able to get a file detected like that using echo -e \\0 > filename.txt Aug 16, 2019 at 5:28
  • 1
    @JonasBerlin I added it to my answer, thanks!
    – user291449
    Aug 16, 2019 at 8:48
  • application/octet-stream work for all the unknown mime types , very good information ... thanks Sep 6, 2022 at 0:26
3

From man xdg-mime there is an option: xdg-mime default application mimetype(s) to set default applications. You can use

xdg-mime default featherpad.desktop application/javascript

to make featherpad.desktop as default editor for opening files like application/javascript.

Alternatively you can find a file under /usr/share/applications/ directory like default.list depends upon file manager in my case it is gnome-mimeapps.list (I am having gnome DE and nautilus FM). You can edit this file to launch default applications.

2
  • I'm afraid but I'd like to change behavior about all unknown files, not only about javascript...
    – user291449
    Nov 6, 2018 at 11:01
  • @rad164 see updated answer.
    – Prvt_Yadav
    Nov 6, 2018 at 11:16

You must log in to answer this question.