Linux:打开默认浏览器的命令行指令

91
在Linux上(不同的常见发行版),我们需要执行哪个命令(从Java执行,但这并不重要)来在默认浏览器中打开给定的URL?
命令:xdg-open URL
11个回答

130

8
很遗憾,在RHEL中没有找到。 - Ondra Žižka
@OndraŽižka sensible-browser 也只适用于 Debian,是吗?在 RHEL 中有什么可以使用的吗? - cmc
3
它存在于RHEL中,安装包'xdg-utils'。 - Tim Peters
不在我的Debian 7中。必须使用“wget”代替。 - estornes
1
在Debian中,也有一个名为"xdg-utils"的软件包,就像在RHEL中一样。 - sleske
为什么它总是提示 ERROR:browser_gpu_channel_host_factory.cc(120) | Failed to launch GPU process. - Abhishta Gatya

49

我相信最简单的方法是使用Python:

python -m webbrowser "http://www.example.com/"

7
运作得非常好,而且是跨平台的(至少在Mac和Linux上可用)。 - Paul Liang
如果在Windows上安装了Python。 - Mikhail Gerasimov
我更喜欢这个跨平台使用的解决方案,但对于仅限Linux,与“xdg-open”相比,在我的系统上运行相同的URL需要大约7-8倍的时间。 - Taylor D. Edmiston
只是提醒在Windows上运行此程序的用户:我发现它经常会打开Internet Explorer(而不是用户配置的默认浏览器)。但是它能用,我想。 - Lazerbeak12345
如果有多个浏览器配置文件怎么办? - sksoumik

12

8
在Java(6+版本)中,您还可以执行以下操作:
Desktop d = Desktop.getDesktop();
d.browse(uri);

尽管这并不适用于所有的Linux系统。撰写本文时,Gnome受到支持,但KDE则不是。


7

6
在一些自带open命令的发行版中,
$ open http://www.google.com

3
在Ubuntu 16.04上它无法工作,因为它尝试打开文件。 - omikron

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
请考虑为您的回答添加一些细节。 - Shamas S
在Shell脚本中使用这些命令时,您需要首先测试它们是否存在(例如,command -v $CMD)。$? = 0。 - JimmyLandStudios

4

我认为使用xdg-open http://example.com可能是最好的选择。

如果他们没有安装它,我想他们可能只有kde-opengnome-open(两者都只接受一个文件/url),或者一些其他解决方法,比如循环常见的浏览器可执行文件名,直到找到可以执行的文件(使用which)。如果您想要完整的解决方法/备选方案列表,我建议阅读xdg-open(它是调用kde-open/gnome-open等或其他备选方案的shell脚本)。

但是由于xdg-open和xdg-mime(用于其中一个备选方案)都是shell脚本,所以我建议将它们包含在您的应用程序中,如果调用which xdg-open失败,则将其添加到子程序环境的临时PATH变量中并调用它们。如果xdg-open失败,我建议抛出异常,并从它在stderr上输出的错误消息中捕获异常并打印/显示错误消息。

我会忽略java awt Desktop解决方案,因为该错误似乎表明他们不打算在短期内支持非gnome桌面。


1

如果想通过终端打开一个URL在浏览器中,CentOS 7 用户可以使用 gio open 命令。例如,如果你想打开 google.com,则输入 gio open https://www.google.com 就会在浏览器中打开该网址。

xdg-open https://www.google.com 也可以用来打开链接,但这个工具已经被弃用了,现在应该使用 gio open。我更喜欢使用它,因为这是从终端打开URL最简单的方式。


1
我认为结合shellholic所描述的xdg-open和 - 如果失败 - 使用which命令找到浏览器的解决方案,如这里所述,可能是最好的解决方案。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接