如何配置特定域的默认浏览器?

如何配置特定域的默认浏览器?

如果 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 处理程序 最近,我修改了一些内容以达到这个目的。以下是说明:

  1. 检查当前注册的文件中是否存在协议。在我看来,它们看起来是这样的:

    $ 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
    
  2. 写一个解析 URL 并启动相应浏览器的脚本

    我更喜欢使用 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

  3. 从当前目录测试脚本。

    这应该可以通过 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/'
    
  4. 将脚本添加到您的$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
    
  5. 从您的主目录测试脚本。

    这应该在 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'
    
  6. 安装桌面文件。以下是我用过的一个

    [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
    
  7. 使桌面文件可执行。

    $ chmod +x $HOME/.local/share/applications/http-url-handler.desktop
    

    这是出于安全预防措施的需要

  8. 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]

  9. 检查是否注册成功。

    $ 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
    
  10. 测试一些 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'
    
  11. 更新 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 重新映射。

如果我能让这个工作正常进行,我会更新这个答案并提供详细信息。

相关内容