87

What command we have to execute (from Java, but that should not matter) on Linux (different common distributions) to open a given URL in the default browser?

Mot
  • 28,248
  • 23
  • 84
  • 121

11 Answers11

127

The most cross-distribution one is xdg-open http://stackoverflow.com

shellholic
  • 5,974
  • 1
  • 20
  • 30
47

I believe the simplest method would be to use Python:

python -m webbrowser "http://www.example.com/"
Kevin Grant
  • 5,363
  • 1
  • 21
  • 24
12

on ubuntu you can try gnome-open.

$ gnome-open http://www.google.com

8

In Java (version 6+), you can also do:

Desktop d = Desktop.getDesktop();
d.browse(uri);

Though this won't work on all Linuxes. At the time of writing, Gnome is supported, KDE isn't.

Daniel Winterstein
  • 2,418
  • 1
  • 29
  • 41
7

At least on Debian and all its derivatives, there is a 'sensible-browser' shell script which choose the browser best suited for the given url.

http://man.he.net/man1/sensible-browser

krtek
  • 26,334
  • 5
  • 56
  • 84
6

On distributions that come with the open command,

$ open http://www.google.com
Anand Varma
  • 150
  • 1
  • 2
5
###1     Desktop's -or- Console use:
sensible-browser $URL; # Opinion: best. Target preferred APP.
# My-Server translates to: w3m [options] [URL or filename] 
## [ -z "$BROWSER" ] && echo "Empty"
# Then, Set the BROWSER environment variable to your desired browser.

###2     Alternative 
# Desktop (if [command-not-found] out-Dated)
x-www-browser http://tv.jimmylandstudios.xyz # firefox

###3     !- A Must Know -!
# Desktop (/usr/share/applications/*.desktop)
xdg-open $URI # opens about anything on Linux (w/ .desktop file)
4

I think using xdg-open http://example.com is probably the best choice.

In case they don't have it installed I suppose they might have just kde-open or gnome-open (both of which take a single file/url) or some other workaround such as looping over common browser executable names until you find one which can be executed(using which). If you want a full list of workarounds/fallbacks I suggest reading xdg-open(it's a shell script which calls out to kde-open/gnome-open/etc. or some other fallback).

But since xdg-open and xdg-mime(used for one of the fallbacks,) are shell scripts I'd recommend including them in your application and if calling which xdg-open fails add them to temporary PATH variable in your subprograms environment and call out to them. If xdg-open fails, I'd recommend throwing an Exception with an error message from what it output on stderr and catching the exception and printing/displaying the error message.

I would ignore the java awt Desktop solution as the bug seems to indicate they don't plan on supporting non-gnome desktops anytime soon.

hugomg
  • 68,213
  • 24
  • 160
  • 246
Roman A. Taycher
  • 18,619
  • 19
  • 86
  • 141
1

I think a combination of xdg-open as described by shellholic and - if it fails - the solution to finding a browser using the which command as described here is probably the best solution.

Andreas
  • 6,447
  • 2
  • 34
  • 46
alexsb
  • 548
  • 4
  • 17
1

For opening a URL in the browser through the terminal, CentOS 7 users can use gio open command. For example, if you want to open google.com then gio open https://www.google.com will open google.com URL in the browser.

xdg-open https://www.google.com will also work but this tool has been deprecated, Use gio open instead. I prefer this as this is the easiest way to open a URL using a command from the terminal.

-1

If you are in Windows10 (including WSL2 *nix shells) you can try:

  explorer.exe   https://stackoverflow.com

  or

  cmd.exe /c start   https://stackoverflow.com/?foo=bar

Weird but it works!

Note: In the case of WSL there is a known bug which prohibits passing query parameters into the url. The workaround is to use "cmd.exe /c start url"

https://github.com/microsoft/WSL/issues/3832

XDS
  • 3,786
  • 2
  • 36
  • 56