4

There are many questions similar to mine (e.g. xdg-open not open default browser or xdgutils - xdg-settings not setting default-web-browser in gentoo, but none of the answers helped in my case. Therefor I ask for my particular situation:


On Centos 7 I have no free desktop manager running, I just run some X11 applications (like VS Code) from the command line where the DISPLAY variable is set to the X server on the (Windows) machine I connect from.

On the Centos machine I have two browsers installed, firefox and google-chrome. I can start both browsers just by typing firefox resp. google-chrome in the bash terminal.

xdg-open is available and it opens links in google-chrome - as does VS Code. However I want to change this to firefox.

I tried:

  1. Ticking "Default browser" in Firefox's GUI preferences.

  2. Using xdg-settings, but

    xdg-settings get default-web-browser 
    

    returns "xdg-settings: unknown desktop environment"

  3. Setting $BROWSER. In bash I issued

    export BROWSER=firefox
    

    but still google-chrome is started by xdg-open

How can I set in this environment the default browser to firefox?


Note: Strangely on another machine with Centos 6 (and "no desktop environment" either) the export BROWSER method works!

halloleo
  • 9,216
  • 13
  • 64
  • 122

1 Answers1

5

The desired behavior can be set in the mimeapps.list configuration files described in the XDG MIME Applications specification.

TLDR: In order to configure firefox as the default browser for your user create ~/.config/mimeapps.list containing the following lines:

[Default Applications]
x-scheme-handler/http=firefox.desktop
x-scheme-handler/https=firefox.desktop
x-scheme-handler/ftp=firefox.desktop
x-scheme-handler/chrome=firefox.desktop
text/html=firefox.desktop
application/x-extension-htm=firefox.desktop
application/x-extension-html=firefox.desktop
application/x-extension-shtml=firefox.desktop
application/xhtml+xml=firefox.desktop
application/x-extension-xhtml=firefox.desktop
application/x-extension-xht=firefox.desktop

Details: xdg-utils like xdg-open(1) and xdg-mime(1) look for this file in the locations listed under the File name and location section of this specification:

  • $XDG_CONFIG_HOME/$desktop-mimeapps.list user overrides, desktop-specific (for advanced users)
  • $XDG_CONFIG_HOME/mimeapps.list user overrides (recommended location for user configuration GUIs)
  • $XDG_CONFIG_DIRS/$desktop-mimeapps.list sysadmin and ISV overrides, desktop-specific
  • $XDG_CONFIG_DIRS/mimeapps.list sysadmin and ISV overrides
  • $XDG_DATA_HOME/applications/$desktop-mimeapps.list for completeness, deprecated, desktop-specific
  • $XDG_DATA_HOME/applications/mimeapps.list for compatibility, deprecated
  • $XDG_DATA_DIRS/applications/$desktop-mimeapps.list distribution-provided defaults, desktop-specific
  • $XDG_DATA_DIRS/applications/mimeapps.list distribution-provided defaults

The locations for the $XDG variables are governed by the XDG Base Directory specification. If you want to figure out where xdg-utils are looking for configuration in your particular case, run them with the XDG_UTILS_DEBUG_LEVEL environment variable like so:

$ XDG_UTILS_DEBUG_LEVEL=10 xdg-open 'https://www.example.com'
...
Checking /home/USERNAME/.config/mimeapps.list
...
  • 1
    Thanks! Makes sense. The tip with `XDG_UTILS_DEBUG_LEVEL` was worth gold: In my case `~/.config/mimeapps.list` didn't do the job, but with the debugging variable I found out that the system looks for `~/.local/share/applications/mimeapps.list`, so i set the default entries there. – halloleo Nov 17 '20 at 07:35