I'm using OpenBox window manager without any desktop environment.

xdg-open behaves strangely. It opens everything with firefox.

$ xdg-settings --list
Known properties:
  default-web-browser           Default web browser

I'm looking for a simple program; something like reading every *.desktop file in /usr/share/applications/ folder and automatically setting xdg settings.


You can use perl-file-mimeinfo in the extra repository to manage mimetypes.

Example to open all .pdf files in apvlv:

/usr/bin/vendor_perl/mimeopen -d $file.pdf

and then, at the prompt, enter the application: apvlv.

  • It work's. But it only opens file. So my xdg-open left unconfigured and applications using xdg-open won't open files right. – kravemir Apr 15 '12 at 8:53
  • I don't quite follow your comment. What is not working? The -d switch sets the default. So if you use it to open fileA.pdf - you should then be able to open fileB.pdf with your preferred application. – jasonwryan Apr 15 '12 at 9:34
  • 1
    Yes. mimeopen -d a.pdf sets default for *.pdf, but it sets default for itself - mimeopen b.pdf works. But xdg-open configuration left unchanged and it still opens everything with firefox :/ – kravemir Apr 19 '12 at 12:40
  • 3
    Once I have set the default with mimeopen, xdg-open behaves as expected--in the case of .pdfs, it opens them with apvlv. – jasonwryan Apr 20 '12 at 7:50
  • 1
    This doesn't work for me in Lubuntu 16.04. sudo xdg-mime default pluma.desktop text/plain gives touch: cannot touch "/home/user/.local/share/applications/mimeapps.list": No such file or directory /usr/bin/xdg-mime: 807: /usr/bin/xdg-mime: cannot create /home/user/.local/share/applications/mimeapps.list.new: Directory nonexistent; /usr/bin/vendor_perl/mimeopen -d $file.txt gives bash: /usr/bin/vendor_perl/mimeopen: No such file or directory. – Nickolai Leschov Feb 21 '17 at 18:50

Why not to use utilities from xdg itself?

To make Thunar the default file-browser, i.e. the default application for opening folders.

$ xdg-mime default Thunar.desktop inode/directory

to use xpdf as the default PDF viewer:

$ xdg-mime default xpdf.desktop application/pdf

This should create an entry in your local MIME database:

[Default Applications]

Your PDF files should be opened with xpdf now.

  • +1 and see also my related answer to the related question, unix.stackexchange.com/questions/77136/… – michael Jan 2 '14 at 8:57
  • 2
    Most useful answer, thanks. Easiest to know about defaults.list so it can simply be edited by hand if need be. – mVChr May 24 '16 at 21:08
  • For some reason xdg-mime did not modify defaults.list, but editing it manually (thanks to hints in this answer) did the trick. – Skippy le Grand Gourou Jun 28 '16 at 12:45
  • FYI few Perl dependencies are required for this, make sure you have them installed. RPM/DEB distributions will install these for you normally. – lzap Jul 13 '16 at 6:56
  • 2
    It seems defaults.list is now called mimeapps.list. See the Arch Wiki for a list of valid locations for mimeapps.list. – Mateen Ulhaq Sep 24 '17 at 20:51

On Debian you could use the command, as root

update-mime-database /usr/share/mime

having the shared-mime-info package installed.

  • 2
    I've tried it. It doesn't work. I'm running Arch. – kravemir Apr 14 '12 at 12:44
  • -1 This is specific to desktop environments that depend on shared-mime-info, such as GNOME – craymichael Jun 16 at 22:17

You could use something like this to generate the appropriate xdg-mime commands for each of your .desktop files and the mimetypes they contain, then execute the ones you like. Note /usr/share/applications might have subdirectories.

for dd in /usr/share/applications ~/.local/share/applications; do
  for d in $(ls $dd 2>/dev/null | grep "\\.desktop$"); do
    for m in $(grep MimeType $dd/$d | cut -d= -f2 | tr ";" " "); do
      echo xdg-mime default $d $m;

This is like @aleb's answer, but it works on desktop files with spaces:

find /usr/share/applications ~/.local/share/applications -iname '*.desktop' -print0 | while IFS= read -r -d $'\0' d; do
  for m in $(grep MimeType "$d" | cut -d= -f2 | tr ";" " "); do
    echo xdg-mime default "'$d'" "'$m'"

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.