我需要覆盖单个进程的默认浏览器。此进程从 npm 脚本手动启动。为了以编程方式实现此目的,我决定BROWSER
在脚本之前覆盖环境变量。但这不起作用。它会窃取打开系统范围的默认浏览器。我尝试过xdg-open
,但它也不起作用。
简而言之,我希望以下命令在提供的浏览器中打开给定的 URL,而不是在默认浏览器中。
BROWSER='path to desired browser' xdg-open 'any url'
PS:再多说一点我遇到的问题。我在所有机器上都使用 Firefox 作为默认浏览器,并且已经习惯了。但最近,在调试一个 Web 应用程序时,我发现 Firefox 开发工具没有使用一些断点。我安装了 Chromium,它的调试器工作正常。我使用 storybook 进行开发,并希望在 Chromium 中打开它,同时将 Firefox 用作日常使用的默认变量。
答案1
我需要类似的东西,但不仅限于尊重的情况$BROWSER
,因为xdg-open
会经常使用错误的浏览器配置文件。
以下是使用以下组件的解决方法:
BROWSER
加载变量并启动正确浏览器的脚本。- 通过将当前默认
.desktop
配置文件复制到~/.local/share/applications
目录来覆盖它。 - 更改文件
Exec
中的语句.desktop
以使用自定义脚本。 BROWSER
在登录 shell 中将变量设置为合理的默认值,以便进行回退。
一步步
~/bin
我在目录中添加了一个名为的脚本custom-browser
,如下所示:
$BROWSER "$@"
其次,使用以下命令查找当前.desktop
配置文件:
xdg-settings get default-web-browser
这给了我firefox.desktop
,我将其复制到我的用户主目录:
cp /usr/share/applications/firefox.desktop ~/.local/share/applications/firefox.desktop
我修改了Exec
中的语句~/.local/share/applications/firefox.desktop
以启动/home/{user}/bin/custom-browser
。
现在,我可以使用:
BROWSER='chromium' xdg-open 'https://startpage.com'
BROWSER='firefox' xdg-open 'https://startpage.com'
根据BROWSER
变量打开不同的浏览器。希望这对您有所帮助。
我的用法
我用direnv
[1] 根据目录设置BROWSER
变量,例如,工作目录使用我的浏览器的工作配置文件。
另一个方法是我启动应用程序以BROWSER=hardened-firefox signal-desktop
强制应用程序使用特定浏览器打开链接。
笔记
- 该脚本是必须的,因为该
.desktop
文件没有加载环境变量,所以Exec=$BROWSER %u
直接添加是不行的。 - 可以
BROWSER
在脚本中而不是登录 shell 中设置后备。 - 可以编写自定义文件并使用/
.desktop
更改默认值,而不是覆盖默认值;我发现使用覆盖更容易“正确”地完成它。xdg-settings
xdg-mime
- 如果使用的浏览器不使用 URL 作为第一个位置参数,则自定义
.desktop
并在脚本中处理该参数可能会更容易。 - 如果
.desktop
配置文件不在 中/usr/share/applications
,或者 中的覆盖$HOME/.local/share/applications
不起作用,请尝试替代路径[2] 或者参阅你的发行版的文档。
链接
答案2
export BROWSER='path to desired browser' && xdg-open 'any url'
应该可以解决问题。