如果 URL 匹配,.*\.myemployer\.com.*
那么我希望链接在 Chromium 中打开。否则,我希望它在 Brave 中打开。这可能吗?如果可以,怎么做?
答案1
text/html
请注意,mimetype(这是打开实际的 HTML 文件)和mimetype(这是 HTTP URL)之间存在差异x-scheme-handler/http
。我假设您想要自定义外部应用程序如何打开 HTTP/HTTPS URL,因为您提到了域。(请注意,这是针对外部应用程序的。自定义特定应用程序如何打开 HTTP/HTTPS URL浏览器处理 HTTP URL 是完全不同的事情。)
关于自定义 URL 处理程序的一个棘手的事情是,关联可能存储在至少四个文件中,具体取决于应用程序所使用的应用程序/库:
~/.config/mimeapps.list
(进行更改的正确位置)~/.local/share/application/mimeapps.list
(这已弃用的位置)~/.local/share/application/defaults.list
(较老的已弃用的位置)~/.local/share/applications/mimeinfo.cache
(缓存)
我一直在做一些使用自定义 URL 处理程序 最近,我修改了一些内容以达到这个目的。以下是说明:
检查当前注册的文件中是否存在协议。在我看来,它们看起来是这样的:
$ gio mime x-scheme-handler/http Default application for “x-scheme-handler/http”: firefox.desktop Registered applications: firefox.desktop chromium-browser.desktop Recommended applications: firefox.desktop chromium-browser.desktop $ gio mime x-scheme-handler/https Default application for “x-scheme-handler/https”: firefox.desktop Registered applications: firefox.desktop chromium-browser.desktop Recommended applications: firefox.desktop chromium-browser.desktop
-
我更喜欢使用 Python,因为它有解析 URL 和将错误发送到系统日志的库。
#! /usr/bin/env python3 import subprocess import logging import argparse import syslog import sys try : from urllib.parse import urlparse except ImportError: from urlparse import urlparse import os.path def http_url(url): if url.startswith('http://'): return url if url.startswith('https://'): return url else: syslog.syslog(syslog.LOG_ERR, sys.argv[0] + ": not an HTTP/HTTPS URL: '{}'".format(url)) raise argparse.ArgumentTypeError( "not an HTTP/HTTPS URL: '{}'".format(url)) if __name__ == '__main__': parser = argparse.ArgumentParser( description='Handler for http/https URLs.' ) parser.add_argument( '-v', '--verbose', help='More verbose logging', dest="loglevel", default=logging.WARNING, action="store_const", const=logging.INFO, ) parser.add_argument( '-d', '--debug', help='Enable debugging logs', action="store_const", dest="loglevel", const=logging.DEBUG, ) parser.add_argument( 'url', type=http_url, help="URL starting with 'http://' or 'https://'", ) args = parser.parse_args() logging.basicConfig(level=args.loglevel) logging.debug("args.url = '{}'".format(args.url)) parsed = urlparse(args.url) if parsed.hostname == 'askubuntu.com': browser = 'firefox' else: browser = 'chromium-browser' logging.info("browser = '{}'".format(browser)) cmd = [browser, args.url] try : status = subprocess.check_call(cmd) except subprocess.CalledProcessError: syslog.syslog(syslog.LOG_ERR, sys.argv[0] + "could not open URL with browser '{}': {}".format(browser, args.url)) raise
根据您的喜好调整脚本,特别是可执行文件
brave
(我没有使用过,所以我不知道)和部分的主机名if parsed.hostname
。 从当前目录测试脚本。
这应该可以通过 Firefox 打开:
$ ./http_url_handler.py 'https://askubuntu.com/questions/1161752/how-can-i-configure-a-domain-specific-default-browser'
这应该用 Chromium 打开:
$ ./http_url_handler.py 'https://superuser.com/questions/688063/is-there-a-way-to-redirect-certain-urls-to-specific-web-browsers-in-linux/'
将脚本添加到您的
$PATH
桌面文件以便可以找到它。我使用
bin
这样的目录:$ mkdir ~/bin/
并将其添加到
~/.profile
(注意您需要注销并重新登录才能查看更改):PATH="$HOME/bin:$PATH"
最后将脚本复制或符号链接到
~/bin
:$ ln -s $PWD/http_url_handler.py ~/bin/
如果你操作正确,你应该看到如下画面:
$ type -a http_url_handler.py http_url_handler.py is /home/nathaniel/bin/http_url_handler.py
不是这个:
$ type -a http_url_handler.py bash: type: http_url_handler.py: not found
从您的主目录测试脚本。
这应该在 Chromium 中打开:
$ http_url_handler.py 'https://superuser.com/questions/688063/is-there-a-way-to-redirect-certain-urls-to-specific-web-browsers-in-linux'
这应该在 Firefox 中打开:
$ http_url_handler.py 'https://askubuntu.com/questions/1161752/how-can-i-configure-a-domain-specific-default-browser'
安装桌面文件。以下是我用过的一个:
[Desktop Entry] Name=HTTP URL handler Comment=Open an HTTP/HTTPS URL with a particular browser TryExec=http_url_handler.py Exec=http_url_handler.py %u X-MultipleArgs=false Type=Application Terminal=false NoDisplay=true MimeType=x-scheme-handler/http;x-scheme-handler/https
通过以下方式
desktop-file-install
:$ desktop-file-install --dir=$HOME/.local/share/applications/ http-url-handler.desktop
或者手动将
http-url-handler.desktop
文件复制到正确的目录,该目录应该是~/.local/share/applications/
:$ cp http-url-handler.desktop ~/.local/share/applications/
这些是桌面文件中最重要的几行:
Exec=http_url_handler.py %u MimeType=x-scheme-handler/http;x-scheme-handler/https
使桌面文件可执行。
$ chmod +x $HOME/.local/share/applications/http-url-handler.desktop
这是出于安全预防措施的需要。
x-scheme-handler/http
使用和mimetypes注册桌面文件x-scheme-handler/https
。$ gio mime x-scheme-handler/http http-url-handler.desktop Set http-url-handler.desktop as the default for x-scheme-handler/http $ gio mime x-scheme-handler/https http-url-handler.desktop Set http-url-handler.desktop as the default for x-scheme-handler/https
这实际上只是改变了组
~/.config/mimeapps.list
下的行[Default Applications]
,因此不是这样:x-scheme-handler/http=firefox.desktop x-scheme-handler/https=firefox.desktop
它说的是:
x-scheme-handler/http=http-url-handler.desktop x-scheme-handler/https=http-url-handler.desktop
您还可以
[Added Associations]
使用文本编辑器将其添加到组下,使其看起来像这样:x-scheme-handler/http=http-url-handler.desktop;firefox.desktop;chromium-browser.desktop x-scheme-handler/https=http-url-handler.desktop;firefox.desktop;chromium-browser.desktop
一些较旧的应用程序使用
~/.local/share/application/mimeapps.list
,但这是正式弃用。但是,该xdg-mime
命令无论如何都会使用这个位置:$ xdg-mime default http-url-handler.desktop x-scheme-handler/http $ xdg-mime default http-url-handler.desktop x-scheme-handler/https
还有甚至更旧的弃用文件
defaults.list
某些应用程序仍在使用这个 文件。使用文本编辑器编辑此文件:$ edit ~/.local/share/applications/defaults.list
并手动添加以下几行:
x-scheme-handler/http=http-url-handler.desktop x-scheme-handler/https=http-url-handler.desktop
在群组下
[Default Applications]
。检查是否注册成功。
$ gio mime x-scheme-handler/http Default application for “x-scheme-handler/http”: http-url-handler.desktop Registered applications: firefox.desktop chromium-browser.desktop Recommended applications: firefox.desktop chromium-browser.desktop $ gio mime x-scheme-handler/https Default application for “x-scheme-handler/https”: http-url-handler.desktop Registered applications: firefox.desktop chromium-browser.desktop Recommended applications: firefox.desktop chromium-browser.desktop
如果你也添加到该
[Added Associations]
组,它将看起来像这样:$ gio mime x-scheme-handler/http Default application for “x-scheme-handler/http”: http-url-handler.desktop Registered applications: http-url-handler.desktop firefox.desktop chromium-browser.desktop Recommended applications: http-url-handler.desktop firefox.desktop chromium-browser.desktop $ gio mime x-scheme-handler/https Default application for “x-scheme-handler/https”: http-url-handler.desktop Registered applications: http-url-handler.desktop firefox.desktop chromium-browser.desktop Recommended applications: http-url-handler.desktop firefox.desktop chromium-browser.desktop
也檢查
xdg-mime
。$ xdg-mime query default x-scheme-handler/http http-url-handler.desktop $ xdg-mime query default x-scheme-handler/https http-url-handler.desktop
测试一些 URL。
这应该在 Chromium 中打开:
$ gio open 'https://superuser.com/questions/688063/is-there-a-way-to-redirect-certain-urls-to-specific-web-browsers-in-linux'
这应该在 Firefox 中打开:
$ gio open 'https://askubuntu.com/questions/1161752/how-can-i-configure-a-domain-specific-default-browser'
现在使用以下命令测试相同的 URL
xdg-open
:$ xdg-open 'https://superuser.com/questions/688063/is-there-a-way-to-redirect-certain-urls-to-specific-web-browsers-in-linux/' $ xdg-open 'https://askubuntu.com/questions/1161752/how-can-i-configure-a-domain-specific-default-browser'
更新 mimeinfo 缓存。
有些应用程序会读取
~/.local/share/applications/mimeinfo.cache
而不是~/.config/mimeapps.list
。因此请更新缓存:$ update-desktop-database ~/.local/share/applications/
为了方便起见,文件位于 Github 上:
https://github.com/nbeaver/askubuntu-custom-http-url-handler
答案2
你想要的东西其实很容易,你只是从错误的角度去接近它。
创建一个脚本(只需将 mozilla 和 chrome 更改为 google-chrome 和 brave 的完整路径。
#!/bin/bash
# Reading argument values using loop
isFound=0;
for argval in "$@"
do
#echo -n "$argval "
if [[ $argval == *myemployer* ]]; then
isFound=1;
break;
fi
done
if [[ isFound -eq 1 ]]; then
mozilla $@;
else
chrome $@;
fi
并保存此 shell 脚本(更改为 selectBrowser.sh
接下来将此shell脚本设为默认浏览器。
完毕。
答案3
经过一番探索,我认为我正在寻找的组件是 Gnome 的一部分。MIME 类型和应用程序之间似乎存在对应关系:
❯ gio mime text/html
Default application for “text/html”: chromium-browser.desktop
Registered applications:
firefox.desktop
chromium-browser.desktop
brave-browser.desktop
vim.desktop
nvim.desktop
org.gnome.gedit.desktop
Recommended applications:
firefox.desktop
chromium-browser.desktop
brave-browser.desktop
这里还有一些信息:https://help.gnome.org/admin/system-admin-guide/stable/mime-types-application.html.en
按照@RobertRiedl 的一个好主意,我可以在 text/html mimetype 上注册一个“浏览器”,它实际上只是一个小程序,它会检查字符串,然后启动所需的程序。我想你也可以用它来驱动其他 mimetype 重新映射。
如果我能让这个工作正常进行,我会更新这个答案并提供详细信息。