![创建自定义 URL 协议处理程序](https://linux22.com/image/147020/%E5%88%9B%E5%BB%BA%E8%87%AA%E5%AE%9A%E4%B9%89%20URL%20%E5%8D%8F%E8%AE%AE%E5%A4%84%E7%90%86%E7%A8%8B%E5%BA%8F.png)
我想为我自己的自定义 URL 协议注册一个 URL 方案(或协议)处理程序,以便单击具有此自定义协议的链接将在该 URL 上执行命令。我需要采取哪些步骤来添加此处理程序?
示例:我想像ddg://query%20terms
在新的 DuckDuckGo 浏览器搜索中一样打开 URL。如果此协议已经存在,我认为重写处理程序的步骤与创建新处理程序的步骤没有太大区别。是的,从技术上讲,这只是一个 URL 方案,而不是一个协议。
答案1
要向 XDG 注册新的 URL 方案处理程序,首先创建一个指定x-scheme-handler/...
MIME 类型的桌面条目:
[Desktop Entry]
Type=Application
Name=DDG Scheme Handler
Exec=open-ddg.sh %u
StartupNotify=false
MimeType=x-scheme-handler/ddg;
请注意,%u
将 URL(例如ddg://query%20terms
)作为单个参数传递,根据桌面输入规范。
一旦您创建了此桌面条目并安装了它(即将其放入applications
XDG 的本地或系统目录中,例如~/.local/share/applications/
或/usr/share/applications/
),那么您必须使用 MIME 类型注册该应用程序(假设您已将您的桌面条目命名为ddg-opener.desktop
):
xdg-mime default ddg-opener.desktop x-scheme-handler/ddg
处理程序的参考实现ddg-open.sh
:
#!/usr/bin/env bash
# bash and not just sh because we are using some bash-specific syntax
if [[ "$1" == "ddg:"* ]]; then
ref=${1#ddg://}
#ref=$(python -c "import sys, urllib as ul; print ul.unquote_plus(sys.argv[1])" "$ref") # If you want decoding
xdg-open "https://duckduckgo.com/?q=$ref"
else
xdg-open "$1" # Just open with the default handler
fi
答案2
如果你有mimeo
已安装,并且您已经知道要为其创建关联的应用程序的桌面文件的名称,这就像执行以下操作一样简单:
mimeo --add 'x-scheme-handler/ddg' <path or name of desktop file>
例如,如果 duckduckgo,桌面文件位于/usr/share/applications/Duckduckgo.desktop
,那么您只需要:
mimeo --add 'x-scheme-handler/ddg' Duckduckgo
或者
mimeo --add 'x-scheme-handler/ddg' /usr/share/applications/Duckduckgo.desktop