How can I set which application is launched by 'xdg-open'?

Solution 1:

All of the above answers are basically correct, depending on what you're doing and how the programs you're using are invoking things. For me the problem was that my terminal emulator (Tilix) was still opening the wrong browser (Firefox instead of Chrome), as well as xdg-open foobar.html also opened the wrong browser.

Eventually I figured out that there's also xdg-mime:

xdg-mime query default x-scheme-handler/http
firefox.desktop
xdg-mime query default x-scheme-handler/https
firefox.desktop

That is not correct, so I changed those to:

xdg-mime default google-chrome.desktop 'x-scheme-handler/http'
xdg-mime default google-chrome.desktop 'x-scheme-handler/https'

Then there's also bindings for 'text/html', which I also changed:

xdg-mime default google-chrome.desktop 'text/html'

This, in combination with making sure that the following are also set correctly:

  • the BROWSER environment variable
  • sensible-browser (/usr/bin/sensible-browser, a wrapper script that tries to launch some of the other items in this list)
  • gnome-www-browser (/usr/bin/gnome-www-browser, a symlink to /etc/alternatives/gnome-www-browser)
  • x-www-browser (/usr/bin/x-www-browser, a symlink to /etc/alternatives/x-www-browser
  • www-browser (/usr/bin/www-browser, a symlink to /etc/alternatives/www-browser)
  • all of the "alternative" entries (see update-alternatives --get-selections for a list) that point to a browser.
  • The GConf database (See @Isaiah's answer)

This finally opens the correct browser for most situations on my desktop. 2018 is surely the year of Linux on the desktop.

Solution 2:

Chromium also has an option in its preferences to make it the default browser:

alt text

That should work, but it if doesn't, read on:

There are several keys in the GConf database that determine what browser is launched by xdg-open:

  • /desktop/gnome/url-handlers/unknown/command
  • /desktop/gnome/url-handlers/http/command
  • /desktop/gnome/url-handlers/https/command
  • /desktop/gnome/url-handlers/about/command

Make sure they are all set correctly:

  • Hit Alt+F2
  • Enter gconf-editor
  • Navigate to the above keys, they should be set to /usr/bin/chromium-browser %s.

alt text

Solution 3:

In my situation I installed Chromium and made it default. Before that Chrome was default browser.

I tried all I was able to do: setting Chromium default browser, changing gconf settings to run Chromium with %U variable (https://askubuntu.com/a/41085/94263), changing alternatives to use Chromium as default x-www-browser (https://askubuntu.com/a/24052/94263), but nothing helped, xdg-open opened new Chromium window with start-page ang couldn't open given link, sensible-browser opened Chrome. I tried to purge Chrome (Chromium was automatically set as default and auto in update-alternatives) and install it again, because I need Pepper flash from there, and it became default x-www-browser alternative again, and again was open with sensible-browser command. Then I've googled some pages and drew my attention on priority and also discovered that there is gnome-www-browser symlink in /etc/alternatives/ too and google-chrome was default there. Chrome had priority set in 200 and Chromium - 40. Google Chrome's priority is higher, so update-alternatives utility installs it as default web-browser automatically as "better version".

I've removed both Chrome and Chromium from x-www-browser and gnome-www-browser:

sudo update-alternatives --remove x-www-browser /usr/bin/google-chrome
sudo update-alternatives --remove x-www-browser /usr/bin/chromium-browser
sudo update-alternatives --remove gnome-www-browser /usr/bin/google-chrome
sudo update-alternatives --remove gnome-www-browser /usr/bin/chromium-browser

Then I've installed new alternatives with other priorities:

sudo update-alternatives --install /usr/bin/x-www-browser x-www-browser /usr/bin/google-chrome 40
sudo update-alternatives --install /usr/bin/x-www-browser x-www-browser /usr/bin/chromium-browser 200
sudo update-alternatives --install /usr/bin/gnome-www-browser gnome-www-browser /usr/bin/google-chrome 40
sudo update-alternatives --install /usr/bin/gnome-www-browser gnome-www-browser /usr/bin/chromium-browser 200

I don't know are '40' and '200' default priorities for all computers or you will have other numbers. It's better to look before by entering

sudo update-alternatives --display x-www-browser
sudo update-alternatives --display gnome-www-browser

Upd. I've tried to do the same things on completely different system, and priorities were the same as here.

Upd2. If you'll run google-chrome just once, it will change it's priority back to 200 but chromium-browser will stay as default.

This worked for me. Chromium was set up as default automatically and sensible-browser is launching Chromium. But still xdg-open is opening new blank window.