4

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.

  • 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 '18 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. –  Nov 15 '18 at 04: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 '18 at 09: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. –  Nov 15 '18 at 12:29

2 Answers2

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.

  • 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` – Jonas Berlin Aug 16 '19 at 05:28
  • 1
    @JonasBerlin I added it to my answer, thanks! –  Aug 16 '19 at 08:48
  • application/octet-stream work for all the unknown mime types , very good information ... thanks – Hatem Badawi Sep 06 '22 at 00: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.

Prvt_Yadav
  • 5,732
  • 7
  • 32
  • 48