如果 url 匹配,.*\.myemployer\.com.*那么我希望链接以铬打开。否则我希望它勇敢地打开。这可能吗?如果是这样,如何?
请注意,text/htmlmimetype(这是打开实际的 HTML 文件)和x-scheme-handler/httpmimetype(这是一个 HTTP 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
Run Code Online (Sandbox Code Playgroud)编写一个脚本来解析 URL 并启动相应的浏览器。
我更喜欢使用 Python,因为它具有解析 URL 并将错误发送到 syslog 的库。
#! /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
Run Code Online (Sandbox Code Playgroud)
根据您的喜好调整脚本,特别是部分中的可执行文件brave(我没有使用过,所以我不知道)和主机名if parsed.hostname。
从当前目录测试脚本。
这应该用 Firefox 打开:
$ ./http_url_handler.py 'https://askubuntu.com/questions/1161752/how-can-i-configure-a-domain-specific-default-browser'
Run Code Online (Sandbox Code Playgroud)
这应该用 Chromium 打开:
$ ./http_url_handler.py 'https://superuser.com/questions/688063/is-there-a-way-to-redirect-certain-urls-to-specific-web-browsers-in-linux/'
Run Code Online (Sandbox Code Playgroud)将脚本添加到您$PATH的桌面文件中,以便桌面文件可以找到它。
我使用这样的bin目录:
$ mkdir ~/bin/
Run Code Online (Sandbox Code Playgroud)
并将其添加到~/.profile
(请注意,您需要注销并再次登录才能查看更改):
PATH="$HOME/bin:$PATH"
Run Code Online (Sandbox Code Playgroud)
最后将脚本复制或符号链接到~/bin:
$ ln -s $PWD/http_url_handler.py ~/bin/
Run Code Online (Sandbox Code Playgroud)
如果您正确执行此操作,您应该会看到:
$ type -a http_url_handler.py
http_url_handler.py is /home/nathaniel/bin/http_url_handler.py
Run Code Online (Sandbox Code Playgroud)
不是这个:
$ type -a http_url_handler.py
bash: type: http_url_handler.py: not found
Run Code Online (Sandbox Code Playgroud)从您的主目录测试脚本。
这应该在 Chromium 中打开:
$ http_url_handler.py 'https://superuser.com/questions/688063/is-there-a-way-to-redirect-certain-urls-to-specific-web-browsers-in-linux'
Run Code Online (Sandbox Code Playgroud)
这应该在 Firefox 中打开:
$ http_url_handler.py 'https://askubuntu.com/questions/1161752/how-can-i-configure-a-domain-specific-default-browser'
Run Code Online (Sandbox Code Playgroud)[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
Run Code Online (Sandbox Code Playgroud)
要么通过desktop-file-install:
$ desktop-file-install --dir=$HOME/.local/share/applications/ http-url-handler.desktop
Run Code Online (Sandbox Code Playgroud)
或手动将http-url-handler.desktop文件复制到正确的目录,该目录应该是~/.local/share/applications/:
$ cp http-url-handler.desktop ~/.local/share/applications/
Run Code Online (Sandbox Code Playgroud)
这些是桌面文件中最重要的行:
Exec=http_url_handler.py %u
MimeType=x-scheme-handler/http;x-scheme-handler/https
Run Code Online (Sandbox Code Playgroud)使桌面文件可执行。
$ chmod +x $HOME/.local/share/applications/http-url-handler.desktop
Run Code Online (Sandbox Code Playgroud)
使用x-scheme-handler/http和x-scheme-handler/httpsmimetypes注册桌面文件
。
$ 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
Run Code Online (Sandbox Code Playgroud)
所有这些真正做的是更改组~/.config/mimeapps.list
下的行[Default Applications],而不是这样:
x-scheme-handler/http=firefox.desktop
x-scheme-handler/https=firefox.desktop
Run Code Online (Sandbox Code Playgroud)
它说:
x-scheme-handler/http=http-url-handler.desktop
x-scheme-handler/https=http-url-handler.desktop
Run Code Online (Sandbox Code Playgroud)
您还可以[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
Run Code Online (Sandbox Code Playgroud)
一些较旧的应用程序使用~/.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
Run Code Online (Sandbox Code Playgroud)
还有一个更老的过时的文件
被称为defaults.list
是仍在使用的一些应用程序。使用文本编辑器编辑此文件:
$ edit ~/.local/share/applications/defaults.list
Run Code Online (Sandbox Code Playgroud)
并手动添加这些行:
x-scheme-handler/http=http-url-handler.desktop
x-scheme-handler/https=http-url-handler.desktop
Run Code Online (Sandbox Code Playgroud)
下[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
Run Code Online (Sandbox Code Playgroud)
如果您还添加到该[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
Run Code Online (Sandbox Code Playgroud)
检查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
Run Code Online (Sandbox Code Playgroud)测试一些 URL。
这应该在 Chromium 中打开:
$ gio open 'https://superuser.com/questions/688063/is-there-a-way-to-redirect-certain-urls-to-specific-web-browsers-in-linux'
Run Code Online (Sandbox Code Playgroud)
这应该在 Firefox 中打开:
$ gio open 'https://askubuntu.com/questions/1161752/how-can-i-configure-a-domain-specific-default-browser'
Run Code Online (Sandbox Code Playgroud)
现在使用以下命令测试相同的 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'
Run Code Online (Sandbox Code Playgroud)更新 mimeinfo 缓存。
某些应用程序读取~/.local/share/applications/mimeinfo.cache
而不是~/.config/mimeapps.list. 所以更新缓存:
$ update-desktop-database ~/.local/share/applications/
Run Code Online (Sandbox Code Playgroud)为方便起见,这些文件在 Github 上:
https://github.com/nbeaver/askubuntu-custom-http-url-handler
| 归档时间: |
|
| 查看次数: |
1015 次 |
| 最近记录: |